# Docker 常用指令
###### tags: `常用指令` `docker`
## 基本指令
* 列出 containers 所佔空間
```
docker ps --size
```
* 列出 docker 所佔空間
```
docker system df
```
* 列出 containers
```
# 列出所有 containers
docker ps -a
# 列出正在運行的 containers
docker ps
```
* 暫停運行 container
```
docker stop <container name>
```
* 重新啟動 container
```
docker start <container name>
```
* 刪除 container
```
docker rm <container name>
```
* 列出所有映象檔
```
docker images
```
* 刪除映象檔
```
docker rmi <image name>
```
* 建立 container
```
docker run -d <image name>
# 自訂 container name
docker run -d --name <container name> <image name>
# 指定主機端 port 對應 container port
docker run -d -p <host port>:<container port> <image name>
# 建立主機端與 container 之間檔案同步的路徑 (Volume)
docker run -d -v <host volume path>:<container volume path> <image name>
```
* 進入 container shell
```
docker exec -it <container name> bash
```
* 將 container 做成映象檔
```
docker commit -a "<author info>" -m "<any message>" <container name> <image name>:<tag name>
```
* 上傳至 Docker hub
```
# 1.登入 Docker hub
docker login
# 2. tag name
docker tag <image name> <Docker hub user name>/<image name>
# 3. 上傳
docker push <Docker hub user name>/<image name>
```
* 下載映象檔
```
docker pull <image name>
# 指定版本
docker pull <image name>:<tag name>
# 指定作者
docker pull <Docker hub user name>/<image name>
```
* 將映象檔存成壓縮檔
```
# tar檔
docker save <image name> > <file name>.tar
# tar.gz檔
docker save <image name> | gzip > <file name>.tar.gz
```
* 將壓縮檔轉成映象檔
```
docker load -i <file name>.tar.gz
```
## 變更 docker 預設路徑
#### 發現主機放置 docker 的空間不足,需變更預設儲存路徑
```
# 1.停止 docker
sudo service docker stop
# 2.編輯文件
sudo vim /etc/docker/daemon.json
# 3.在文件中加入
{
"data-root":"<your new path>/docker"
}
# 4.複製原有檔案至新路徑
sudo rsync -aP /var/lib/docker/ <your new path>/docker
# 5.變更原有案名稱作為備份
sudo mv /var/lib/docker /var/lib/docker.old
# 6.重啟 docker
sudo service docker start
```
## 以 Dockerfile 建立映象檔
#### 除了下載 Docker hub 上的映象檔,也可自己製作
```
# 建立 Dockerfile
vim Dockerfile
```
#### Dockerfile 內容
```
FROM <image name>
RUN <command...>
# 範例
# 以 Ubuntu 為作業系統,安裝 vim, nginx, git
FROM ubuntu
RUN apt-get update -qq && apt-get -y --no-install-recommmends install \
vim \
nginx \
git-all
```
##### 建立映象檔
```
ddocker build -t <>image name <>Dcockerfile path --noache
# 範例
# 建立映象檔
docker build -t ubuntu_vim_nginx_git . --no-cache
# 以此映象檔建立 container
docker run -d -it --name test_server ubuntu_vim_nginx_git
# 進入 container
docker exec -it test_server bash
# 可測試 vim, nginx, git 是否安裝成功
```
## 運用 docker-compose 佈署 container
#### 以往我們建立 container 需要將參數寫入在 docker run 裡,但有時參數過多會導致指令冗長,我們可以撰寫 docker-compose.yml,事先把參數寫在裡面,再透過 docker-compose 幫我們依據寫好的參數來建立 container
#### 如果我們有一個 docker run
```
docker run -d -p <host port>:<container port> -v <host volume path>:<container volume path> --name <container name> <image name>
```
#### 其效果等同於以下 docker-compose.yml 內容
```
# 重視縮排
services:
<server name>:
image: <image name>
ports:
- "<host port>:<container port>"
volumes:
- <host volume path>:<container volume path>
container_name: <container name>
```
#### 在 docker-compose.yml 所在路徑執行以下指令即可建立 container
```
docker-compose up -d
```
#### docker-compose 還有以下優點
1. 可同時建立多個 container
2. host volume path 可使用相對路徑
3. 也可用於建立映象檔(by Dockerfile)