四、docker容器的操作
阿新 • • 發佈:2020-12-23
方法一:不推薦使用 先建立一個容器 docker create 映象名稱 在啟動容器 docker start 映象名稱 方法二:推薦的 docker run -d -p 宿主機埠:映象埠 映象名稱:version run:建立並執行一個容器 -d:在後臺執行 -p:埠對映,把宿主機的埠對映為容器系統的埠 最後接要啟動的容器的映象的名稱:映象版本 docker run == docker create + docker start
二、容器的常用命令選項
docker的命令格式
docker run [OPTIONS] IMAGE [COMMAND] [ARG...] options的引數 -t :開啟一個終端,像使用交換機一樣使用容器 -i:互動式訪問 --name:容器名字 --network:指定網路 --rm:容器一停,自動刪除 -d:剝離與當前終端的關係;否則會一直佔據著終端 -p:埠對映,將容器內服務的埠對映在宿主機的指定埠 -p <container port> -p <hostport>:<container port> -p <hostip>:<hostport>:<container port> ps: 檢視執行著的容器 docker ps == docker container ls ps -a: 檢視所有容器
例子1:
docker run -d --name web1 -p 80:80 nginx:latest [root@inode3 ~]# docker run --name web1 -d -p 80:80 nginx:latest 03fcdd23c2ad9a9d81551ce3fd3bcf4f3a410c648a895fa6db5b497936515da1
檢視執行容器的狀態
docker ps [root@inode3 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 03fcdd23c2ad nginx:latest "nginx -g 'daemon of…" 12 minutes ago Up 12 minutes 0.0.0.0:80->80/tcp web1 [root@inode3 ~]# docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 03fcdd23c2ad nginx:latest "nginx -g 'daemon of…" 8 minutes ago Up 8 minutes 0.0.0.0:80->80/tcp web1
檢視容器的埠對映及容器
[root@inode3 ~]# docker port web1 80/tcp -> 0.0.0.0:80
啟動容器時,進入容器裡面
docker run --name ywx -it busybox:latest /bin/sh [root@inode3 ~]# docker run --name ywx -it busybox:latest /bin/sh / # ls bin dev etc home proc root sys tmp usr var / #
另外啟動一個xshell的視窗,檢視docker 容器
[root@inode3 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b1840dcc4a4d busybox:latest "/bin/sh" About a minute ago Up About a minute ywx 03fcdd23c2ad nginx:latest "nginx -g 'daemon of…" About an hour ago Up About an hour 0.0.0.0:80->80/tcp web1
可以發現ywx容器在執行
[root@inode3 ~]# docker run --name ywx -it busybox:latest /bin/sh / # ls bin dev etc home proc root sys tmp usr var / # exit [root@inode3 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b1840dcc4a4d busybox:latest "/bin/sh" 3 minutes ago Exited (0) 7 seconds ago ywx
三、停止容器
停止容器有2中方法
第一種:關閉執行的容器 docker stop 容器名或CONTAINER ID 第二種:殺死執行的容器(不建議使用) docker kill 容器名或CONTAINER ID -s 指定訊號; -9強制停止容器
關閉一個容器
[root@inode3 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 71dd5dd51ae4 nginx:latest "nginx -g 'daemon of…" 4 seconds ago Up 3 seconds 0.0.0.0:81->80/tcp web2 03fcdd23c2ad nginx:latest "nginx -g 'daemon of…" About an hour ago Up About an hour 0.0.0.0:80->80/tcp web1
有we1和we2兩個執行的容器
使用docker stop來關閉執行的容器web1 docker stop web1 [root@inode3 ~]# docker stop web1 web1 [root@inode3 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 71dd5dd51ae4 nginx:latest "nginx -g 'daemon of…" About a minute ago Up About a minute 0.0.0.0:81->80/tcp web2 [root@inode3 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 71dd5dd51ae4 nginx:latest "nginx -g 'daemon of…" 3 minutes ago Up 3 minutes 0.0.0.0:81->80/tcp web2 03fcdd23c2ad nginx:latest "nginx -g 'daemon of…" About an hour ago Exited (0) About a minute ago web1
使用docker kill來關閉容器 docker kill web2 [root@inode3 ~]# docker kill web2 web2 [root@inode3 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@inode3 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 71dd5dd51ae4 nginx:latest "nginx -g 'daemon of…" 5 minutes ago Exited (137) 8 seconds ago web2 03fcdd23c2ad nginx:latest "nginx -g 'daemon of…" About an hour ago Exited (0) 3 minutes ago web1
容器web2已經停止執行
四、重啟關閉的容器
命令格式:
docker start [option] 容器名稱或容器的CONTAINER ID option -a 在當前終端啟動 -i 互動式 使用容器名稱來啟動web1 [root@inode3 ~]# docker start web1 web1 [root@inode3 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 03fcdd23c2ad nginx:latest "nginx -g 'daemon of…" About an hour ago Up 3 seconds 0.0.0.0:80->80/tcp web1 使用容器的容器的CONTAINER ID來啟動web2 [root@inode3 ~]# docker start 71dd5dd51ae4 71dd5dd51ae4 [root@inode3 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 71dd5dd51ae4 nginx:latest "nginx -g 'daemon of…" 9 minutes ago Up 2 seconds 0.0.0.0:81->80/tcp web2 03fcdd23c2ad nginx:latest "nginx -g 'daemon of…" About an hour ago Up About a minute 0.0.0.0:80->80/tcp web1
五、檢視容器的資訊
docker inspect 容器名稱或容器的CONTAINER ID 檢視web1的ip資訊 [root@inode3 ~]# docker inspect web1|grep -i "ipaddr" "SecondaryIPAddresses": null, "IPAddress": "172.17.0.2", "IPAddress": "172.17.0.2", [root@inode3 ~]# docker inspect web1 可以檢視容器web1的所有資訊
刪除容器的步驟:
命令格式: docker rm 容器名稱或容器的CONTAINER ID
1、停止容器
2、刪除容器
刪除容器web1 [root@inode3 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 71dd5dd51ae4 nginx:latest "nginx -g 'daemon of…" 15 minutes ago Up 6 minutes 0.0.0.0:81->80/tcp web2 03fcdd23c2ad nginx:latest "nginx -g 'daemon of…" About an hour ago Up 7 minutes 0.0.0.0:80->80/tcp web1 第一步:先停止web1容器 [root@inode3 ~]# docker stop web1 web1 [root@inode3 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 71dd5dd51ae4 nginx:latest "nginx -g 'daemon of…" 16 minutes ago Up 7 minutes 0.0.0.0:81->80/tcp web2 03fcdd23c2ad nginx:latest "nginx -g 'daemon of…" About an hour ago Exited (0) 5 seconds ago web1 第二部:刪除已停止執行的web1容器 [root@inode3 ~]# docker rm web1 web1 [root@inode3 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 71dd5dd51ae4 nginx:latest "nginx -g 'daemon of…" 18 minutes ago Up 8 minutes 0.0.0.0:81->80/tcp web2 強制刪除執行中的容器web2 [root@inode3 ~]# docker rm -f web2 web2 [root@inode3 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 強制刪除所有容器(包含執行和沒有執行的容器) 環境說明:容器web1停止執行,web2執行正常 [root@inode3 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 615daf3e3c9d nginx:latest "nginx -g 'daemon of…" 12 seconds ago Exited (0) 3 seconds ago web1 4dbf642e55c0 nginx:latest "nginx -g 'daemon of…" About a minute ago Up About a minute 0.0.0.0:81->80/tcp web2 強制刪除所有容器web1和web2 [root@inode3 ~]# docker rm -f `docker ps -a -q` 615daf3e3c9d 4dbf642e55c0 [root@inode3 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
命令格式:
docker exec [options] 容器名稱或容器的CONTAINER ID Command [Ages]
options
-d:在後臺執行
-e:設定環境變數
-i:互動式
-t:開啟一個終端
-u:使用者名稱或UID
例子:
[root@inode3 ~]# docker run --name web1 -d -p 80:80 nginx:latest 7c5d1590be345fffab80385e76ff04a8f5d565962e03e6753ebef5112ad34087 [root@inode3 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7c5d1590be34 nginx:latest "nginx -g 'daemon of…" 21 seconds ago Up 20 seconds 0.0.0.0:80->80/tcp web1 1、互動式進入容器 [root@inode3 ~]# docker exec -it web1 /bin/bash root@7c5d1590be34:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var 2、檢視/目錄資訊 [root@inode3 ~]# docker exec web1 ls -l total 8 drwxr-xr-x 2 root root 4096 Feb 24 00:00 bin drwxr-xr-x 2 root root 6 Feb 1 17:09 boot drwxr-xr-x 5 root root 340 Mar 5 15:36 dev drwxr-xr-x 1 root root 66 Mar 5 15:36 etc drwxr-xr-x 2 root root 6 Feb 1 17:09 home drwxr-xr-x 1 root root 56 Feb 26 20:02 lib drwxr-xr-x 2 root root 34 Feb 24 00:00 lib64 drwxr-xr-x 2 root root 6 Feb 24 00:00 media drwxr-xr-x 2 root root 6 Feb 24 00:00 mnt drwxr-xr-x 2 root root 6 Feb 24 00:00 opt dr-xr-xr-x 111 root root 0 Mar 5 15:36 proc drwx------ 1 root root 27 Mar 5 15:39 root drwxr-xr-x 1 root root 23 Mar 5 15:36 run drwxr-xr-x 2 root root 4096 Feb 24 00:00 sbin drwxr-xr-x 2 root root 6 Feb 24 00:00 srv dr-xr-xr-x 13 root root 0 Mar 5 15:36 sys drwxrwxrwt 1 root root 6 Feb 26 20:02 tmp drwxr-xr-x 1 root root 66 Feb 24 00:00 usr drwxr-xr-x 1 root root 19 Feb 24 00:00 var
命令格式:
docker logs 容器名稱或容器的CONTAINER ID
查詢容器web1中日誌資訊
直接訪問容器的logs [root@inode3 ~]# docker logs web1 沒有任何日誌的 先訪問下容器web1 [root@inode3 ~]# curl 192.168.32.103 再查詢容器的logs [root@inode3 ~]# docker logs web1 192.168.32.103 - - [05/Mar/2020:15:42:41 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"
查詢容器的內部日誌,需要先訪問該容器的功能,再查詢該容器的日誌
在執行docker容器時可以加如下引數來保證每次docker服務重啟後容器也自動重啟: --restart=always –restart具體引數值詳細資訊: no – 容器退出時,不重啟容器; on-failure – 只有在非0狀態退出時才從新啟動容器; always – 無論退出狀態是如何,都重啟容器;
如果已經啟動了則可以使用如下命令:
docker update --restart=always <CONTAINER ID>
從容器中拷貝檔案到宿主機 docker cp 容器id:檔案路徑 宿主機檔案路徑 從宿主機拷貝檔案到容器 docker cp 宿主機檔案路徑 容器id:檔案路徑