但是。。目前的現狀(LXC 2 / LXD 3 以及 Docker 18.09),Docker CE Engine 雖然可以運作,但是 Docker Swarm 部份,會嘗試載入 Kernel Module,以提供正常的 Overlay 網路功能,目前這一部份在 LXC/LXD 裡面還是有些狀況。。。
不過,這邊把目前作的到的,在 LXC 裡面設置 Docker Engine 的筆記,一樣紀錄起來。至於 Docker Swarm,可能要看看以後有沒有機會改善了。。
[Update 2019/9/7] LXD 裡面確認可以運作 Docker Swarm 叢集了,筆記在這。
原則上,只要注意這兩點就好:
- 在 LXC 這一層,不要使用容器專用的檔案系統 aufs
- 需要作一點設定,以達成 Container in Container 功能
此外,Unprivileged LXC Container 也是支援的~不過這是正式環境在考量的進階用法,但這邊只需要作演練,並不打算弄成正式環境,因此很多東西不會怎麼踩到。這邊就針對最主要的 Container in container 的狀況紀錄一下
延續之前的內容,一樣要先產生一個 Container,輸出過程就略過
[root@lxc-lab ~]# ./addcontainer.sh docker-env [root@lxc-lab ~]# ./startlab.sh docker-env [root@lxc-lab ~]# ./envlogin.sh docker-env
安裝 docker 的 Repository,輸出過程一樣略過,只列一下相依套件清單
[root@docker-env ~]# curl https://download.docker.com/linux/centos/docker-ce.repo --output /etc/yum.repos.d/docker-ce.repo 。。略 [root@docker-env ~]# yum install -y docker-ce 。。略 Dependencies Resolved ================================================================================================ Package Arch Version Repository Size ================================================================================================ Installing: docker-ce x86_64 3:18.09.3-3.el7 docker-ce-stable 19 M Installing for dependencies: audit-libs-python x86_64 2.8.4-4.el7 base 76 k checkpolicy x86_64 2.5-8.el7 base 295 k container-selinux noarch 2:2.74-1.el7 extras 38 k containerd.io x86_64 1.2.4-3.1.el7 docker-ce-stable 22 M docker-ce-cli x86_64 1:18.09.3-3.el7 docker-ce-stable 14 M libcgroup x86_64 0.41-20.el7 base 66 k libseccomp x86_64 2.3.1-3.el7 base 56 k libselinux-python x86_64 2.5-14.1.el7 base 235 k libsemanage-python x86_64 2.5-14.el7 base 113 k policycoreutils-python x86_64 2.5-29.el7_6.1 updates 456 k python-IPy noarch 0.75-6.el7 base 32 k selinux-policy noarch 3.13.1-229.el7_6.9 updates 483 k selinux-policy-targeted noarch 3.13.1-229.el7_6.9 updates 6.9 M setools-libs x86_64 3.3.8-4.el7 base 620 k Transaction Summary ================================================================================================ Install 1 Package (+14 Dependent packages) Total download size: 64 M Installed size: 261 M 。。略
使用 SystemD 指令啟動 docker 服務,然後拉一個 docker Image 來初始化一個 Container 來試試
[root@docker-env ~]# service docker start [root@docker-env ~]# docker pull postgres:11-alpine 11-alpine: Pulling from library/postgres 8e402f1a9c57: Pull complete 12541ba6b234: Pull complete 005e29442040: Pull complete ba9fa9b0c10f: Pull complete 12d8714bca48: Pull complete 020e0e7d0d5c: Pull complete 97b03e8f6d92: Pull complete 292bfe64b4c8: Pull complete d400246b1173: Pull complete Digest: sha256:063ae33afa28eee96cc7f7858e4e405a650dfdba7d5cad24781c8c7cee39dfc2 Status: Downloaded newer image for postgres:11-alpine [root@docker-env ~]# [root@docker-env ~]# docker run --name testpg -d postgres:11-alpine ffe6e1871d00f90af6bb08ebcc95126faa1e417f41a994b4b3da10b712733ab4 docker: Error response from daemon: OCI runtime create failed: container_linux.go:344: starting container process caused "apply caps: operation not permitted": unknown. [root@docker-env ~]#
最後要 docker run 時會發現有狀況。尋找資料之後,要在 LXC Config 增加幾個參數(要先停止這個 Container 之才設定)
[root@lxc-lab ~]# ./stopenv.sh [root@lxc-lab ~]# cat << EOF >> /var/lib/lxc/docker-env/config ## For running docker inside lxc.aa_profile = unconfined lxc.cgroup.devices.allow = a lxc.cap.drop = lxc.hook.mount = lxc.hook.post-stop = EOF [root@lxc-lab ~]#
設定完之後,就可以重新啟動這個 LXC Container,並且可以正常運作~
[root@docker-env ~]# service docker start [root@docker-env ~]# docker start testpg [root@docker-env ~]# docker exec -it testpg /bin/bash bash-4.4# psql -U postgres psql (11.2) Type "help" for help. postgres=# select version(); version --------------------------------------------------------------------------------------- PostgreSQL 11.2 on x86_64-pc-linux-musl, compiled by gcc (Alpine 8.2.0) 8.2.0, 64-bit (1 row) postgres=# \q bash-4.4# bash-4.4# free -m total used free shared buffers cached Mem: 1495 1406 88 0 0 974 -/+ buffers/cache: 432 1062 Swap: 2050 0 2050 bash-4.4#
大功告成。
參考資料
Working install of Docker-CE in LXC unprivileged container in Proxmox - LXC - Linux Containers Forum
沒有留言:
張貼留言