導讀:本文系統性介紹Docker安裝、Docker元件、Docker命令、Dockerfile語法和Docker應用,通過上述介紹使我們已經對docker基本操作有一定了解。

一、前言

  本文將系統性的介紹Docker相關的知識;包含Docker命令,Dockerfile語法,如何用Docker進行構建執行。

二、Docker安裝

  本文以centos7及以上版本為例來說明Docker安裝;Docker底層對應的是映象,不可寫的檔案系統,它的儲存方式比較多。

  • AUFS:(AnotherUnionFS)是一種Union FS,是檔案級的儲存驅動

  • Overlay:是一種Union FS,和AUFS的多層不同的是Overlay只有兩層:一個upper檔案系統和一個lower檔案系統,分別代表Docker的映象層和容器層

  • Device mapper:是Linux核心2.6.9後支援的,提供的一種從邏輯裝置到物理裝置的對映框架機制,在該機制下,使用者可以很方便的根據自己的需要制定實現儲存資源的管理策略

  • Btrfs:被稱為下一代寫時複製檔案系統,併入Linux核心,也是檔案級級儲存,但可以像Device mapper一直接操作底層裝置

  •   ZFS:檔案系統是一個革命性的全新的檔案系統,它從根本上改變了檔案系統的管理方式,ZFS 完全拋棄了“卷管理”,不再建立虛擬的卷,而是把所有裝置集中到一個儲存池中來進行管理,用“儲存池”的概念來管理物理儲存空間

  •   Overlay2:要取代之前overlay的主要原因是它能“支援多個下層目錄”,能解決原先驅動中inode耗盡的問題

本文將以Overlay2進行示例:

1.升級核心CentOS7.0以上?

2.安裝映象倉庫

  1)清理舊版本

  rpm -qa |grep docker

  yum  -y  remove docker*

  2)安裝映象倉庫

  yum install  docker-distribution

  修改配置檔案

  vim/etc/docker-distribution/registry/config.yml

  重啟映象倉庫

  systemctl daemon-reload

  service  docker-distribution restart

  service  docker-distribution status

  訪問映象倉庫服務:http://x.x.x.x:5000

  3)安裝Docker

  

  4)配置Docker儲存

  5)啟動docker

  systemctl start docker

  檢視docker資訊

  docker info

三、Docker元件

  Docker基礎元件

  • dockerd: Dockerdaemon程序,訪問總入口

  • docker: Docker 客戶端

  • docker-containerd:一個控制runC的守護程序,containerd利用runC的高階功能(如seccomp和使用者名稱稱空間支援)以及用於容器克隆和實時遷移的檢查點和恢復

  • docker-containerd-ctr:docker-containerd客戶端,基於gPRC APIs通訊

  • docker-containerd-shim:一個位於執行時實現前面的小墊片,它允許它重新分配來初始化並處理來自呼叫者的重新附加。

  • docker-runc:根據OCI規範產生和執行容器的CLI工具。

四、Docker命令

  1.建立一個容器:docker run

  2.檢視容器列表:docker ps

  3.檢視所有容器:docker ps -a

4.啟動、停止、重啟容器: docker start|stop|restart  容器ID|容器名

  5.檢視容器日誌:docker logs –f容器ID|容器名

  6.刪除某個容器:docker rm –f容器ID|容器名

  7.刪除所有容器:docker rm $(docker ps -a -q)

  8.檢視容器執行狀態:docker stats容器ID|容器名

  9.進入另一個容器:docker exec–ti 容器ID|容器名

  10.進入容器觀察執行情況: docker attach容器ID|容器名

  11.檢視容器詳細資訊 docker inspect容器ID|容器名

  12.檢視當前機器上映象 docker images

  13.拉取映象 docker pull 映象名

  14.將映象推送映象倉庫 docker push 映象名

  15.構建映象 docker build

  16.將映象倒出成檔案 docker save映象 > xxx.tar.gz

  17.將檔案載入成映象 docker load < xxx.tar.gz

  18.從容器內複製檔案到指定的路徑上 docker cp container:path hostpath

  19.登入到Docker registry伺服器 docker login

  20.殺掉容器 docker kill 容器ID|容器名

  21.移除映象 docker rmi

五、Dockerfile介紹

  Dockerfile是由一些列命令和引數構成的指令碼,這些命令應用於基礎映象並最終建立一個新的映象

  常見命令

  1.FROM ——基礎映象來源

  2.MAINTAINER——維護者是誰

  3.RUN——當前基礎映象執行,並且提交新映象

  4.ADD——複製內容到容器中;普通檔案,壓縮檔案,url

  5.COPY——本地內容複製到容器中,只能是普通檔案及資料夾

  6.EXPOSE——告訴Docker服務端容器暴露的埠號,類似docker -p

  7.CMD——容器執行命令,每個容器只能執行最後一條命令

  8.ENTRYPOINT——容器啟動後執行的命令,並且不可被 docker run 提供的引數覆蓋

  9.ENV——環境變數

  10.VOLUME——容器需要的掛載卷

  11.WORKDIR——後續的 RUN 、 CMD 、 ENTRYPOINT 指令配置工作目錄

  12.ONBUILD——配置當所建立的映象作為其它新建立映象的基礎映象時,所執行的操作指令

  13.USER——指定執行容器時的使用者名稱或UID,後續的 RUN 也會使用指定使用者

六、Docker應用

  本示例將以平臺kubernetes叢集日誌採集fluentd容器來說明docker是如何使用的

  1.編寫fluentd Dockerfile

  FROM debian:stretch-slim

  MAINTAINER [email protected]

  # copy local file to container

  COPY clean-apt /usr/bin

  COPY clean-install /usr/bin

  COPY Gemfile /Gemfile

  #proxy setting, Over the wall

  ENV http_proxy=http://10.3.15.206:8888

  ENV https_proxy=http://10.3.15.206:8888

  # 1. Install & configure dependencies.

  # 2. Install fluentd via ruby.

  # 3. Remove build dependencies.

  # 4. Cleanup leftover caches & files.

  RUN BUILD_DEPS=“make patch gcc g++ libc6-dev ruby-dev” \

 

  # Expose prometheus metrics.

  EXPOSE 80

  ENV LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.1

  # Start Fluentd to pick up our config that watches Docker container logs.

  CMD /run.sh $FLUENTD_ARGS

  2.構建映象

  docker build –t10.3.15.191:5000/tools/fluentd-http:0.3 .

  3.執行映象

  宿主機上的/var/log目錄對映容器中進行日誌採集

  4.檢視容器

  5.進入容器

  6.停止容器

  7.檢視容器

  8.容器日誌

  9.執行狀態

  本次docker介紹到這裡,還有很多知識沒有涉及到,比如說docker網路、docker映象匯入匯出等,整個docker知識還是比較廣泛的,需要詳細去了解和實踐。