# 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)