Docker容器(三)


一、創建容器

  容器是Docker另一個核心的概念,簡單來說,容器是鏡像的一個運行實例,所不同的是,鏡像是靜態的只讀文件,而容器帶有運行時需要的可寫文件層

1.1. 新建容器

  使用docker create命令來新建容器

[root@rsync131 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/centos    latest              5182e96772bf        6 weeks ago         200 MB
[root@rsync131 ~]# docker create centos
b9dd06b5dcba561b178b1892631cd318f0babd4a9a3f067761963a6ab61fe078
[root@rsync131 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
b9dd06b5dcba        centos              "/bin/bash"         9 seconds ago       Created                                 sleepy_sammet

1.2. 啟動容器

  使用docker start命令來啟動容器

[root@rsync131 ~]# docker start b9dd06b5dcba
b9dd06b5dcba
[root@rsync131 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                     PORTS               NAMES
b9dd06b5dcba        centos              "/bin/bash"         About a minute ago   Exited (0) 4 seconds ago                       sleepy_sammet

  PS:不知道為什么我使用這樣的方式是啟動不了容器的,待解釋

1.3. 新建並啟動容器

  一般在創建容器的是我們不會使用上面的兩步的方式來進行創建,有個更簡單的方式就是在創建的時候直接啟動

  使用docker run 命令,創建並啟動容器

[root@rsync131 ~]# docker run -it -d --name test_centos centos
159a08c11fece853626516ab94b401464efd85d69c1f88706ec17a29178fee54
[root@rsync131 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
159a08c11fec        centos              "/bin/bash"         3 seconds ago       Up 3 seconds                            test_centos


docker run:死命令
-i:讓容器的標准輸入保持打開
-t:分配個偽終端
-d:守護狀態運行
--name:指定容器名字參數
test_centos:容器名字
centos:鏡像名或者鏡像ID

  這里我們說一下docker run執行的時候都干了什么

    檢查本地鏡像是否存在,不存在則會自動去公有倉庫去下載

    利用鏡像創建容器,並啟動容器

    分配一個文件系統給容器,並在只讀的鏡像層外面掛載一層可讀寫層

    從宿主主機配置的網橋接口中橋接一個虛擬接口到容器中

    從網橋的地址池配置一個IP給容器

    執行用戶指定的應用程序

1.4. 查看容器運行日志

  使用命令docker logs 來查看日志

[root@rsync131 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
159a08c11fec        centos              "/bin/bash"         21 minutes ago      Up 21 minutes                           test_centos
[root@rsync131 ~]# docker logs 159a08c11fec

 

二、終止容器

2.1. 終止容器

  使用docker stop 來終止正在運行的容器

語法格式:
docker stop 容器名

常用選項:
-t,--time[=10] : 10秒后發送終止信號

  使用docker kill 命令可以直接終止容器

  docker kill 命令會直接發送SIGKILL信號來強行終止容器

[root@rsync131 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
159a08c11fec        centos              "/bin/bash"         29 minutes ago      Up 29 minutes                           test_centos
[root@rsync131 ~]# docker stop 159a08c11fec
[root@rsync131 ~]# docker kill 159a08c11fec

2.2. 查看終止的容器

  使用docker ps 只是可以查看正在運行的容器

  使用docker ps -a 則可以看到所有的容器包括正在運行的和已經終止的容器

[root@rsync131 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
159a08c11fec        centos              "/bin/bash"         30 minutes ago      Up 30 minutes                           test_centos
[root@rsync131 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
159a08c11fec        centos              "/bin/bash"         30 minutes ago      Up 30 minutes                                  test_centos
b9dd06b5dcba        centos              "/bin/bash"         36 minutes ago      Exited (0) 9 minutes ago                       sleepy_sammet

  

2.3. 啟動和重啟已經終止的容器

  已經終止的容器我們可以使用docker start 命令來啟動

  也可以使用docker restart 命令將一個正在運行的容器先stop后start

[root@rsync131 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
159a08c11fec        centos              "/bin/bash"         30 minutes ago      Up 30 minutes                                  test_centos
b9dd06b5dcba        centos              "/bin/bash"         36 minutes ago      Exited (0) 9 minutes ago                       sleepy_sammet
[root@rsync131 ~]# docker start b9dd06b5dcba
b9dd06b5dcba
[root@rsync131 ~]# docker restart 159a08c11fec
159a08c11fec

  

三、進入容器

  在使用 -d 選項來運行容器的時候,容器會在后台運行,用戶是無法看到容器的信息的,也無法進入操作

  這個時候如果我們要進入容器進行操作,應該怎么辦呢?在docker 中進入docker中的方法有很多種,比如官方的attach和exec命令,以及第三方的nsenter工具(這個沒有用過 最常用的還是exec)等

3.1. attach 命令

attach命令是docker自帶的命令
語法格式:
docker attach [--detach-keys[=[]]] [--no-stdin] [--sig-proxy[=true]] CONTAINER

支持的常用主要選項:
--detach-keys[=[]]:指定退出attach模式的快捷鍵序列,默認是CTRL+p CTRL-q
--no-stdin=true|false :是否關閉標准輸入,默認true
--sig-proxy=true|false : 是否代理收到的系統信號給應用程序,默認是true
[root@rsync131 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
159a08c11fec        centos              "/bin/bash"         41 minutes ago      Up 10 minutes                           test_centos
[root@rsync131 ~]# docker attach 159a08c11fec
[root@159a08c11fec /]# 

PS:使用attach命令進入容器是很不方便的,就是這個命令只允許一個人使用容器,在開多個窗口同時用attach進入容器的時候,窗口執行的命令會同步,當一個窗口阻塞了,其他窗口就不能玩了,所有不用這個命令,太坑了

3.2. exec 命令

  為了解決上面的坑,docker在1.3.0版本提供了exec這個命令解決了attach命令的坑

語法格式:
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:分配偽終端 默認false
-u,--user="" : 執行命令的用戶或者ID
[root@rsync131 ~]# docker exec -it 159a08c11fec bash
[root@159a08c11fec /]# ls
anaconda-post.log  bin  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@159a08c11fec /]#

  可以看到,一個bash終端打開了,在不影響容器內其他應用的前提下,用戶可以很容易的與容器進行交互

PS:通過制定 -it 參數保持標准輸入,並且分配個偽終端,是很推薦的方式哦

四、刪除容器

   使用docker rm 命令來刪除處於終止或者退出狀態的容器

語法格式:
docker rm [-f|--force] [-l|--link] [-v|--volumes] CONTAINER [CONTAINER.....]

主要選項參數:
-f,--force=false:是否強行終止並刪除運行中的容器
-l,--link=false:刪除容器的鏈接,但是保留容器
-v,--volumes=false:刪除容器掛載的數據卷
[root@rsync131 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                         PORTS               NAMES
159a08c11fec        centos              "/bin/bash"         2 hours ago         Up About an hour                                   test_centos
b9dd06b5dcba        centos              "/bin/bash"         2 hours ago         Exited (0) About an hour ago                       sleepy_sammet
[root@rsync131 ~]# docker rm b9dd06b5dcba
b9dd06b5dcba
[root@rsync131 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
159a08c11fec        centos              "/bin/bash"         2 hours ago         Up About an hour                        test_centos

  默認情況下,docker rm命令只能刪除已經終止的容器,不能刪除運行中的容器,想要刪除運行中的容器可以使用 -f 參數,來強制的刪除

五、容器的導入與導出

  在做容器遷移的時候我們就要先把容器導出,然后在導入到其他的地方

5.1. 導出容器

  使用命令docker export 命令來導出容器

語法格式:
docker export [-o|--output[=""]] CONTAINER

主要選項參數:
-o,--output:指定導出的tar文件名
[root@rsync131 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
159a08c11fec        centos              "/bin/bash"         2 hours ago         Up About an hour                        test_centos
[root@rsync131 ~]# docker export -o centos_test.tar.gz 159a08c11fec
或者
[root@rsync131 ~]# docker export 159a08c11fec > centos_test.tar.gz
[root@rsync131 ~]# ll
總用量 273536
-rw-------. 1 root root      1513 8月  20 20:25 anaconda-ks.cfg
-rw-------  1 root root 280093696 9月  23 11:51 centos_test.tar.gz

5.2. 導入容器

  使用命令docker import 導入變成鏡像

語法格式:
docker import [-c|--change[=[]]] [-m|--messge[=MESSAGE]] file|URL|- [REPOSITORY[:TAG]]

用戶可以通過-c 選項在導入的同時執行對容器進行修改的Dockerfile指令
[root@rsync131 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@rsync131 ~]# ll
總用量 273536
-rw-------. 1 root root      1513 8月  20 20:25 anaconda-ks.cfg
-rw-r--r--  1 root root 280093696 9月  23 11:52 centos_test.tar.gz
[root@rsync131 ~]# docker import centos_test.tar.gz centos:1.0
sha256:f54ee7febeda5d3d8af11cc4756c1e6661feb84b2af6280654ef07ddf8bdead2
[root@rsync131 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              1.0                 f54ee7febeda        5 seconds ago       271 MB
docker.io/centos    latest              5182e96772bf        6 weeks ago         200 MB

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM