Docker入門(2)-對容器的操做

  • Docker系列參考自書籍<Docker技術入門與實戰>,本博客以筆記爲主. 若是轉載請註明出處,謝謝各位大哥了. -博客園:玲瓏骰子安紅豆

   

   

  • 容器是Docker的另外一個核心概念
  • 簡單地來講,容器是鏡像的一個運行實例,所不一樣的是,它帶有額外的可寫文件層.
  • 若是認爲虛擬機是模擬運行的一套操做系統(提供了運行態環境和其餘系統環境)和跑在上面的應用.
  • 那麼Docker就是獨立運行的一個或一組應用,以及他們的必需運行環境.
  • 本章將具體介紹圍繞容器的重要操做,包括建立一個容器,啓動容器,終止容器,進入容器內執行操做,刪除容器,和導入導出容器.

   

  • 1.建立容器
    • D ocker的容器十分輕量級,用戶能夠隨時建立或刪除容器

         

    • 新建容器
      • 可使用docker create命令新建一個容器,例如:
        • [root@Ninemax-LPC3 docker]# docker create -it centos:7.3
        • 5ebc7cd50bd6ed02aac3ed63001057272360e7d05a229f01723b7734c86d05e7
        •  
        • [root@Ninemax-LPC3 docker]# docker ps -a
        • CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
        • 5ebc7cd50bd6 centos:7.3 "/bin/bash" 5 minutes ago cranky_bohr

             

      • 可使用 docker start命令啓動你建立的這個容器
        • [root@Ninemax-LPC3 docker]# docker start 5ebc7cd50bd6(或者使用容器名稱)
        • 5ebc7cd50bd6
      • 能夠看到啓動以後,輸出了一個CONTAINER ID 給咱們

   

   

   

  • 新建並啓動容器
    • 啓動容器有兩種方式,一種是基於鏡像新建一個容器並啓動,另一個是將在終止狀態(stopped)的容器從新啓動.所須要的命令主要爲docker run,其等價於先執行docker create 命令,再執行docker start命令!

   

  • 例如, 下面的命令輸出一個" hello,word",以後容器自動終止:
    • [root@Ninemax-LPC3 docker]# docker run centos:7.3 echo 'hello'
    • hello
  • 這跟在本地執行 echo 'hello'幾乎感受不出來任何區別.
  • 當利用docker run來建立並啓動容器時,Docker在後臺運行的標準操做包括:
    • 檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載
    • 利用鏡像建立並啓動一個容器
    • 分配一個文件系統,並在只讀的鏡像層外面掛載一層可讀寫層
    • 從宿主機配置的網橋接口中橋接一個虛擬接口到容器中去.
    • 從地址池配置一個IP地址給容器.
    • 執行用戶指定的應用程序.
    • 執行完畢後容器被終止

   

  • 下面的命令則啓動一個bash終端,容許用戶進行交互:
    • [root@Ninemax-LPC3 docker]# docker run -t -i centos:7.3 /bin/bash
    • [root@311998edb3c0 /]#
  • 其中,-t選項讓Docker分配一個僞終端,-i則讓容器的標準輸出保持打開.

   

  • 在交互模式下,用戶能夠經過所建立的終端來輸入命令,例如
    • [root@311998edb3c0 /]# pwd
    • /
    • [root@311998edb3c0 /]# ls
    • anaconda-post.log bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
    • [root@311998edb3c0 /]# ps
    • PID TTY TIME CMD
    • 1 ? 00:00:00 bash
    • 15 ? 00:00:00 ps
    • [root@311998edb3c0 /]#
    •  
  • 在容器內用ps查看進程,能夠看到,只運行了bash應用,並無運行其餘不須要的進程.而且能夠經過輸入exit命令或者Ctrl+d退出容器
    • [root@311998edb3c0 /]# exit
    • [root@Ninemax-LPC3 docker]#

   

  • 對於所建立的bash容器,當使用exit命令退出以後,該容器就自動處於終止狀態!這是由於對於Docker容器來講,當運行的應用(此例子中的bash)退出後,容器也沒有繼續運行的必要. 了!

       

  • 守護態運行
    • 更多的時候,須要讓Docker容器在後臺以守護態(Daemonized)形式運行.能夠經過在 run的時候 添加-d參數來實現
    • 例以下面的命令會在後臺運行容器:
      • [root@Ninemax-LPC3 docker]# docker run -d centos:7.3 sh -c "while true; do echo helloword; sleep 1; done"
      • 4a811d332c1ec0b614151fbfe579029105503f19a0b2feb9267f9cf1e2374738
      • [root@Ninemax-LPC3 docker]# docker ps
      • CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
      • 4a811d332c1e centos:7.3 "sh -c 'while true; 2 seconds ago Up 1 seconds thirsty_euclid
    • 要獲取容器的輸出信息, 能夠經過docker logs命令:
      • [root@Ninemax-LPC3 docker]# docker logs 4a811d332c1e
      • helloword
      • helloword
      • ...

       

       

  • 2.終止容器
    • 可使用docker stop 來終止一個運行中的容器,命令的格式爲docker stop [-t|--time=10] CONTAINER ID(或者容器NAME) .這段命令首先向容器發送SIGTERM信號,等一段時間後(默認10S),再發送SIGKILL信號,終止容器.
  •    
    • 此外, D ocker容器中指定的應用終結時,容器也會自動終止.例外如對上一節中只啓動了一個終端容器,當用戶經過exit命令或者ctrl+d來退出容器時,所建立的容器馬上終止!

         

    • 下面是使用docker stop命令來終止一個運行中的容器:
      • [root@Ninemax-LPC3 docker]# docker ps
      • CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
      • 4a811d332c1e centos:7.3 "sh -c 'while true; 4 hours ago Up 23 seconds thirsty_euclid
      • [root@Ninemax-LPC3 docker]# docker stop 4a811d332c1e
      • 4a811d332c1e
      • [root@Ninemax-LPC3 docker]#

           

       

  • 3.進入容器
    • 當容器在後臺與形式, 若是你想再次進入容器內, 有不少方法, 包括使用 docker attach命令,docker exec命令,以及nsenter工具!

         

    • docker attach命令:
      • [root@Ninemax-LPC3 ~]# docker images
      • REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
      • centos 7.3 4beff0251382 10 weeks ago 192.5 MB
      • [root@Ninemax-LPC3 ~]# docker run -idt centos:7.3
      • 97ac4187a9e6a342b9b7fa4979d87457e750d2e524f6d4a0ad72072ec21c4c63
      • [root@Ninemax-LPC3 ~]# docker ps
      • CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
      • 97ac4187a9e6 centos:7.3 "/bin/bash" 21 seconds ago Up 20 seconds modest_ptolemy
      • [root@Ninemax-LPC3 ~]# docker attach 97ac4187a9e6
      • [root@97ac4187a9e6 /]#

           

    • docker exec命令:
      • [root@Ninemax-LPC3 ~]# docker exec -t -i 97ac4187a9e6 /bin/bash
      • [root@97ac4187a9e6 /]#

           

    • nsenter工具: (暫時不作闡述,等我用到的時候再寫,挺麻煩的)

         

  • 4.刪除容器
    • 可使用 docker rm 命令刪除處於終止狀態的容器
      • 格式: docker rm [OPTIONS] CONTAINER [CONTAINER...]

   

  • 刪除一個或者多個容器
  • 參數:
  • -f, --force=false 強行終止一個運行中的容器 (uses SIGKILL)
  • --help=false Print usage
  • -l, --link=false 刪除容器的鏈接,可是保留容器
  • -v, --volumes=false 刪除容器掛載的數據卷.

   

  • 例如,刪除一個處於終止狀態的容器:

   

  • [root@Ninemax-LPC3 ~]# docker ps -a
  • CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  • 97ac4187a9e6 centos:7.3 "/bin/bash" 16 minutes ago Exited (137) 15 seconds ago modest_ptolemy
  • [root@Ninemax-LPC3 ~]# docker rm 97ac4187a9e6
  • 97ac4187a9e6
  • [root@Ninemax-LPC3 ~]#

       

  • 強制刪除一個正在運行的容器:
    • [root@Ninemax-LPC3 ~]# docker ps
    • CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    • 2b4652c3777b centos:7.3 "/bin/bash" 20 seconds ago Up 19 seconds condescending_jang
    • [root@Ninemax-LPC3 ~]# docker rm -f 2b4652c3777b
    • 2b4652c3777b
    • [root@Ninemax-LPC3 ~]# docker ps -a
    • CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    • [root@Ninemax-LPC3 ~]#

         

         

  • 5.導入和導出容器

       

    • 導出容器
      • 導出容器是指導出一個已經建立的容器到一個文件,無論此時這個容器是否處於運行狀態,可使用docker export命令
      • 該命令格式爲:
        • [root@Ninemax-LPC3 ~]# docker export --help

   

  • 命令格式: docker export [OPTIONS] CONTAINER

   

  • 導出一個容器到文件系統

   

  • --help=false Print usage
  • -o, --output= 你能夠用此參數指定一個路徑和文件名,單指定文件名則導出到當前目錄

   

  • 導出一個已存在的容器:
    • [root@Ninemax-LPC3 ~]# docker ps -a
    • CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    • e65720ef8e82 centos:7.3 "/bin/bash" About a minute ago Up About a minute reverent_bartik
    • [root@Ninemax-LPC3 docker]# docker export -o centos.tar e65720ef8e82
    • [root@Ninemax-LPC3 docker]# ll
    • 總用量 605780
    • -rw-r--r--. 1 root root 200183808 7 21 22:47 centos.tar
    • -rw-r--r--. 1 root root 712836 7 17 19:05 setuptools-36.2.0.zip
    • 固然了,對於docker export -o centos.tar e65720ef8e82,你也能夠寫成docker export e65720ef8e82 >centos2222.tar
    • [root@Ninemax-LPC3 docker]# docker export e65720ef8e82 > centos2222.tar
    • [root@Ninemax-LPC3 docker]# ls
    • centos2222.tar centos_7.3.tar centos.tar mongo-connector.tar pip-1.5.5 pip-1.5.5.tar.gz setuptools-36.2.0 setuptools-36.2.0.zip

   

   

  • 導入容器
    • 可使用docker import命令導入,成爲鏡像.
      • 命令:docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
      • 例如:
        • [root@izt4n97garwn1ni986vmhjz ~]# cat ss.tar |sudo docker import - ssr:test
        • sha256:eff89461842fa7e45f2518244aeab340975e38e6f40e6a85b95012e7d2274866
      • 其中 cat ss.tar | sudo docker import - ssr:test等同於 docker import - ssr:test < ss.tar
相關文章
相關標籤/搜索