操作docker容器
docker create
常用參數:
--name:為容器分配一個名字
-v | --volume :為容器綁定安裝一個卷,例如-v /data 會為容器創建一個/data分區出來
-a, --attach
例如:
# docker create -it ubuntu:latest 2434968ec612b085b4b34e93f9858fdc36fb94e2a4527966a14ef93e1a18a00f # docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2434968ec612 ubuntu:latest "/bin/bash" 3 seconds ago Created mystifying_proskuriakova
啟動容器
docker start
使用docker create創建的容器處於停止狀態,可以使用docker start命令啟動
# docker start mystifying_proskuriakova # docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2434968ec612 ubuntu:latest "/bin/bash" About a minute ago Up 3 seconds mystifying_proskuriakova
停止容器
docker stop [-t|--time[=10]] [CONTAINER...]
首先向容器發送SIGTERM信號,等待超過一段時間後(默認為10秒)後,再發送SIGKILL信號來終止容器
重啟容器
docker restart
進入容器:
attach
使用-d參數時,容器啟動後會進入後臺,用戶無法看到容器中的信息,這時候要進入容器可以使用attach或者exec或者第三方的nsenter工具等。
docker attach [--detach-keys[=[]]] [--no-stdin] [--sig-proxy[=true]] CONTAINER
--detach-keys[=[]]:指定退出attach模式的快捷鍵序列,默認是CTRL-p CTRL-q
--no-stdin=true | false:是否關閉標準輸入,默認是保持打開。
--sig-proxy=true | false :是否代理收到的系統信息給應用進程,默認為true
如:
##創建並啟動一個容器 名為test # docker run -itd --name test ubuntu:latest 3a4a6614acbfc820f5da3983527e3e585946f27393fab17b1ce09adb7c757206 ##查看容器進程 [root@OPS01-LINTEST02 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3a4a6614acbf ubuntu:latest "/bin/bash" 4 seconds ago Up 3 seconds test ##連接到該容器 [root@OPS01-LINTEST02 ~]# docker attach test root@3a4a6614acbf:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
註意:使用attach連接到容器時,如果多個窗口同時使用attach連接到同一個容器時,所有窗口都會同步顯示。當某個窗口因命令阻塞時,其他窗口也無法執行操作
exec命令
從docker1.3版本開始提供更加方便的exec命令,可以在容器內直接執行任意命令,用法為
docker exec [-d|-detach] [--detach-keys[=[]]] [-i|--interactive] [--privileged] [-t|--tty] [-u|--user[=USER]] CONTAINER COMMAND [ARG...]
-i, --interactive=true|false:打開標準輸入接受用戶輸入命令,默認為false;
--privileged=true|false: 是否給執行命令最高權限,默認為false
-t, --tty=true|false:分配偽終端
-u, --user="":執行命令的用戶名或ID
例如:
進入到前面創建的容器中
docker exec -it test /bin/bash
在容器中執行ls命令
root@3a4a6614acbf:/# ls bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr
刪除容器
docker rm [-f|--force] [-l|--link] [-v|--volumes] CONTAINER [CONTAINER...]
主要支持的選項:
-f, --force=false:是否強制終止並刪除一個運行中的容器
-l, --link=false:刪除容器的連接,但保留容器
-v, --volumes=false:刪除容器掛載的數據卷
默認情況下,docker rm只能刪除處於終止狀態的容器,如果要刪除運行狀態的容器,可以使用-f參數,docker會先發送SIGKILL信號給容器,終止其應用,然後刪除容器
導入導出容器
有時候需要將容器從一個系統遷移到另一個系統,可以使用導入導出功能
1、導出容器
導出一個已經創建的容器到文件,不管此時容器是否處於運行狀態,可以使用docker export 命令,用法:
docker export [-o|--output [=""]] CONTAINER
-o:指定導出的tar文件名
例如:
# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3a4a6614acbf ubuntu:latest "/bin/bash" 41 minutes ago Up 25 minutes test # docker export -o test_for_run.tar test # ls test_for_run.tar
導出之後,就可以將文件上傳到其他機器上,使用導入命令導入到系統中,從而實現容器的遷移
2、導入容器
導出的test_for_run.tar文件可以使用import命令導入變成鏡像,該命令格式為:
docker import [-c --change[=[]]] [-m|--message[=MESSAGE]] file|URL|-REPOSITORY[:TAG]
用戶可以通過-c,--change=[] 選項在導入的同時執行對容器進行修改的Dockerfile指令
# docker import test_for_run.tar ubuntu:v1.0 sha256:2c82ae3a0afe67122ce5fabe397025bc19bffef5c2a6b873098567846c00cfdc # docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu v1.0 2c82ae3a0afe 1 second ago 69.8MB ubuntu v1 c4af03e0f787 22 hours ago 87MB ubuntu 14.04 578c3e61a98c 7 days ago 223MB ubuntu latest 113a43faa138 7 days ago 81.1MB nginx latest cd5239a0906a 7 days ago 109MB centos 7 49f7960eb7e4 8 days ago 200MB centos latest 49f7960eb7e4 8 days ago 200MB centos 6 70b5d81549ec 2 months ago 195MB
操作docker容器