天天看點

Docker實戰-操作Docker容器實戰(二)

作者:雲原生微服務
Docker實戰-操作Docker容器實戰(二)

上篇分享中,我們介紹了關于如何建立容器、如何啟動容器、如何停止容器。這篇我們來分享一下如何操作容器。

如何進入容器

可以通過使用-d參數啟動容器後會進入背景運作,使用者無法檢視容器中的資訊,無法對容器中的資訊進行操作。

這個時候如果我們需要進入容器對容器進行操作,那麼就可以通過 attach 或者是 exec指令來進行操作。

attach指令

attach 是Docker自帶的指令,其指令格式如下

docker [container] attach [--detach-keys[=[]]] [--no-stdin] [--sig-proxy[=true]] CONTAINER           

從指令中可以看到這個指令支援三個參數

  • --detach-keys[=[]] :指定退出attach模式的快捷鍵
  • --no-stdin=true :是否關閉标準輸入,預設是打開
  • --sig-proxy=true:是否代理收到的系統信号給應用程序使用預設是true。

下面我們來看如何使用這個指令。

[root@localhost ~]# docker run -itd ubuntu
83528e7f40943932dfc635501f5d7ac58656b0798cbcbf5d0906371596a9706c
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
83528e7f4094   ubuntu    "/bin/bash"   5 minutes ago   Up 5 minutes             eager_lamport
[root@localhost ~]# docker attach eager_lamport
root@83528e7f4094:/#            

執行完成之後會看到,底部的指令導航欄中的内容變成了容器内部的路徑,但是使用attach指令有一點不好,就是如果有多個視窗連接配接同一個容器的時候,所有的視窗都會同步進行顯示。當某個視窗阻塞的時候,其他視窗也無法執行指令。

exec 指令

從Docker的1.3.0版本開始,Docker提供了一個exec指令,可以在容器中直接執行任意指令。格式如下

docker [container] exec [-d|--detach] [--detach-keys[=[]]] [-i|--interactive] [--privileged]
[-t|--tty] [-u|--user[=USER]] CONTAINER COMMAND [ARG……]           

其中比較重要的參數

  • -d ,--detach:在容器中背景執行指令
  • --detach-keys="":指定将容器切換到背景的按鍵
  • -e:指定環境變量
  • -i:打開标準輸入用于接收使用者指令
  • -t:配置設定僞終端
  • -u:指定指令的使用者名或者是ID

下面我們來操作一下

[root@localhost ~]# docker run -itd ubuntu
4aa9478d87afecf7f0caf52848e7e41c53dbc7c7e1f6931a2e82c358a35f144a
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
4aa9478d87af   ubuntu    "/bin/bash"   4 seconds ago   Up 4 seconds             elastic_leakey
[root@localhost ~]# docker exec -it 4aa9478d87af /bin/bash
root@4aa9478d87af:/# w
 01:24:05 up 21 min,  0 users,  load average: 0.01, 0.02, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root@4aa9478d87af:/#            

删除容器

我們之前也提到過如果要删除一個容器的話可以使用 docker rm 指令來進行操作,這個指令主要是用來删除處于終止或者是退出狀态的容器。指令格式如下

docker [container] rm [-f|--force] [-l|link] [-v|--volumes] CONTAINER [CONTAINER……]           

其中需要注意的參數

  • -f:表示是否強制終止并删除一個運作中的容器
  • -l:表示删除容器的連接配接,但保留容器
  • -v: 表示删除容器挂載的資料卷

通過 docker ps -a 指令,可以看到所有的容器狀态

[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS                     PORTS     NAMES
4aa9478d87af   ubuntu    "/bin/bash"   5 minutes ago    Up 5 minutes                         elastic_leakey
83528e7f4094   ubuntu    "/bin/bash"   21 minutes ago   Exited (0) 5 minutes ago             eager_lamport
0d611b23bd59   ubuntu    "18.04"       21 minutes ago   Created                              pensive_keller
[root@localhost ~]#            

在預設情況下使用docker rm指令隻能删除處于終止或者已經退出的容器,但是并不能删除正在處于運作中的容器。如果想要删除則需要添加 -f 參數。

導入和導出容器

在有些情況下,我們會遇到伺服器系統遷移,這個時候就需要将容器從一個系統中遷移到另外的系統中。這個時候我們就可以通過容器的導入導出來實作。

導出容器

容器的導出是指,将一個容器導出到一個檔案的過程,在這個過程中,無論容器是否是運作的,可以使用 docker [container] export 指令,指令格式如下

docker [container] export [-o|--output[=""]] CONTAINER           

其中-o選項是用來指定導入的tar名稱。

[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS                     PORTS     NAMES
4aa9478d87af   ubuntu    "/bin/bash"   5 minutes ago    Up 5 minutes                         elastic_leakey
83528e7f4094   ubuntu    "/bin/bash"   21 minutes ago   Exited (0) 5 minutes ago             eager_lamport
0d611b23bd59   ubuntu    "18.04"       21 minutes ago   Created                              pensive_keller
[root@localhost ~]# docker export -o test_for_stop.tar 83528e7f4094 
[root@localhost ~]# ls
anaconda-ks.cfg  docker  docker-20.10.17.tgz  Dockerfile  initial-setup-ks.cfg  test_for_stop.tar
[root@localhost ~]#            

将容器導出之後,可以遷移到其他伺服器上使用導入指令導入

導入容器

将導出的檔案搬遷到正常的機器上,就可以通過docker import 指令進行導入了,指令格式如下

docker import [-c|--change[=[]]] [-m|--message[=MESSAGE]] file|URL|-[REPOSITORY[:TAG]]           

可以通過-c,--change=[] 來同時執行容器的修改。

[root@localhost ~]# docker import test_for_stop.tar  ubuntu:v1.0
sha256:d2718af1a9f22218f3e5cf31b0e31d787a002b2d7a9b64bf2aac2609bd65af3d
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
ubuntu       v1.0      d2718af1a9f2   23 seconds ago   77.8MB
nginx        0.1       56d8d0398d46   5 days ago       126MB
test         0.1       05268b440fd9   5 days ago       63.2MB
ubuntu       latest    5a81c4b8502e   4 weeks ago      77.8MB
ubuntu       18.04     f9a80a55f492   2 months ago     63.2MB
[root@localhost ~]# 
           

總結

到這裡,我們關于如何進入檢視容器,如何删除容器,以及如何導入導出容器的相關操作就介紹完成了。後續的分享中,還會帶來更多關于Docker操作相關的内容,請大家多多關注。