三、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,如需轉載請自行聯系原作者