嗨嗨哈哈,已經很久沒有坐下來胡編亂造一點筆記了,平時雲服務器搞慣了,一個命令就安裝好了docker了的,但這次生不逢時的新機房就沒那么幸運了,有多不逢時超乎想象,不僅僅服務器沒有外網,就連周圍方圓一公里手機網絡都沒有,要查一個資料只能步行公里開外去搜尋網絡。
不打無准備之戰:我就是一名菜鳥,加上這樣的環境,豈不是雪上加霜,為了能夠順利的完成部署工作,我也是拼了,哈哈哈哈,網上找了很多關於離線docker的安裝資料,各種花式玩法真是百家爭鳴,搜索珍藏了1 mole的資料,忐忑的去現場實施了。
看到服務器配置的第一眼,哇靠,這配置真奢侈啊,妥妥的土豪,你沒看錯,這只是冰山一角。就問你一句話,奢不奢侈。

初出茅廬,手忙腳亂:懷着忐忑的心開始第一次docker離線安裝之旅,第一次安裝穩穩的宣布失敗,根據錯誤飛奔到公里開外去找度大娘,找完度大娘又滿懷憧憬的去修復,修復舊的問題又有新的問題,這樣周而復始了N個回合,docker還是頑固的起不起來。該下班了,來日再戰。
重整旗鼓,來日再戰:自己電腦安裝一個centos8虛擬機環境,持續搜索,嘗試多次,測試成功了,整理好思路,飽飽睡一覺,來日再戰。
依葫畫瓢,一戰成功:第二天回到機房,找了一台新服務器,按照昨晚的成功經驗,一戰成功。同樣的方法繼續搞昨天未成功的服務器,還是宣告失敗,成功的回不去了。還好我有一個習慣,新環境按照,我都喜歡操作一步記錄一步,找到昨天的安裝筆記,一步一操作回撤,最后成功回爐再造。
哈哈哈,唧唧歪歪的說了半天,還沒有進入到今天的主題,嘿嘿,你們是不是為我的啰里啰唆感到着急,嗯嗯,好下面我把成功安裝的筆記整理一下發出來,供有需要的你做一個參考。
1. 下載docker離線安裝包
Docker離線版安裝包下載很簡單,直接根據下面的地址選擇自己合適的版本下載即可:
https://download.docker.com/linux/static/stable/x86_64/
但是在具體版本選擇的時候給點建議:不要選擇太低的版本,低版本無論是性能還是其他都比理想,版本太新也不知道穩定性是否有問題,哈哈哈,是不是覺得我太保守啦,嗯嗯嗯,我的出發點就是穩定是第一要義,我建議選擇19以上版本,以上純屬個人狹隘觀點,如有冒犯多多包涵。
我習慣了一直用的是docker-19.03.6.tgz,這次也就選擇它了。
2. 安裝docker
2.1安裝包上傳
將上一步驟准備好的docker安裝包上傳到離線服務器,我習慣上傳到目錄:/home/installpack,具體目錄木有什么要求,根據自己愛好來操作。

2.2安裝包解壓
首先需要進入到安裝包,並執行解壓,當然你用決定路徑,進入安裝包就多此一舉了哈,我不嫌麻煩,老老實實一步一步來。分別執行以下命令
cd /home/installpack tar xzvf docker-19.03.6.tgz
執行完畢以后,你會看到一個docker文件夾,那就大功告成,這一步我相信大家想錯都難噢,不會給你錯的機會。

2.3安裝
安裝也很簡單了,只需執行以下兩個命令即可:
cp docker/* /usr/bin/ dockerd &
這一步也許你就沒那么幸運了,如果是第一次安裝,我想你還是會一如既往的順,只要不報錯,說明你就成功了。
2.4測試
測試是否成功安裝,也就一句話的事,執行以下命令即可:
docker info
顯示如下界面,那就真的恭喜您,第一步安裝成功,黎明就在眼前了。
當然你也不需要太關心這一些內容是說明意思,或者很簡單的看安裝成功沒得,只要沒有紅色的字出現就是萬事大吉。
如果錯了,也不要慌,下面還有呢

2.5報錯回撤
無論是安裝過程中報錯還是測試結果報錯,那都是錯,如果錯了請按照以下步驟來完成回撤。
首先想一想,是否還在網上找了其他大師的教程操作,如果找了,那么你首先要想一想做了哪一些操作,並全部還原回去,尤其是修改了某一些配置文件,是不是想起老師常說的好記性不如爛筆頭是很有道理的啦。
接下來就做本次安裝文件刪除即可,分別執行以下命令:
rm -rf /var/run/docker rm -rf /var/lib/docker rm -rf /var/run/docker.pid rm -rf /var/run/docker.sock 停止docker相關的進程 ps -aux | grep docker kill掉查詢出來的全部進程 解除docker相關進程占用端口 netstat -nplt | grep docker
完成以上操作后,又執行一遍安裝+測試的命令即可,如果重復執行多次不爽,那我建議你可以拿出問題修復殺手鐧了:重啟服務器
3. 設置docker為系統服務
3.1創建配置containerd服務
在etc目錄下創建containerd文件夾,並在containerd文件夾下創建containerd.service文件。相關命令如下:
mkdir /etc/containerd touch /usr/lib/systemd/system/containerd.service vi /usr/lib/systemd/system/containerd.service
其中containerd.service文件的內容填寫如下內容(先不關心里面配置的什么,先跑起來才是王道,后面有時間在慢慢研究):
[Unit] Description=containerd container runtime Documentation=https://containerd.io After=network.target [Service] ExecStartPre=/sbin/modprobe overlay ExecStart=/usr/bin/containerd Delegate=yes KillMode=process LimitNOFILE=1048576 # Having non-zero Limit*s causes performance problems due to accounting overhead # in the kernel. We recommend using cgroups to do container-local accounting. LimitNPROC=infinity LimitCORE=infinity [Install] WantedBy=multi-user.target
啟動containerd服務,命令如下:
# 重新加載配置信息 systemctl daemon-reload #設置containerd.service為開機啟動 systemctl enable containerd.service #啟動containerd服務 systemctl start containerd.service #查看containerd服務啟動狀態 systemctl status containerd.service
依次執行以上命令,最后看到綠色的【active (running)】,那恭喜您containerd服務配置啟動成功。如果服務啟動失敗,還是終極殺手鐧來解決:先嘗試重啟docker,如還是不行在嘗試重啟服務器,反正我是沒有重啟

3.2創建配置docker.socket服務
在/usr/lib/systemd/system文件夾創建docker.socket文件,命令如下:
groupadd docker touch /usr/lib/systemd/system/docker.socket vi /usr/lib/systemd/system/docker. socket
其中docker.socket文件的內容填寫如下內容(先不關心里面配置的什么,先跑起來才是王道,后面有時間在慢慢研究):
[Unit] Description=Docker Socket for the API PartOf=docker.service [Socket] ListenStream=/var/run/docker.sock SocketMode=0660 SocketUser=root # 如果出現錯誤:chown socket at step GROUP: No such process, 可以修改下面的 SocketGroup=root 或創建 docker 用戶組(命令 groupadd docker) SocketGroup=docker [Install] WantedBy=sockets.target
啟動containerd服務,查看是否正常,命令如下:
# 重新加載配置信息 systemctl daemon-reload #設置containerd.service為開機啟動 systemctl enable containerd.service #啟動containerd服務 systemctl start containerd.service #查看containerd服務啟動狀態 systemctl status containerd.service
依次執行以上命令,最后看到綠色的【active (running)】,那恭喜您containerd服務配置啟動成功。如果服務啟動失敗,還是終極殺手鐧來解決:先嘗試重啟docker,如還是不行在嘗試重啟服務器,反正我是沒有重啟

3.3創建配置docker.service服務
在/usr/lib/systemd/system文件夾創建docker.service文件,命令如下:
touch /usr/lib/systemd/system/docker.service vi /usr/lib/systemd/system/docker.service
其中docker.service文件的內容填寫如下內容(先不關心里面配置的什么,先跑起來是王道,后面有時間在慢慢研究):
[Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com BindsTo=containerd.service After=network-online.target firewalld.service containerd.service Wants=network-online.target Requires=docker.socket [Service] Type=notify # the default is not to use systemd for cgroups because the delegate issues still # exists and systemd currently does not support the cgroup feature set required # for containers run by docker ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock ExecReload=/bin/kill -s HUP $MAINPID TimeoutSec=0 RestartSec=2 Restart=always # Note that StartLimit* options were moved from "Service" to "Unit" in systemd 229. # Both the old, and new location are accepted by systemd 229 and up, so using the old location # to make them work for either version of systemd. StartLimitBurst=3 # Note that StartLimitInterval was renamed to StartLimitIntervalSec in systemd 230. # Both the old, and new name are accepted by systemd 230 and up, so using the old name to make # this option work for either version of systemd. StartLimitInterval=60s # Having non-zero Limit*s causes performance problems due to accounting overhead # in the kernel. We recommend using cgroups to do container-local accounting. LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity # Comment TasksMax if your systemd version does not support it. # Only systemd 226 and above support this option. TasksMax=infinity # set delegate yes so that systemd does not reset the cgroups of docker containers Delegate=yes # kill only the docker process, not all processes in the cgroup KillMode=process [Install] WantedBy=multi-user.target
啟動docker.service服務,命令如下:
#解除 systemctl unmask docker.service systemctl unmask docker.socket # 重新加載配置信息 systemctl daemon-reload #設置docker為開機啟動 systemctl enable docker #啟動docker服務 systemctl start docker #查看docker服務啟動狀態 systemctl status docker
依次執行以上命令,最后看到綠色的【active (running)】,那恭喜您docekr.service服務配置啟動成功。如果服務啟動失敗,還是終極殺手鐧來解決:先嘗試重啟docker,如還是不行在嘗試重啟服務器,反正我是重啟服務器才成功的。

當看到docker正常啟動的那一刻,這次環境搭建之旅忐忑的心才算落地,實話。
4. 安裝總結
走到這一步,恭喜您離線版docker搭建完成,簡單回顧一下本次安裝體會:
戒急戒躁:不要急於求成,跟着文檔一個蘿卜一個坑的走好
善於筆記:好記性不如爛筆頭,記錄自己的每一步操作,便於事后的回撤和總結
本次整理沒有其他目的,就是一個環境部署筆記總結,正好如果您也在找,也許可以幫助到你一點什么呢,豈不是一件快事。
好了,本次記錄就在此see good by。后面有時間在將docker中的相關鏡像遷移也做一個整理分享。
END
為了更高的交流,歡迎大家關注我的公眾號,掃描下面二維碼即可關注,謝謝:

