啟動容器
啟動容器之前需要先拉取鏡像,然后通過 run 命令啟動容器,同一個鏡像可以啟動多個容器,只要執行多次 run 命令就行了。我們這邊啟動 centos 的鏡像。
PS D:\> docker run -it centos /bin/bash
[root@6c7369854385 /]#
參數說明:
-i: 交互式操作
-t: 終端
centos : centos 鏡像
/bin/bash:放在鏡像名后的是命令,這里我們希望有個交互式 Shell,因此用的是 /bin/bash。
要退出終端,直接輸入 exit。run 命令相當於執行了 create 和 start 命令。
上面的命令是前台運行的,運行后直接進入容器內,如果退出了容器就變為已退出狀態,可以通過增加 -d 參數表示后台運行,這樣不會在執行 run 命令后進入容器內操作。
對於停止的容器可以使用 start 命令啟動。
PS D:\> docker start 5bdc26bb5efa
或者通過 restart 命令重啟容器
PS D:\> docker restart 5bdc26bb5efa
查看容器
通過 ps 命令可以查看容器列表
PS D:\> docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6c7369854385 centos "/bin/bash" 3 minutes ago Exited (0) 53 seconds ago angry_lichterman
-a 表示顯示所有的容器,不管任何狀態。如果不加 -a 默認顯示運行中的。
容器總過有7種狀態 created(已創建)、restarting(重啟中)、running(運行中)、removing(刪除中)、paused(已暫停)、exited(已停止 )和dead(已死亡)。
停止容器
停止容器使用 stop 命令,加上容器 id
PS D:\> docker stop 5bdc26bb5efa
刪除容器
刪除容器用 rm 命令
PS D:\> docker rm 5bdc26bb5efa
或者通過以下命令刪除所有的已停止的容器
PS D:\> docker container prune
進入容器
通過 run 命令我們創建了容器,我們可以通過 exec 或 attach 命令進入容器,在容器內部指定操作。兩者有個區別,就是通過 attach 命令進入容器后通過 exit 退出,容器將會變為 exited 狀態,exec 不會。
PS D:\> docker exec -it 5bdc26bb5efa /bin/bash
PS D:\> docker attach 5bdc26bb5efa
通過上面用法也可以看出,attach 不會在容器中創建進程執行額外的命令,只是附着到容器上。exec會在運行的容器上創建進程執行新的命令。
容器的導出和導入
如果要導出本地某個容器,可以使用 export 命令都出容器快照
PS D:\> docker export 5bdc26bb5efa > exportCentos.tar
默認導出到當前位置,上述命令表示導出到 D 盤。

導入快照可以用 import 命令從容器快照文件中再導入為鏡像,以下實例將快照文件exportCentos.tar 導入到鏡像 xu/centos:v1
PS D:\> cat exportCentos.tar | docker import - xu/centos:v1
導入容器快照可以是一個路徑,也可以是一個 URL
容器連接-端口映射
前面我們用 run 命令啟動了容器,比如我們啟動了一個 redis 的容器,那么我們需要訪問這個容器來存儲我們的緩存,可以通過 -P 或 -p 參數來指定端口映射。
-P :是容器內部端口隨機映射到主機的高端口。
-p : 是容器內部端口綁定到指定的主機端口和主機的網絡地址。
使用 -P :
PS D:\> docker run -d -P redis
查看容器可以看到容器的6379端口綁定了主機的32770端口
PS D:\> docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 01b6077295ac redis "docker-entrypoint.s…" 3 seconds ago Up 3 seconds 0.0.0.0:32770->6379/tcp modest_golick
使用 -p,指定了主機端口為6666,ip為127.0.0.1,容器端口為 tcp ,后面的 tcp 表示綁定 tcp 端口,默認就是 tcp ,還可以設置為 udp :
PS D:\> docker run -d -p 127.0.0.1:6666:6379/tcp redis
通過 port 命令可以查看端口綁定情況
PS D:\> docker port 8b7db8c10c85 6379/tcp -> 127.0.0.1:6666
我們可以用 Redis Desktop Manager 測試連接下,可以看到如下連接成功啦。

容器連接-局域網連接
除了端口映射,我們還可以建立一個網絡,將容器加入到這個網絡中,這樣容器之間可以在這個網絡中相互訪問,我們先建立這個網絡
PS D:\> docker network create -d bridge test-net
5cb11e23cb3ad1bfea61452f1448dd3a67b34680dc1c5655203211fbe4c777ce
參數說明:
-d:參數指定 Docker 網絡類型,有 bridge、overlay。其中 overlay 網絡類型用於 Swarm mode,此處忽略。
然后通過 network 命令查看網絡
PS D:\> docker network ls NETWORK ID NAME DRIVER SCOPE c594c3f53367 bridge bridge local a98ee54f88d4 host host local 3d3d4b7c007a none null local 5cb11e23cb3a test-net bridge local
我們可以通過如下語句刪除網絡
PS D:\> docker network rm test-net
我們在運行容器的時候可以連接到指定的網絡,建立兩個 redis 容器
PS D:\> docker run -itd --name redis_1 --network test-net redis
PS D:\> docker run -itd --name redis_2 --network test-net redis
我們進入 redis_1 容器添加一個鍵值對,然后通過 redis_2 容器連接 redis_1 容器上的 redis 獲取值,如下:
PS D:\> docker exec -it redis_1 /bin/bash root@6bd2da3b7854:/data# redis-cli -h redis_1 redis_1:6379> set mykey myvalue OK redis_1:6379> get mykey "myvalue" PS D:\> docker exec -it redis_2 /bin/bash root@6bd2da3b7854:/data# redis-cli -h redis_1 redis_1:6379> get mykey
可以看到 redis_1 和 redis_2 是相互連通的
容器信息
通過 inspect 命令可以看到容器的信息

