天天看點

《第一本Docker》筆記(三)之Docker入門

三、Docker入門(以下運作環境是Cetos6.364bit系統上進行)

   1. 建立容器

      -i 标志保證容器中STDIN是開啟的,盡管我們并沒有附着到容器中,-t 标志告訴Docker為要建立的容器配置設定一個僞tty終端。

     附錄:在執行這條指令的時候遇到以下問題:

      FATA[0000] Gethttp:///var/run/docker.sock/v1.17/images/search?term=ubuntu: dial unix/var/run/docker.sock: no such file or directory. Are you trying to connect to aTLS-enabled daemon without TLS?

原因:docker服務沒有啟動:servicedocker start  設定開機啟動:chkconfigdocker on

 FATA[0000] Cannot connect tothe Docker daemon. Is 'docker -d' running on this host?

原因:docker -d 程序沒有啟動 

嘗試解決: docker-d &

報錯:

  ====================================================================

   INFO[0000] +jobserveapi(unix:///var/run/docker.sock)  

   INFO[0000] WARNING: You arerunning linux kernel version 2.6.32-431.11.7.el6.ucloud.x86_64, which might beunstable running docker. Please upgrade your kernel to 3.8.0.

   docker: relocation error:docker: symbol dm_task_get_info_with_deferred_remove, version Base not definedin file libdevmapper.so.1.02 with link time reference

   [1]+  Exit 127                docker -d

   解決辦法:安裝必要的插件yumupgrade device-mapper-libs

   執行指令:docker -d&

  繼續執行# dockerrun -I -t ubuntu /bin/bash 它的含義是建立一個基于ubuntu鏡像的容器,并且使用互動式shell環境。docker run指令先進行本地宿機鏡像掃描,如果找不到則會與Docker倉庫建立連接配接并進行相應鏡像的下載下傳

2. 常用指令:

  檢視鏡像

  # docker search ubuntu   #搜尋鏡像

  # docker pull ubuntu  #下載下傳鏡像

  # docker images  #檢視本地鏡像資源

  # docker images -a :列出所有的images(包含曆史)

  # docker images --tree :顯示鏡像的所有層(layer)

  # docker rmi  <image ID>: 删除一個或多個image

  檢視容器

  # docker ps :列出目前所有正在運作的container

  # docker ps -l :列出最近一次啟動的container

  # docker ps -a :列出所有的container(包含曆史,即運作過的container)

  # docker ps -q :列出最近一次運作的containerID

  針對容器的操作:

  # docker start/stop/restart<container> :開啟/停止/重新開機container

  # docker start[container_id] :再次運作某個container (包括曆史container)

  # docker attach[container_id] :連接配接一個正在運作的container執行個體(即執行個體必須為start狀态,可以多個視窗同時attach 一個container執行個體)其實就是進入容器

  # docker start -i<container> :啟動一個container并進入互動模式(相當于先start,在attach)

  # docker run -i -t<image> /bin/bash :使用image建立container并進入互動模式, login shell是/bin/bash

  # docker run -i -t -p<host_port:contain_port> :映射 HOST 端口到容器,友善外部通路容器内服務,host_port 可以省略,省略表示把 container_port 映射到一個動态端口。

    注:使用start是啟動已經建立過得container,使用run則通過image開啟一個新的container。

删除容器

# docker rm <container...> :删除一個或多個container

 # docker rm `docker ps -a -q`:删除所有的container

 # docker ps -a -q | xargsdocker rm :同上, 删除所有的container

 3. 容器在建立的時候進行自定義指令操作:

# docker run --name 自定義名稱 -I -t <images>/bin/bash

其中,自定義名稱包含以下字元:小寫字母a-z、大寫字母A-Z、數字0-9、下劃線、圓點、橫線。容器的命名必須是唯一的

 4.重新進入重新開機

     # dockerattach 容器名稱 

  如果推出容器的shell,容器也會随之停止運作

5.建立守護式容器

# docker run --name <name> -dubuntu /bin/sh -c “while true;do echo hello world;sleep 1;done”

建立一個守護式容器(使用-d參數使容器背景運作)執行某個指令(-c)

   使用nginx官方image進行實驗:

   # docker pull nginx

   生成一個測試頁面,存放在某個目錄中(例如/opt/nginx/)

   建立基于nginx鏡像的容器,并且使用-v使容器中預設檔案指定到宿機上自定義的網站目錄,端口映射:宿機的8000 à容器的80端口  -d參數使容器背景運作

   # docker run --name nginx1.9.0 -v/opt/nginx/:/usr/share/nginx/html:ro -p 8000:80 -d nginx:1.9.0

   将docker容器中的檔案複制到宿機中(但反之不能)

   # docker cp nginx1.9.0:/etc/nginx/nginx.conf/opt/nginx/

 6.檢視容器内部的日志、程序

   # docker logs nginx1.9.0

   # docker logs -f nginx1.9.0  à相當于tail -f

   # docker logs --tail 10 nginx1.9.0 檢視最後10行内容

   # docker logs --tail 0 nginx1.9.0 檢視最新的日志資訊

   # docker top nginx1.9.0

 7. 在容器中運作指定的程序

  # docker exec -d nginx1.9.0 touch/opt/nginx/test.txt 在容器内部建立一個空檔案

  # docker exec -t -i nginx1.9.0 /bin/bash  在容器中啟動一個互動式shell任務

 8. 停止守護式容器

  # docker stop nginx1.9.0(或者容器的ID)

 9. 設定容器進行自動啟動運作,防止某些錯誤導緻容器停止影響業務

  # docker run --restart=always --namenginx1.9.0 -d nginx:1.9.0 /bin/bash -c XX

   --restart标志可以設定為

       always:無論容器的退出代碼是什麼,Docker都會自動重新開機該容器

       on-failure:隻有當容器的退出代碼為非0時才會自動重新開機

  # docker run --restart=on-failure:5--name  nginx1.9.0 -d nginx:1.9.0 /bin/bash-c XX

   容器退出代碼為非0時,Docker會自動重新開機5次該容器

 10. 深入了解容器的資訊

  # docker inspect nginx1.9.0

  可以檢視關于容器的一些詳細資訊,包括開放端口,安裝路徑,配置檔案,系統配置等

  # docker inspect --format '` `.`State`.`Running`' nginx1.9.0

true

   檢視容器的運作狀态

  # docker inspect --format '``.`NetworkSettings`.`IPAddress `' nginx1.9.0

   檢視容器的IP位址

  # docker inspect -f '` `.`Name ` ``.`State`.`Running `' nginx1.9.0 ubuntu14.04

   /nginx1.9.0 true

/ubuntu14.04 true

檢視多個容器的名稱和運作情況

11. 删除所有的容器

  # docker rm `docker ps -a -q`

本文轉自 南非波波 51CTO部落格,原文連結:http://blog.51cto.com/nanfeibobo/1643570,如需轉載請自行聯系原作者