[雲端計算] docker 手冊2
1 啟動已經停止的容器
[email protected]:~$ sudo docker start bob_the_container
也可以用容器ID 來指定容器 也可以用restart 來重啟容器
( docker create 命令建立一個容器 但是卻不執行它)
2 附著到容器中
sudo docker attach bob_the_container
也可以使用容器Id
如果退出容器的shell 則 容器會再次停止執行
3 建立長期執行的容器
[email protected]:~$ sudo docker run –name daemon_dave -d ubuntu /bin/sh -c “while true;do echo hello word;sleep 1 ;done”
-d 則會在後臺執行容器
運行了一個指令碼 會一直不停的輸出hello world
4 抓取容器的日誌
[email protected]:~$ sudo docker logs [-f] daemon_dave
-f 會監控日誌
–tail 10 會獲取最後十條的資訊
-t 會為每條日誌加上時間戳
5 日誌驅動
sudo docker run –log-driver=”syslog” –name daemon_dwayne -d ubuntu /bin/sh -c “while true;do echo hello word; sleep 1; done”
將日誌輸入到Syslog中 導致了docker logs 命令不能輸出任何東西
Syslog 的資訊去 /var/log/messages 檔案中檢視
最後一個可用的選項是none 將會禁用所有容器中的日誌
6 檢視容器內的程序
[email protected]:~$ sudo docker top daemon_dave
7 Docker 中的統計資訊
[email protected]:~$ sudo docker stats daemon_dave daemon_dwayne
檢視容器列表 CPU 記憶體 網路I/O 以及儲存I/O的效能和指標
8 在容器內部執行程序
[email protected]:~$ sudo docker exec -d daemon_dave touch /etc/new_config_file
-d說明是一個後臺程序
-u可以為新啟用的程序指定一個使用者屬主
[email protected]:~$ sudo docker exec -t -i daemon_dave /bin/bash
-t -i 建立一個tty並捕捉STDIN
會在daemon_dave 容器內部建立一個bash 會話
9 停止守護式容器
[email protected]:~$ sudo docker stop daemon_dave
向容器傳送SIGTERM 訊號 如果想快速的停止容器 則用docker kill 命令向容器傳送SIGKILL 訊號
[email protected]:~$ sudo docker ps -n 3
檢視最後x個容器不論這些容器是執行還是停止
10 自動重啟容器
[email protected]:~$ sudo docker run –restart=always –name daemon_dave1 -d ubuntu /bin/sh -c “while true;do echo hello word ;sleep 1 ;done”
always 則是無論容器的退出程式碼是什麼,docker都會自動的重啟該容器
on-failure 只要容器的退出程式碼非0 則自動重啟 另外 還可以接受可選的重啟次數引數 on-failure:5
11 獲得更多的容器資訊
[email protected]:~$ sudo docker inspect daemon_dave
可以使用–format 的標誌來檢視選定的結果
[email protected]:~$ sudo docker inspect –format=’{{.State.Running}}’ daemon_dave
這個標誌支援完整的Go語言模組
所有容器都放在/var/lib/docker/containers中
12 刪除容器
[email protected]:~$ sudo docker rm -f daemon_dave1
-f 刪除正在執行的容器
[email protected]:~$ sudo docker sudo docker ps -a -q
-a 是返回所有的容器 -q是隻返回容器的ID而不會返回其他資訊
13 檢視映象
[email protected]:~$ sudo docker images
本地映象都儲存在宿主的/var/lib/docker中的根據所採用的儲存驅動儲存在不同的目錄下面
14 拉取映象
[email protected]:/var/lib/docker$ sudo docker pull ubuntu:14.04
[email protected]:~$ sudo docker run -t -i –name new_container ubuntu:14.04 /bin/bash
如果沒有指定具體的映象標籤,則會自動下載latest標籤的映象,
15 查詢映象
[email protected]:~$ sudo docker search puppet
倉庫名 映象描述 使用者評價 (star) 是否是官方(Official) 自動構建 表示這個是由Docker Hub 自動構建的
1 使用Dockerfile
建立一個示例倉庫
mkdir static_web
cd static_web
touch Dockerfile
建立一個Dockerfile檔案
FROM ubuntu:14.04
MAINTAINER James Turnbull “[email protected]”
RUN apt-get update && apt-get install -y nginx
RUN echo ‘hi i am in your container’ \ > /usr/share/nginx/index.html
EXPOSE 80
-FROM 是一個已經存在的映象 也叫基礎映象
-MAINTAINER 告訴Docker這個映象的作者是誰以及聯絡方式
-RUN 在映象中執行指定命令
也可以使用exec格式的RUN指令格式 RUN ["apt-get","install","-y","nginx"]
-EXPOSE 告訴容器內的應用程式將會使用容器的制定埠,需要使用者在docker run 中指定開啟哪些埠
也可以用來幫幫助將多個容器連結,可以使用 docker run –expose 來指定對外部公開的埠
執行上下文構建
cd static_web
sudo docker build -t ="lee/static_web" .
映象名叫 lee/static_web 也可以 sudo docker build -t ="lee/static_web:v1" . v1就是標籤 如果沒有設定就會預設為laster標籤
最後的. 則是告訴Docker到本地去找Dockerfile檔案也可以指定一個Git倉庫去Dockerfile的位置
sudo docker build -t ="lee/static_web:v1" \
[email protected]:lee/docker-static_web
假設這個根目錄下有Dockerfile檔案
也可以用-f 來指定一個區別於標準Dockerfile構建源位置 這個位置的檔案不必再命名為Dockerfile但是必須要位於構建上下文中
2 忽略快取構建
sudo docker build –no-cache -t="lee/static_web" .
3 從新的映象啟動容器
sudo docker run -d -p 80 –name static_web lee/static_web nginx -g “daemon off;”
-p 將容器的80埠繫結到宿主的埠上
4 Dockerfile命令
1 CMD
用於指定一個容器啟動時要執行的命令 RUN 是映象被構建的時候 而CMD是容器啟動要執行是的命令
CMD ["/bin/bash","-l"] 將-l標誌傳送給了/bin/bash 推薦使用陣列結構中
docker run 中指定了要執行的命令,那麼會覆蓋掉CMD命令
CMD命令只會執行最後一條,多餘無效
2 ENTRYPOINT
提供的命令則不容易在啟動容器時被覆蓋 docker run中的引數會被當作引數再次傳給ENTRYPOINT中指定的命令
ENTRYPOINT["/usr/sbin/nginx","-g","daemon off;"]
如果確實需要,也可以通過–entrypoint 標誌覆蓋ENTRYPOINT指令
3 WORKDIR
在容器內部設定一個工作目錄 ENTRYPOINT 和/ 或者CMD都會在這個目錄下執行
可以設定後續一系列指定的工作目錄,也可以為最終的容器設定工作目錄
也可以在docker run 中用-w 標誌在執行中覆蓋工作目錄
4 ENV
設定環境變數 可以在後續指令中使用
ENV RVM_PATH /home/rvm/
也可以為多個環境賦值
ENV RVM_PATH=/home/rvm RVM_ARCHFLAGS="-arch i386"
也可以在其他指定中使用這些環境變數
ENV TARGET_DIR /opt/app
WORKDIR $TARGET_DIR
可以在docker run 命令中使用-e 來傳遞環境變數 這些變數只會在執行時有效
5 USER
指定映象以什麼樣的使用者去執行
USER user:group
6 VOLUME
向基於映象的建立的容器添加捲,一個卷可以存在在一個或者多個容器內的特定目錄,可以繞過聯合檔案系統,可以提供共享資料或是對資料進行持久化功能
{ 卷可以在容器中共享和重用 ;一個容器可以不是必須和其他容器共享卷 ;對卷的修改是立即生效的; 對卷的修改不會對更新映象產生影響 ;卷會一直存在直到沒有任何容器再使用它}
VOLUME ["/opt/project"] #這是為基於這個映象建立的任何一個容器建立一個名為/opt/project的掛載點
docker cp 允許從容器複製檔案和複製檔案到容器中
7 ADD
將構建環境下的檔案和目錄複製到映象中去
ADD software.lic /opt/application/software.lic
會將構建目錄下的software.lic 檔案複製到映象的/opt/application/software.lic 指向原始檔的位置引數可以是URL 也可以是上下文中的檔名或者目錄名 以