-
Notifications
You must be signed in to change notification settings - Fork 34
Docker
ssivart edited this page Mar 4, 2019
·
23 revisions
-
不要直接透過homebrew安裝,如
brew install docker
,這只有docker CLI,沒有實際server功能 - Mac OS 10.12之前的版本需要裝Toolbox,之後的版本直接安裝Docker for Mac
- Requires Apple Mac OS Sierra 10.12 or above. Download Docker Toolbox for previous OS versions.
- 推薦terminal: iTerm2
- 推薦編輯器:vscode,有docker extension
- 指令auto complete工具:shell-completion
若加上-v
還是無法清除volume,先清理已stop的容器:
docker container prune
清理所有volumes
docker volume prune
專案部署時用的檔案docker-stack.yml
需要事先build好兩組映像檔: froggy-service-nginx
、froggy-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
$ 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
目前專案設定上,各個node都會需要存取repo的靜態檔案,所以設定一下nfs:
- 首先在其中一台manager node安裝nfs server,其他node安裝nfs client
sudo apt-get install nfs-kernel-server
sudo apt-get install nfs-common
- 每個node都在根目錄建立
/nfs
目錄 - manager(nfs server)設定
/etc/exports
sudo vi /etc/exports
設定內網的clients的存取方式、權限,然後存檔
/nfs 10.140.0.0/24(rw,sync,no_root_squash,no_subtree_check)
- 重啟nfs server
sudo systemctl restart nfs-kernel-server
- 接著其他worker node(nfs client)把本地目錄mount到nfs server
mount -t nfs -o proto=tcp,port=2049 10.140.0.2:/nfs /nfs
- 測試mount是否成功
- clone專案reop至nfs目錄
git clone <url> /nfs
參考:https://attx-project.github.io/Shared-NFS-Swarm-Cloud.html
目前配置:
- 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