Skip to content
ssivart edited this page Mar 4, 2019 · 23 revisions

Docker Install

Mac

  1. 不要直接透過homebrew安裝,如brew install docker,這只有docker CLI,沒有實際server功能
  2. Mac OS 10.12之前的版本需要裝Toolbox,之後的版本直接安裝Docker for Mac
    • Requires Apple Mac OS Sierra 10.12 or above. Download Docker Toolbox for previous OS versions.
  3. 推薦terminal: iTerm2
  4. 推薦編輯器:vscode,有docker extension
  5. 指令auto complete工具:shell-completion

Docker Samples

Docker + Travis CI Samples

Docker compose刪不掉volume的解決方式:

若加上-v還是無法清除volume,先清理已stop的容器:

docker container prune

清理所有volumes

docker volume prune

Docker Swarm Deploy

Image

專案部署時用的檔案docker-stack.yml需要事先build好兩組映像檔: froggy-service-nginxfroggy-service-api

  • nginx
$ docker image build -t froggy-service-nginx -f nginx/Dockerfile .
  • backend api
$ docker image build -t froggy-service-api ./backend

nginx映像檔會儲存.env隱私設定值,無法公開發布到docker hub(有先開forggytaipei的組織,private repo要付費,1個月7美金),目前打算將映像檔存放在local machine,可以照docker registry(5000 port)的方式設定,讓每個node都可存取,作法是用routing mesh的方式,在manager node先把映像檔build好,然後push到127.0.0.1:5000

$ docker service create --name registry --publish 5000:5000 registry
$ docker tag froggy-service-nginx 127.0.0.1:5000/froggy-service-nginx
# docker image build -t 127.0.0.1:5000/froggy-service-nginx -f nginx/Dockerfile .
$ docker push 127.0.0.1:5000/froggy-service-nginx
$ docker tag froggy-service-api 127.0.0.1:5000/froggy-service-api
# docker image build -t 127.0.0.1:5000/froggy-service-api ./backend
$ docker push 127.0.0.1:5000/froggy-service-api

deploy

$ docker stack deploy -c docker-stack.yml froggy-service

後來終於啟用private repo,期望在stack deploy時強制pull映像檔(前提是該manager node必須login),但目前有open中的issue提到可能有問題,試著加上:

docker stack deploy -c docker-stack.yml froggy-service --with-registry-auth

issue:docker stack deploy does not pull images from private registry

NFS Volume

目前專案設定上,各個node都會需要存取repo的靜態檔案,所以設定一下nfs:

  1. 首先在其中一台manager node安裝nfs server,其他node安裝nfs client
sudo apt-get install nfs-kernel-server
sudo apt-get install nfs-common
  1. 每個node都在根目錄建立/nfs目錄
  2. manager(nfs server)設定/etc/exports
sudo vi /etc/exports

設定內網的clients的存取方式、權限,然後存檔

/nfs 10.140.0.0/24(rw,sync,no_root_squash,no_subtree_check)
  1. 重啟nfs server
sudo systemctl restart nfs-kernel-server
  1. 接著其他worker node(nfs client)把本地目錄mount到nfs server
mount -t nfs -o proto=tcp,port=2049 10.140.0.2:/nfs /nfs
  1. 測試mount是否成功
  2. clone專案reop至nfs目錄
git clone <url> /nfs

參考:https://attx-project.github.io/Shared-NFS-Swarm-Cloud.html

GCE部署

目前配置:

  • manager*2 n1-standard-1 (1 個 vCPU,3.75 GB 記憶體)
  • worker*2 f1-micro (1 個 vCPU,0.6 GB 記憶體)
  • load balancer

參考:

後記

經由社群協助已經改為Kubernetes,有以下的優點:

  • Kubernetes的fromEnv可以設定為讀secret file(.env),Swarm目前還做不到這一點,之前的作法是透過nfs server來讀.env,這樣會有安全性的問題,由於Swarm沒辦法直接讀加密後的.env,要一個一個變數加很麻煩
  • autosclaling