Docker 指令碼化一鍵部署

梅芬發表於2019-05-06

Docker

  • install Docker

參照官網

  • install kubernetes

安裝kubernetes的時候,需要安裝kubelet, kubeadm等包,但k8s官網給的yum源是packages.cloud.google.com,國內訪問不了,此時我們可以使用阿里雲的yum倉庫映象。

阿里雲上沒有附Help說明連線,簡單摸索了下,如下設定可用(centos)。注意不要開啟check。

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
複製程式碼

開發思路

1 尋找基礎映象
2 基於基礎映象編寫Dockerfile指令碼
3 根據Dockerfile指令碼建立專案映象
4 將建立的映象推送到docker倉庫 (根據自身需要,可做可不做)
5 基於專案映象建立並執行docker容器 (實現最終部署)
複製程式碼

思路:使用 centos 容器安裝對應的軟體環境,最後將環境匯出。

操作步驟

  1. 建立容器
$ docker pull centos    
$ sudo docker run --privileged --cap-add SYS_ADMIN -e container=docker -it --name my_centos -p 80:8080  -d  --restart=always centos:7 /usr/sbin/init 
複製程式碼
  1. 啟動容器
$ docker exec -it my_centos /bin/bash
複製程式碼
  1. 匯出和匯入
$ docker export my_centos > /data/app/meifen/my_centos-export-0428.tar

$ docker import  /data/app/meifen/my_centos-export-0428.tar

複製程式碼
  1. 儲存save

格式:docker save IMAGE(映象)

使用 docker images 檢視本機已有的映象(也可以使用 docker commit 命令把一個正在執行的容器儲存為映象)

$ docker save 9610cfc68e8d > /data/app/meifen/my_centos-export-0428.tar
複製程式碼
  • 載入 load 有點慢,稍微等待一下,沒有任何warn資訊就表示儲存OK。9610cfc68e8d 是映象ID

現在就可以在任何裝 docker 的地方載入 剛儲存的映象了

$ docker load < /home/my_centos-export-0428.tar
複製程式碼

其他說明 映象和容器 匯出和匯入的區別

1 容器匯入 是將當前容器變成一個新的映象 2 映象匯入 是複製的過程

save 和 export區別

1 save 儲存映象所有的資訊-包含歷史 2 export 只匯出當前的資訊

export匯出的映象檔案大小 小於 save儲存的映象。export 匯出(import匯入)是根據容器拿到的映象,再匯入時會丟失映象所有的歷史,所以無法進行回滾操作(docker tag Docker 指令碼化一鍵部署);而save儲存(load載入)的映象,沒有丟失映象的歷史,可以回滾到之前的層(layer)。(檢視方式:docker images --tree) 。export 只匯出當前的資訊

提交Docker-hub

  1. 提交映象
$ docker commit -a "cristic" -m "commit content"  801a40ffa673  cristicmei/name:v1.0.0
複製程式碼
  1. 檢視映象
$ docker images
複製程式碼
  1. 登入docker-hub
$ docker image
複製程式碼

前提是使用者有docker-hub的賬號

  1. 提交遠端倉庫
$ docker push cristicmei/name:v1.0.0
複製程式碼

精簡Docker映象大小的必要性

Docker映象由很多映象層(Layers)組成(最多127層),映象層依賴於一系列的底層技術,比如檔案系統(filesystems)、寫時複製(copy-on-write)、聯合掛載(union mounts)等技術,可以檢視Docker社群文件以瞭解更多有關Docker儲存驅動的內容,這裡不再贅述。總的來說,Dockerfile中的每條指令都會建立一個映象層,繼而會增加整體映象的尺寸。

下面是精簡Docker映象尺寸的好處:

減少構建時間
減少磁碟使用量
減少下載時間
因為包含檔案少,攻擊面減小,提高了安全性
提高部署速度
複製程式碼
  • 最重要的因素是減少映象的層數,這樣能大大減小映象的大小;

使用鏈式程式碼“&&”把多行指令結合成一行

  • 清除 yum 快取
$ yum clean headers
$ yum clean packages
$ yum clean all
複製程式碼
  • 清除無用的tar.gz安裝包
  • 選擇更小的基礎映象

ISSUE

/var/lib/docker/overlay2 佔用很大,清理Docker佔用的磁碟空間,遷移 /var/lib/docker 目錄

1.命令檢視磁碟使用情況

$ du -hs /var/lib/docker/ 
複製程式碼

用於檢視Docker的磁碟使用情況

$ docker system df

複製程式碼
  1. 清理磁碟
$ docker system prune 
複製程式碼

可以用於清理磁碟,刪除關閉的容器、無用的資料卷和網路,以及dangling映象(即無tag的映象)。

$ docker system prune -a
複製程式碼
  1. 遷移 /var/lib/docker 目錄

相關文章