1. 程式人生 > >docker學習(一)

docker學習(一)

docker如何工作及安裝

工作原理

  • 三個元件
    • Docker Client :使用者介面,它支援使用者與Docker Daemon之間通訊。
    • Docker Daemon:運行於主機上,處理服務請求。
    • Docker Index:中央registry,支援擁有公有與私有訪問許可權的Docker容器映象的備份。
  • 三個基本要素
    • Docker Containers:負責應用程式的執行,包括作業系統、使用者新增的檔案以及元資料。
    • Docker Images:一個只讀模板,用來執行Docker容器。
    • DockerFile:檔案指令集,用來說明如何自動建立Docker映象。
  • 執行程式的兩個基本步驟

1. 構建一個映象     

Docker Image是一個構建容器的只讀模板,它包含了容器啟動所需的所有資訊,包括執行程式和配置資料。每個映象都源於一個基本的映象,然後根據Dockerfile中的指令建立模板。對於每個指令,在映象上建立一個新的層面。  、一旦映象建立完成,就可以將它們推送到中央registry:Docker Index,以供他人使用。然而,Docker Index為映象提供了兩個級別的訪問許可權:公有訪問和私有訪問。你可以將映象儲存在私有倉庫,Docker官網有私有倉庫的套餐可以供你選擇。總之,公有倉庫是可搜尋和可重複使用的,而私有倉庫只能給那些擁有訪問許可權的成員使用。Docker Client

可用於Docker Index內的映象搜尋。

2. 執行容器

執行容器源於我們在第一步中建立的映象。當容器被啟動後,一個讀寫層會被新增到映象的頂層。當分配到合適的網路和IP地址後,需要的應用程式就可以在容器中運行了。

安裝過程

...

docker命令

1. 檢查Docker的安裝是否正確

docker info 

   若沒有這條命令,安裝錯誤 

2. 建立image????

sudo docker pull busybox

 BusyBox是一個最小的Linux系統,它提供了該系統的主要功能,不包含一些與GNU相關的功能和選項。

3. 建立一個“Hello Docker”的例子

docker run busybox /bin/echo Hello Docker

4. 以後臺程序的方式執行hello docker

sample_job=$(docker run -d busybox /bin/sh -c "while true; do echo Docker; sleep 1; done")

5. 執行docker logs 命令檢視job的當前狀態

docker logs $sample_job

6. 檢視docker的所有命令

docker help

7. 停止名為“sample_job”的容器

docker stop $sample_job

8. 重啟名為“sample_job”的容器

docker restart $sample_job

9. 移除容器,需要先stop,再rm

docker stop $sample_job
docker rm $sample_job

10. 將容器的狀態儲存為映象

docker commit $sample_job job1

 映象名稱只能取字元[a-z]和數字[0-9]

11. 檢視本機映象列表

docker images

12. 查詢在registry中的映象

docker search (image-name)

13. 檢視映象的歷史版本

docker history (image_name)

14. 將映象推送到registry

docker push (image_name)

儲存庫不是根儲存庫,它應該使用此格式(user)/(repo_name)????啥意思?

15. 檢視容器資訊

docker ps
docker ps -a

正在執行的容器,和全部容器

Dockerfile

Docker為我們提供了Dockerfile來解決自動化的問題。

易於自動化的命令

Dockerfile包含建立映象所需要的全部指令。基於在Dockerfile中的指令,我們可以使用Docker build命令來建立映象。通過減少映象和容器的建立過程來簡化部署。

 Dockerfile支援支援的語法命令如下:

INSTRUCTION argument

指令不區分大小寫。但,命名約定全部大寫。

所有Dockerfile都必須以FROM命令開始。 FROM命令會指定映象基於哪個基礎映象建立,接下來的命令也會基於這個基礎映象(譯者注:CentOS和Ubuntu有些命令可是不一樣的)。FROM命令可以多次使用,表示會建立多個映象。具體語法如下:

FROM <image name>
eg: FROM ubuntu    # 新的映象將基於Ubuntu的映象來構建

Dockerfile命令 

1.  MAINTAINER:設定該映象的作者。

MAINTAINER <author name>

2. RUN:在shell或者exec的環境下執行的命令。

RUN指令會在新建立的映象上新增新的層面,接下來提交的結果用在Dockerfile的下一條指令中。語法如下:

RUN 《command》

3. ADD:複製檔案指令。它有兩個引數<source>和<destination>。destination是容器內的路徑。source可以是URL或者是啟動配置上下文中的一個檔案。語法如下:

ADD 《src》 《destination》

4. CMD:提供了容器預設的執行命令。 Dockerfile只允許使用一次CMD指令。 使用多個CMD會抵消之前所有的指令,只有最後一個指令生效。 CMD有三種形式:

CMD ["executable","param1","param2"]
CMD ["param1","param2"]
CMD command param1 param2

5. EXPOSE:指定容器在執行時監聽的埠。語法如下:

EXPOSE <port>;

6. ENTRYPOINT:配置給容器一個可執行的命令,這意味著在每次使用映象建立容器時一個特定的應用程式可以被設定為預設程式。同時也意味著該映象每次被呼叫時僅能執行指定的應用。類似於CMD,Docker只允許一個ENTRYPOINT,多個ENTRYPOINT會抵消之前所有的指令,只執行最後的ENTRYPOINT指令。語法如下:

ENTRYPOINT ["executable", "param1","param2"]
ENTRYPOINT command param1 param2

7. WORKDIR:指定RUNCMDENTRYPOINT命令的工作目錄。語法如下:

WORKDIR /path/to/workdir

8. ENV:設定環境變數。它們使用鍵值對,增加執行程式的靈活性。語法如下:

ENV <key> <value>

9. USER:映象正在執行時設定一個UID。語法如下:

USER <uid>

10. VOLUME:授權訪問從容器內到主機上的目錄。語法如下:

VOLUME ["/data"]