1. 程式人生 > >[雲端計算] docker 手冊2

[雲端計算] 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 也可以是上下文中的檔名或者目錄名 以