[TOC]php
容器是獨立運行的一個或一組應用。Docker容器經過Docker鏡像來建立。
容器與鏡像的關係相似於面向對象編程中的對象與類。html
[info] 如下命令的容器名稱均可以換成容器的id
# 建立一個叫mycon的容器並傳入參數php:5.6-fpm docker create --name mycon php:5.6-fpm # 建立並運行ubuntu:15.10,輸出 "Hello world" docker run ubuntu:15.10 /bin/echo "Hello world" # 建立容器,並進入容器,若是不指定name就會本身建立一個臨時name docker run -i -t ubuntu:18.10 /bin/bash # 加上d的話就建立運行後就直接退出 docker run -itd ubuntu:18.10 # 在容器mycon中開啓一個交互模式的終端 docker exec -i -t mycon /bin/bash # 在容器mycon中以交互模式執行容器內/data/test.sh腳本 docker exec -it mycon /bin/sh /data/test.sh # 退出容器 快捷鍵:Ctrl+P+Q exit; # 中止容器運行,發送信號SIGTERM docker stop mycon # 啓動一箇中止狀態的容器 docker start mycon # 重啓一個容器 docker restart mycon # 刪除一個容器 doecker rm mycon # 阻塞到一個容器,直到容器中止運行 docker wait mycon # 暫停容器中全部的進程 docker pause mycon # 恢復容器中全部的進程。 docker unpause mycon # 找到目標容器的pid,而後用nsenter進入 # 老版本的docker是沒有exec命令的 docker inspect -f {{.State.Pid}} 44fc0f0582d9 nsenter --target 998 --mount --uts --ipc --net --pid # 發送信號給容器,默認SIGKILL docker kill -s KILL mycon (-s表示向容器發送一個信號)
# 顯示狀態爲運行(Up)的容器 docker ps -a :顯示全部的容器,包括未運行的。例如:docker ps -a # 深刻容器內部獲取容器全部信息,例如:docker inspect mycon docker inspect -f :指定返回值的模板文件。例如:docker inspect -f '{{.NetworkSettings.IPAddress}}' mycon (獲取正在運行的容器mycon的 IP) -s :顯示總的文件大小。 --type :爲指定類型返回JSON。 # 查看容器的日誌(stdout/stderr) docker logs -f : 跟蹤日誌輸出,例如:docker logs -f mycon(查看容器mycon的日誌輸出,容器必須是啓動狀態) --since :顯示某個開始時間的全部日誌 -t : 顯示時間戳 --tail :僅列出最新N條容器日誌,例如:docker logs --since="2017-05-01" --tail=10 mycon(查看容器mycon從2017年5月1往後的最新10條日誌。) # 獲得docker服務器的實時的事件 docker events -f :根據條件過濾事件;例如:docker events -f "image"="mysql:5.6" --since="1466302400" (顯示docker 鏡像爲mysql:5.6 這個時間戳對應的日期以後的相關事件。) --since :從指定的時間戳後顯示全部事件;例如:docker events --since="1466302400" (顯示docker 在這個時間戳對應的日期以後的全部事件。) --until :流水時間顯示到指定的時間爲止; # 顯示容器的端口映射,例如:docker port mycon docker port # 顯示容器的進程信息,支持ps參數。例如docker top mycon docker top # 顯示容器文件系統的先後變化, 檢查容器裏文件結構的更改。例如:docker diff mycon docker diff
刪除容器後數據還存在mysql
# 數據卷的建立與查看 # 默認是建立在宿主機的/var/lib/docker/volumes/上 docker volume create nginx-vol docker volume ls docker volume inspect nginx-vol # 數據卷掛載 docker run -itd --name=nginx-test --mount src=nginx-vol,dst=/usr/share/nginx/html nginx docker run -itd --name=nginx-test -v nginx-vol:/usr/share/nginx/html nginx # 數據卷指定掛載目錄 /home/docker/wwwroot # -v方式的能夠自動建立目錄, --mount方式的不能夠 docker run -itd --name=nginx-test --mount src=nginx-vol,dst=/usr/share/nginx/html nginx docker run -itd --name=nginx-test --mount type=bind src=/home/docker/wwwroot,dst=/usr/share/nginx/html nginx docker run -itd --name=nginx-test -v /home/docker/wwwroot:/usr/share/nginx/html nginx
若是容器之間須要共享一些持續更新的數據nginx
# 建立掛載卷容器 docker run -itd --name nginx-data --mount src=nginx-vol,dst=/usr/share/nginx/html nginx # 新的容器關聯數據卷容器 docker run -itd --volumes-from nginx-data --name nginx-1 nginx docker run -itd --volumes-from nginx-data --name nginx-2 nginx # 三個容器的數據卷通用
# 從容器裏向外拷貝文件或目錄 docker cp -L :保持源目標中的連接 docker cp /www/test mycon:/www/ # 將主機/www/test目錄拷貝到容器mycon的/www目錄下 docker cp /www/test mycon:/www # 將主機/www/test目錄拷貝到容器mycon中,目錄重命名爲www docker cp mycon:/www /tmp/test # 將容器mycon中的/www目錄拷貝到主機的/tmp/test目錄中 # 將容器整個文件系統導出爲一個tar包,不帶layers、tag等信息 # 導出容器必需要先中止容器 docker export -o :將輸入內容寫到文件。例如:docker export -o mysql-`date +%Y%m%d`.tar a404c6c174a2 #將id爲a404c6c174a2的容器按日期保存爲tar文件。 # docker import <文件路徑> <容器名> docker import ./ubuntu1810.tar ubuntu1810:tag
[info] 注意,docker import導入容器進去是成爲一個新的鏡像,要經過
docker images
來查看,相比docker save命令,容器文件會丟失全部元數據和歷史記錄,僅保存容器當時的狀態,至關於虛擬機快照。