序
題記:搞定了就是故事,搞不定就是事故。
條件有限,開局只有一臺開發機,要跑5套子系統組成的專案群。還要有一些輔助和驗證的系統要跑在這上面。從配置來看,要想順暢開心地完成專案群基礎環境支撐,考慮引入資源消耗1/200的神器Docker:更難得是絲毫不用擔心環境汙染、版本衝突、以及突然開發伺服器搞崩潰了;
吐槽避免採坑
- 實際上可能要跑的系統和輔助系統遠超預計
申請的是4C/8G的PC server,後來查命令是1C/2G,10G空間,果斷申請擴容了- 邊幹邊寫:整了四周;期間無數次崩潰,
還要應對乙方內部的質疑,不知道自己是如何堅持下來的
第一週折騰無實質交付
- MacBook 上docker環境起了 CentOS7.2 容器,在容器中模擬離線安裝 Docker 環境(盜夢空間)
-
安裝很成功,按官方教程啟動服務時,崩潰到懷疑人生:
- 命令”systemctl start docker”報錯:”docker Failed to get D-Bus connection”
- CentOS 從7開始,安全考慮,容器內預設不載入D-Bus:直接影響就是 systemctl 不能起服務;
- github 支招:加容器特權引數 –privileged ,啟動非常之慢,不建議踩坑;參考連結
-
Docker 官方支招:自己編譯帶 systemctl 服務的映象 參考連結,
- 然而我沒能測試成功在容器中啟動 docker daemo
- 其他服務沒嘗試,感興趣的可自行研究
- 放棄在容器中使用 systemctl 啟動 Docker 映象服務
第二週換 Redhad7.2映象
- 還是報同樣的錯誤:直接報缺5~8個一級依賴包
- 後來分析不是CentOS和Redhad不同步,應該是甲方提供的CentOS源或系統優化或缺了一些預設的包;
第三週寄希望於甲方提供的內網源
- 協調再三給掛了源:是一個docker叢集監控的源;溝通不暢,不認為掛錯了源;
- 甲方老師又忙。暫停修整了一週;
第四周重整旗鼓
再三協調之後,放棄等待甲方老師的支援。決定還是自己搞。不就是一些一級依賴麼,補全就是!
主要是我方火力太猛:
再不出活,無顏面對向兄弟們:雖然不上這些,採用笨辦法也能幹,但總歸不忍再不交付,無法上得檯面解釋:自己選擇的牛皮,哭著也要吹完,吹完美
搞定。想來想去,還是毛選裡的那句話支撐了我:
自力更生,艱苦奮鬥!
最近在看一行禪師的《佛陀傳》,希望能從中汲取心靈的力量。《天龍八部》裡掃地僧也曾說過:
只有佛法越高,慈悲之念越盛,武功絕技才能練得越我
或許我輩須工作中修行,也是這個道理!
採坑記
對,就是採坑。以下是從草稿中摘取的部分嘗試:
編號 | 容器 |
---|---|
1 | docker run -it –name dc7 ailyfeng/centos7.2.1511 /bin/bash |
2 | docker run -it –name dc88 sssllc/centos7.2-jdk1.8 /bin/bash |
3 | docker run -it –name ct7 centos /bin/bash |
4 | docker run -it –privileged –name dc99 sssllc/centos7.2-jdk1.8 |
5 | docker build –rm -t centos:systemd . && docker run -it –name dr7 centos:systemd |
6 | docker run -it –name dr18 yjjy0921/redhat7.2 /bin/bash |
幾個搞定依賴包的有用命令
ldd 應該是 linux 通用的命令;rpm 和 repotrack 貌似是 CentoOS 的專有命令;
編號 | 命令 | 舉例 | 作用 |
---|---|---|---|
1 | ldd | ldd wkhtmltopdf | not found的就是對應的依賴包不存在,適用於二進位制包(wkhtmltopdf)的命令;而需要安裝的命令(docker-ce)只能通過安裝報錯來捕獲缺失的依賴了 |
2 | rpm -ql | rpm -ql docker-ce | 檢視安裝的時候有哪些命令在PATH下,用這些命令去啟動 |
3 | repotrack | repotrack -a x86_64 -p /usr/local/yumrepo | 打包下載指定架構(X86_63)所有的依賴到指定目錄 |
思路:先驗證再伺服器落地
- 本地 pull一個CentOS7.2的映象
- 只下載 Docker及其依賴不安裝
- 安裝驗證
- 考慮使用者及使用者組賦權
- cp 至伺服器嘗試
安裝 docker
內網 Linux 基礎依賴
要安裝 Docker 基礎環境,必須滿足:
- Linux 核心必須大於3.10:登入內網伺服器看了看,恰好3.10。夠用,就不折騰了;
- 需要支援 device-mapper:已支援
[root@pms tmp] uname -r
3.10.0-327.e17.x86_64
[root@pms tmp] ls -l /sys/class/misc/device-mapper
lrwxrwxrwx. 1 root root 0 May 20 16:17 /sys/class/misc/device-mapper -> ../../devices/virtual/misc/device-mapper
環境模擬
MacBook 上,起 CentOS7.2 容器,來驗證思路;
拉取映象,建立 repo 目錄
ChinaDreams:~ kangcunhua$ docker run -it --name dc88 sssllc/centos7.2-jdk1.8 /bin/bash
[root@7d935562e0ae /]# java -version
java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)
[root@7d935562e0ae /]# yum repo list
Loaded plugins: fastestmirror, ovl
No such command: repo. Please use /usr/bin/yum --help
[root@7d935562e0ae /]#
[root@7d935562e0ae /]# yum repolist
...
[root@7d935562e0ae home]# cd /usr/local/
root@7d935562e0ae local]# mkdir yumrepo
下載所需離線包
[root@7d935562e0ae local]# cd yumrepo/
[root@7d935562e0ae yumrepo]# yum install --downloadonly --downloaddir=/usr/local/yumrepo/ docker
安裝 createrepo
[root@7d935562e0ae yum.repos.d]# yum install createrepo -y
新建 docker.repo
[root@7d935562e0ae yum.repos.d]# pwd
/etc/yum.repos.d
[root@7d935562e0ae yum.repos.d]# vi docker.repo
docker.repo
[docker-yum]
name=dockeryum
baseurl=file:///usr/local/yumrepo
enable=1
gpgcheck=0
生成 repo 索引
主要是將索引生成在/usr/local/yumrepo/repodata目錄
[root@7d935562e0ae yum.repos.d]# createrepo /usr/local/yumrepo/
[root@7d935562e0ae yum.repos.d]# cd /usr/local/yumrepo/
[root@7d935562e0ae yumrepo]# ls
.....
docker-client-1.13.1-53.git774336d.el7.centos.x86_64.rpm repodata
.....
安裝 docker 並驗證
[root@7d935562e0ae yumrepo]# yum --disablerepo=* --enablerepo=docker-yum install docker -y
[root@7d935562e0ae yumrepo]# docker -v
Docker version 1.13.1, build 774336d/1.13.1
嘗試啟動 Hello-world
此時會報錯:提示 docker daemon 沒有啟動;
[root@7d935562e0ae /]# docker run hello-world
/usr/bin/docker-current: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
See `/usr/bin/docker-current run --help`.
啟動 docker 守護程式
使用sysytemctl啟動服務。此時會報錯,是CentOS7.2容器的“安全”考慮,沒有啟動D-Bus:雖然不那麼友好;
[root@7d935562e0ae /]# systemctl start docker
Failed to get D-Bus connection: Operation not permitted
在能查到的資料裡,即使是官方,也沒有說明 Docker Daemon 的守護命令放置在哪兒,以便我們能直接執行;
後續在安裝 Docker-CE 時我找到了這個命令:使用rpm -ql docker 查詢該軟體安裝時在 PATH 下有哪些命令可以執行,成功找到了 Docker Daemon 所在:/usr/bin/dockerd 。詳見文末參考;
直接執行/usr/bin/dockerd
[root@7d935562e0ae /]# /usr/bin/dockerd
INFO[2018-05-22T11:55:22.811053980Z] libcontainerd: started new docker-containerd process pid=53
INFO[0000] starting containerd module=containerd revision=773c489c9c1b21a6d78b5c538cd395416ec50f88 version=v1.0.3
ERRO[0000] failed to change OOM score to -500 error="write /proc/53/oom_score_adj: permission denied" module=containerd
....
仍舊報錯,但至少驗證了離線安裝的思路是正確的。只是在 CentOS7.2 容器中無法啟動 Docker 守護程式;
結論
經過數輪的嘗試,我們可以得出結論:
- 驗證了離線安裝的思路是正確的
- CentOS7.2 以及 RedHat7.2 容器中可以安裝 docker 基礎環境
- CentOS7.2 以及 RedHat7.2 容器中無法啟動 Docker 守護程式
- 容器中無法啟動 Docker 守護程式的事,不影響我們的實驗目標
- 預設 yum install docker 的版本是 docker:Docker version 1.13.1
- 現在 Docker 已變成 Docker-CE:18.03.1-ce,需要驗證離線安裝 Docker-CE
安裝 Docker-CE
梳理思路,重來
- 選擇 centos7.2 基礎映象
- 配置 docker-ce 源
- 選擇 downloadonly 的引數下載 docker-ce 及其依賴
- 配置本地源
- 指定本地源安裝 docker-ce
- 條件有限,就不容器中起 docker 服務了
- 進內網,驗證
ChinaDreams:docker-systemctl kangcunhua$ docker run -it –name dc18 sssllc/centos7.2-jdk1.8 /bin/bash
[root@557a4e0c3e7e /]#
下載 centos7.2基礎映象
ChinaDreams:docker-systemctl kangcunhua$ docker run -it --name dc18 sssllc/centos7.2-jdk1.8 /bin/bash
[root@557a4e0c3e7e /]#
配置 docker-ce 源
如果不配置 docker-ce 源,預設安裝的是 docker1.13。大概是兩年前的版本了。後續 docker 官方將社群版本命名為 docker-ce。所以安裝新版本,還是要配置下 yum 源的:這裡強烈建議配置國內的,速度快。
[root@557a4e0c3e7e /]# yum-config-manager --add-repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
配置後, yum search docker-ce 可以搜尋到了。這時候就可以下載到指定位置:為了後續離線安裝;
下載不安裝:為了驗證離線
[root@557a4e0c3e7e /]# cd /usr/local
[root@557a4e0c3e7e local]# mkdir yumrepo
[root@557a4e0c3e7e local]# yum install --downloadonly --downloaddir=/usr/local/yumrepo/ docker-ce
配置 docker 本地源
建立索引
先安裝本地 repo 索引建立工具,通過這個工具,建立索引:就是本地安裝包所在目錄下的 repodata 目錄;
[root@557a4e0c3e7e yumrepo]# yum install createrepo -y
[root@557a4e0c3e7e yumrepo]# createrepo /usr/local/yumrepo/
建立原始檔 docker.repo
[root@557a4e0c3e7e yumrepo]# cd /etc/yum.repos.d
[root@557a4e0c3e7e yum.repos.d]# vi docker.repo
[root@557a4e0c3e7e yum.repos.d]# more docker.repo
[docker-yum]
name=dockeryum
baseurl=file:///usr/local/yumrepo
enable=1
gpgcheck=0
模擬離線安裝
yum --disablerepo=* --enablerepo=docker-yum install docker-ce -y
驗證安裝成功
[root@557a4e0c3e7e yum.repos.d]# docker -v
Docker version 18.03.1-ce, build 9ee9f40
啟動 dockerd,報錯
這個是因為容器中又啟動了 Docker daemon。部分報錯日誌節選:
[root@557a4e0c3e7e /]# docker -v
Docker version 18.03.1-ce, build 9ee9f40
[root@557a4e0c3e7e /]# /usr/bin/dockerd
...
ERRO[0000] failed to change OOM score to -500 error="write /proc/53/oom_score_adj: permission denied" module=containerd
...
address="/var/run/docker/containerd/docker-containerd.sock" module="containerd/grpc"
INFO[0000] containerd successfully booted in 0.029058s module=containerd
ERRO[2018-05-22T11:55:23.265326880Z] `overlay2` is not supported over aufs
...
WARN[2018-05-22T11:55:23.353577680Z] Running modprobe xt_conntrack failed with message: ``, error: exit status 1
Error starting daemon: Error initializing network controller: error obtaining controller instance: failed to create NAT chain DOCKER: iptables failed: iptables -t nat -N DOCKER: iptables v1.4.21: can`t initialize iptables table `nat`: Permission denied (you must be root)
Perhaps iptables or your kernel needs to be upgraded.
(exit status 3)
Copy 資源出來
ChinaDreams:Desktop kangcunhua$ docker cp dc18:/usr/local/yumrepo .
ChinaDreams:Desktop kangcunhua$ docker cp dc18:/etc/yum.repos.d/docker.repo .
結論
- 驗證離線安裝 Docker-CE 思路成功;
- 容器中仍舊無法啟動 Docker daemon;
內網離線實戰
copy 資源到內網,通過 ssh 將依賴包傳到伺服器;
登入伺服器
- yumrepo 放置到 /usr/local/ 目錄下
- docker.repo 放置到 /etc/yum.repo.d/ 目錄下
- 因為已經生成過索引了,所以無需再次執行 create repo
驗證 docker 本地源
[root@pma03 ~]# yum repolist #可以成功檢視到docker-yum
離線安裝
[root@pma03 ~]# yum --disablerepo=* --enablerepo=docker-yum install docker-ce -y
報錯,缺依賴包;docker-ce相關依賴包已經全了,只是有一些CentOS依賴的包版本比docker-ce低,內網系統可能優化精簡“過”了,或基礎軟體不完整,導致這些低版本和高版本不能和諧共處;只能根據報錯資訊,去筆記本下載依賴;報錯資訊和分析詳見文末:“附:依賴包衝突和解決”;
解決依賴
依舊是回到個人筆記本,聯網下載依賴包:
ChinaDreams:~ kangcunhua$ docker start dc7
dc7
[root@ce27b30d0d9e /]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
[root@ce27b30d0d9e /]# yum clean all
[root@ce27b30d0d9e /]# yum makecache
共計嘗試兩次,使用如下命令,下載補全系統依賴包:
編號 | 命令 |
---|---|
1 | repotrack -a x86_64 -p /usr/local/yumrepo docker-ce |
2 | repotrack -a x86_64 -p /usr/local/yumrepo glibc-2.17-105.e |
3 | repotrack -a x86_64 -p /usr/local/yumrepo systemd-sysv |
4 | repotrack -a x86_64 -p /usr/local/yumrepo dracut-network |
5 | repotrack -a x86_64 -p /usr/local/yumrepo libgudev1 |
6 | repotrack -a x86_64 -p /usr/local/yumrepo dracut-config-rescue |
7 | repotrack -a x86_64 -p /usr/local/yumrepo systemd-python |
8 | repotrack -a x86_64 -p /usr/local/yumrepo libstdc++ |
9 | repotrack -a x86_64 -p /usr/local/yumrepo glibc-headers |
10 | repotrack -a x86_64 -p /usr/local/yumrepo pcre-devel |
11 | repotrack -a x86_64 -p /usr/local/yumrepo gcc-c++ |
12 | repotrack -a x86_64 -p /usr/local/yumrepo glibc-devel |
13 | repotrack -a x86_64 -p /usr/local/yumrepo libtool-ltdl |
14 | repotrack -a x86_64 -p /usr/local/yumrepo libselinux-devel |
15 | repotrack -a x86_64 -p /usr/local/yumrepo libsepol-devel |
筆記本上驗證
保證這些依賴包,不會導致安裝失敗。
[root@ce27b30d0d9e /]# yum --disablerepo=* --enablerepo=docker-yum install docker -y
安裝和配置使用者許可權
安裝
將依賴包上傳到內網伺服器指定目錄/usr/local/yumrepo ;
[root@pma03 ~]# yum --disablerepo=* --enablerepo=docker-yum install docker-ce -y
沒有報錯!
驗證
[root@pma03 ~]# docker -v
Docker version 18.03.1-ce, build 9ee9f40
啟動服務
[root@pma03 ~]# systemctl start docker
搞定!
配置使用者
新增一個使用者dev,專門管理docker。千萬不要圖省事,伺服器上直接用root管理docker;容器可以;
[root@pma03 ~]# cat /etc/group
[root@pma03 ~]# cat /etc/group | grep docker
[root@pma03 ~]# more /etc/passwd
[root@pma03 ~]# gpasswd -a dev docker
[root@pma03 ~]# useradd -g docker dev
[root@pma03 ~]# passwd dev
[root@pma03 ~]# chmod -v u+w /etc/sudoers
[root@pma03 ~]# vi /etc/sudoers
[root@pma03 ~]# chomod -v u-w /etc/sudoers
[root@pma03 ~]# systemctl restart docker
[root@pma03 ~]# docker -v
[root@pma03 ~]# docker info
[root@pma03 ~]# su dev
[dev@pma03 ~]#
安裝 docker-compose
又被坑了:docker for Mac、docker for windows 安裝完都自帶 docker-compose,linux 版本的 docker-ce 居然不帶。想起來離線安裝各種坑就頭大,網上查了半天資料,居然是個 python 工具,要先安裝 pip,o No!只好翻到 github,看看能不能原始碼編譯安裝。結果看到有 release 的下載,猜想可以直接使用。後來用下載後的檔案百度,果然翻到一篇指南,可以這樣搞:
方法四:離線安裝
下載 docker-compose-Linux-x86_64,然後重新命名新增可執行許可權即可:
筆記本驗證先
ChinaDreams:Desktop kangcunhua$ docker cp ./docker-compose-Linux-x86_64.dms dc18:/usr/local/bin/docker-compose
進入容器
[root@557a4e0c3e7e /]# cd /usr/local/bin/
[root@557a4e0c3e7e bin]# ls
docker-compose
[root@557a4e0c3e7e bin]# chmod +x /usr/local/bin/docker-compose
[root@557a4e0c3e7e bin]# docker-compose -v
docker-compose version 1.21.2, build a133471
內網安裝 docker-compose
同樣把安裝包 copy 進內網,ssh 上傳到伺服器
- cp 重新命名到指定目錄
- 賦予執行許可權
- 賦予 dev:docker 也有執行許可權
[root@pma03 ~]# cd /usr/local/bin/
[root@pma03 bin]# cp /home/dev/docker-images/docker-compose-Linux-x86_64.dms docker-compose
[root@pma03 bin]# chmod +x ./docker-compose
[root@pma03 bin]# docker-compose -v
[root@pma03 bin]# chown -R dev:docker ./docker-compose
[root@pma03 bin]# su dev
[dev@pma03 ~]# docker-compose -v
搞定!
後續
後續要做的事情就簡單了:
- 從筆記本上 pull 映象,然後匯出
- copy 到內網上傳到伺服器,匯入
- docker run 起映象
- docker-compose 起多個映象
盡情 happy 吧!
附:依賴包衝突和分析
內網離線安裝碰上的依賴包問題和分析
報錯
yun install docker-ce 時,提示有依賴包版本衝突 or 缺失;
Error: Package: systemd-sysv-219-19.el7.x86_64 (@anaconda)
Requires: systemd = 219-19.el7
Removing: systemd-219-19.el7.x86_64 (@anaconda)
systemd = 219-19.el7
Updated By: systemd-219-42.el7_4.4.x86_64 (localyum)
systemd = 219-42.el7_4.4
Error: Package: dracut-network-033-359.el7.x86_64 (@anaconda)
Requires: dracut = 033-359.el7
Removing: dracut-033-359.el7.x86_64 (@anaconda)
dracut = 033-359.el7
Updated By: dracut-033-502.el7.x86_64 (localyum)
dracut = 033-502.el7
Error: Package: libgudev1-219-19.el7.x86_64 (@anaconda)
Requires: systemd-libs = 219-19.el7
Removing: systemd-libs-219-19.el7.x86_64 (@anaconda)
systemd-libs = 219-19.el7
Updated By: systemd-libs-219-42.el7_4.4.x86_64 (localyum)
systemd-libs = 219-42.el7_4.4
Error: Package: dracut-config-rescue-033-359.el7.x86_64 (@anaconda)
Requires: dracut = 033-359.el7
Removing: dracut-033-359.el7.x86_64 (@anaconda)
dracut = 033-359.el7
Updated By: dracut-033-502.el7.x86_64 (localyum)
dracut = 033-502.el7
Error: Package: systemd-python-219-19.el7.x86_64 (@anaconda)
Requires: systemd = 219-19.el7
Removing: systemd-219-19.el7.x86_64 (@anaconda)
systemd = 219-19.el7
Updated By: systemd-219-42.el7_4.4.x86_64 (localyum)
systemd = 219-42.el7_4.4
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest
看到報錯的時候,內心是崩潰的。最後還是收拾心情,逐一解決了。
網上唯一可以找到的資料就是這篇離線安裝docker包衝突,報錯資訊一模一樣,但是帖子沒有給出確定的原因和解決辦法;但是給予了我信心,確實不是因為CentOS7.2和Redhat7.2有底層不同,導致的這些錯誤,這樣是無力解決的;後續解決完依賴後,我猜測原因是,甲方提供的Redhat或CentOS,預設軟體包安裝的有問題:做了一些精簡“優化”處理不了部分依賴包衝突;
後續找到了這篇文章:CentOS7.2離線安裝docker-ce最新版,文中指出Docker需要的部分軟體包版本要高於CentOS7;就是說同樣的軟體包,Docker依賴的高版本的,但是CentOS依賴低版本的;解決辦法就是找到他們,全部安裝上去;
下載 libgudev1 和 systemd-sysv,是因為 centos7.2 的 libgudev1 和 systemd-sysv 依賴 systemd-219-19.el7.x86_64,而 docker-ce 需要 systemd-219-30el7.x86_64.
再次嘗試
repotrack -a x86_64 解決上述依賴後(命令詳見正文:解決依賴),copy 進內網,再次嘗試安裝 Docker-CE。
Error: Package: systemd-sysv-219-19.el7.x86_64 (@anaconda)
Requires: systemd = 219-19.el7
Removing: systemd-219-19.el7.x86_64 (@anaconda)
systemd = 219-19.el7
Updated By: systemd-219-42.el7_4.4.x86_64 (localyum)
systemd = 219-42.el7_4.4
Error: Package: dracut-network-033-359.el7.x86_64 (@anaconda)
Requires: dracut = 033-359.el7
Removing: dracut-033-359.el7.x86_64 (@anaconda)
dracut = 033-359.el7
Updated By: dracut-033-502.el7.x86_64 (localyum)
dracut = 033-502.el7
Error: Package: libgudev1-219-19.el7.x86_64 (@anaconda)
Requires: systemd-libs = 219-19.el7
Removing: systemd-libs-219-19.el7.x86_64 (@anaconda)
systemd-libs = 219-19.el7
Updated By: systemd-libs-219-42.el7_4.4.x86_64 (localyum)
systemd-libs = 219-42.el7_4.4
Error: Package: dracut-config-rescue-033-359.el7.x86_64 (@anaconda)
Requires: dracut = 033-359.el7
Removing: dracut-033-359.el7.x86_64 (@anaconda)
dracut = 033-359.el7
Updated By: dracut-033-502.el7.x86_64 (localyum)
dracut = 033-502.el7
Error: Package: systemd-python-219-19.el7.x86_64 (@anaconda)
Requires: systemd = 219-19.el7
Removing: systemd-219-19.el7.x86_64 (@anaconda)
systemd = 219-19.el7
Updated By: systemd-219-42.el7_4.4.x86_64 (localyum)
systemd = 219-42.el7_4.4
解決辦法就是繼續回到筆記本聯網下載這些依賴包;詳見:“解決依賴”;
參考
直接安裝 rpm 包
可以的,直接敲 “rpm -ivh 包名”但是有些rpm包是有依賴性的,可以在命令尾端新增 “–force
–nodeps”,“–force”指強制“,”–nodeps“指不查詢依賴性比如”rpm -ivh *.rpm –force
—nodeps“,同時,也可以使用yum命令,會自動解決包依賴的關係,能便於管理大量系統的更新問題,建議使用
yum
容器特權–privileged
Runtime privilege, Linux capabilities, and LXC configuration
–cap-add : Add Linux capabilities
–cap-drop : Drop Linux capabilities
–privileged=false : Give extended privileges to this container
–device=[] : Allows you to run devices inside the container without
the –privileged flag.–lxc-conf=[] : (lxc exec-driver only) Add custom lxc options
–lxc-conf=”lxc.cgroup.cpuset.cpus = 0,1”預設情況下,Docker的容器是沒有特權的,例如不能在容器中再啟動一個容器。這是因為預設情況下容器是不能訪問任何其它裝置的。但是通過”privileged”,容器就擁有了訪問任何其它裝置的許可權。
我嘗試了下,啟動非常之慢:不推薦
ChinaDreams:~ kangcunhua$ docker run -it --privileged --name dc99 sssllc/centos7.2-jdk1.8 /usr/sbin/init
Welcome to CentOS Linux 7 (Core)!
[ OK ] Reached target Swap.
[ OK ] Created slice Root Slice.
[ OK ] Listening on udev Control Socket.
[ OK ] Reached target Encrypted Volumes.
[ OK ] Listening on udev Kernel Socket.
[ OK ] Listening on Delayed Shutdown Socket.
[ OK ] Listening on /dev/initctl Compatibility Named Pipe.
[ OK ] Reached target Remote File Systems.
[ OK ] Created slice User and Session Slice.
[ OK ] Created slice System Slice.
[ OK ] Created slice system-serialx2dgetty.slice.
[ OK ] Reached target Slices.
[ OK ] Listening on Journal Socket.
Mounting Debug File System...
Starting Journal Service...
Mounting FUSE Control File System...
Starting Apply Kernel Variables...
Starting Create Static Device Nodes in /dev...
Mounting Huge Pages File System...
Starting Setup Virtual Console...
[ OK ] Created slice system-getty.slice.
Starting Remount Root and Kernel File Systems...
[ OK ] Reached target Paths.
[ OK ] Mounted FUSE Control File System.
[ OK ] Mounted Debug File System.
[ OK ] Mounted Huge Pages File System.
[ OK ] Started Apply Kernel Variables.
[ OK ] Started Setup Virtual Console.
[ OK ] Started Create Static Device Nodes in /dev.
Starting udev Kernel Device Manager...
[ OK ] Started Journal Service.
[ OK ] Started udev Kernel Device Manager.
[FAILED] Failed to start Remount Root and Kernel File Systems.
See `systemctl status systemd-remount-fs.service` for details.
[ OK ] Reached target Local File Systems (Pre).
Starting Rebuild Hardware Database...
Starting Load/Save Random Seed...
Starting Flush Journal to Persistent Storage...
[ OK ] Reached target Local File Systems.
Starting Rebuild Journal Catalog...
[ OK ] Started Flush Journal to Persistent Storage.
Starting Create Volatile Files and Directories...
[ OK ] Started Load/Save Random Seed.
[ OK ] Started Rebuild Journal Catalog.
[ OK ] Started Create Volatile Files and Directories.
Starting Update UTMP about System Boot/Shutdown...
[ OK ] Started Update UTMP about System Boot/Shutdown.
[ OK ] Started Rebuild Hardware Database.
Starting udev Coldplug all Devices...
Starting Update is Completed...
[ OK ] Started Update is Completed.
[ OK ] Started udev Coldplug all Devices.
[ OK ] Reached target System Initialization.
[ OK ] Reached target Timers.
[ OK ] Listening on D-Bus System Message Bus Socket.
[ OK ] Reached target Sockets.
[ OK ] Reached target Basic System.
Starting LSB: Supports the direct execution of binary formats....
Starting Permit User Sessions...
[ OK ] Started D-Bus System Message Bus.
Starting D-Bus System Message Bus...
Starting Login Service...
[ OK ] Started Permit User Sessions.
Starting Cleanup of Temporary Directories...
[ OK ] Started Getty on tty1.
Starting Getty on tty1...
[ OK ] Started Cleanup of Temporary Directories.
[ OK ] Started Login Service.
[ OK ] Started LSB: Supports the direct execution of binary formats..
[ TIME ] Timed out waiting for device dev-ttyS0.device.
[DEPEND] Dependency failed for Serial Getty on ttyS0.
[ OK ] Reached target Login Prompts.
[ OK ] Reached target Multi-User System.
Starting Update UTMP about System Runlevel Changes...
[ OK ] Started Update UTMP about System Runlevel Changes.
^C^C^C^C^C^Ccc/
CentOS 安裝 Docker CE
參考連結
$ sudo yum-config-manager
--add-repo
https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
$ sudo yum-config-manager --enable docker-ce-edge
$ sudo yum makecache fast
$ sudo yum install docker-ce
知識點rpm -ql 軟體包
rpm -ql 軟體包 檢視安裝的時候有哪些命令在 PATH 下,用這些命令去啟動,這個是一種解決的方法
[root@9c676d901d7b bin]# rpm -ql docker-ce
/etc/udev/rules.d/80-docker.rules
/usr/bin/docker
/usr/bin/docker-containerd
/usr/bin/docker-containerd-ctr
/usr/bin/docker-containerd-shim
/usr/bin/docker-init
/usr/bin/docker-proxy
/usr/bin/docker-runc
/usr/bin/dockerd
/usr/lib/systemd/system/docker.service
/usr/share/bash-completion/completions/docker
本文由作者:蠻大人 授權釋出
連結:https://opsdev.fun/2018/05/09…
著作權歸作者所有。
轉載請聯絡作者獲得授權