Docker的容器使用與連線-Window

以往清泉發表於2020-12-13

啟動容器

啟動容器之前需要先拉取映象,然後通過 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 命令可以看到容器的資訊

 

相關文章