[精讚] [會員登入]
100

[Centos8] 安裝及設定docker

docker 是一個應用程式的容器,相對於vm是作業系統的容器。此篇整理基本安裝及設定。

此文完整連結 http://n.sfs.tw/14643

複製連結 [Centos8] 安裝及設定docker@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2020-05-28 13:14:38 最後編修
2020-05-20 11:27:27 By 張○○
 

自動目錄

docker 是一個提供應用程式容器的服務,相對於vm是作業系統的容器。簡單的來說,docker 有點像遊戲模擬器,可以玩很多的遊戲,就算是不同的作業系統,只要能裝上模擬器就能玩。

影像(images、相當於遊戲的rom檔)藉由docker執行後,可以形成容器(container),這就是執行後的實體,裡面跑著這個其中的images file,進階及有能力的使用者可以包裝及建立自己的images,也可以發布到公開或私有的平台分享給其它人。相關的觀念堆薦可以參考[8]的詳細介紹。

系統

CentOS Linux release 8.0.1905 (Core)

docker安裝

一、安裝 repos

docker除了上面的stable版本外,還有 nightly(下一版次的主要版本,但可能還需要測試和除錯)和test兩種版本,在此 repository已預設有這二個版本的設定,只要enable即可:dnf config-manager --enable docker-ce-nightly 或是修改設定檔亦可。
這部分可參考官網[1]。

 

二、移除舊版docker

如果之前有安裝過其它版本的docker,可先移除以免造成版本衝突

# dnf remove docker  docker-client  docker-client-latest  docker-common \
docker-latest docker-latest-logrotate docker-logrotatedocker-engine

 

三、安裝docker

這裡我手動安裝 containerd.io,因為新版本需求的版本 >1.2.2但repos只能提供到1.2.0所以下載rpm裝,請參看錯誤排除一:

下載rpm,網址如[5]。

安裝rpm

# dnf install containerd.io-1.2.6-3.3.fc30.x86_64.rpm

 

完畢後,再裝 docker即可

# dnf install docker-ce docker-ce-cli

最後安裝完版本

# dnf list docker-ce docker-ce-cli containerd.io
Installed Packages
containerd.io.x86_64                                  1.2.6-3.3.fc30                                  @@commandline    
docker-ce.x86_64                                      3:19.03.9-3.el7                                 @docker-ce-stable
docker-ce-cli.x86_64                                  1:19.03.9-3.el7                                 @docker-ce-stable

 

啟動docker

設定開機啟動並啟動

# systemctl enable --now docker

查看運作裝態

# systemctl is-active docker
# systemctl status docker

啟動及停止

# systemctl start docker
# systemctl stop docker

常用Docker指令--for image

docker的指令和git有點類似,列舉數個常用的指令

查看安裝的 images

# docker images

移除已安裝的images

# docker rmi <IMAGE ID>

尋找images

# docker search <套件關鍵字>

例: docker search gitlab

安裝images

# docker pull <REPOSITORY/NAME>

例: docker pull kopkop/termgifmaker

建立container

# docker run <參數> <IMAGE ID>

<參數>有3 40個,列舉常用參數[7][8]

-d 背景執行
-p 伺服器Port:Docker埠
-i :則讓容器的標準輸入保持打開
-t:讓Docker分配一個虛擬終端(pseudo-tty)並綁定到容器的標準輸入上
-e:設定環境變數(AAA=BBB)
-p:Port 對應(host port:container port)
-v:資料對應(host folder:container folder)
--name:設定容器名稱,如果有設定容器名稱,後面的操作可用名稱來代替

常用Docker指令--for container

查看執行的container

# docker ps -a
CONTAINER ID    IMAGE           COMMAND             CREATED          STATUS             PORTS              NAMES
39fcf3a412c1    17d5117a2e37    "/assets/wrapper"   55 minutes ago   Up 55 minutes (healthy)   22/tcp, 443/tcp, 0.0.0.0:8000->80/tcp   infallible_gauss

如果有設定容器名稱,後面的<CONTAINER ID>可用名稱來代替,也可以使用rename功能來更名

# docker rename <CONTAINER ID/NAMES> new_name

停止/啟動 container

# docker stop <CONTAINER ID>
# docker start <CONTAINER ID>

刪除container

# docker rm <CONTAINER ID>
# docker kill <CONTAINER ID>

rm 和 kill 的差別是kill只是中止程式,容器實體還在,kill後要重新執行用start即可

查看設定及狀態

# docker inspect <CONTAINER ID>
# docker inspect <IMAGE ID>
# docker stats
# docker port
# docker top <CONTAINER ID>

進到容器中

# docker exec -ti <CONTAINER ID> /bin/bash

-t:可看到容器中的畫面,換句話說,如果只想叫用容器裡面的程式,不必加此參數

-i:鍵盤輸入到容器中,想在容器中操作,這個參數一定要和 -t 連用,不然你會不知道你在幹嘛。

範例 docker  exec -ti bd7d9e9a2db6 /bin/bash

查看記錄

# docker logs -f <CONTAINER ID>
# docker logs <CONTAINER ID>

-f 即時查看

結論

此篇介紹基本對基本的操作熟析後,下一篇會介紹docker config 的設定。

 

錯誤排除

一、centos8 上出現 ontainerd.io >= 1.2.2-3 的錯誤

 Problem: package docker-ce-3:19.03.9-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed
  - cannot install the best candidate for the job
  - package containerd.io-1.2.10-3.2.el7.x86_64 is excluded
  - package containerd.io-1.2.13-3.1.el7.x86_64 is excluded
  - package containerd.io-1.2.13-3.2.el7.x86_64 is excluded
  - package containerd.io-1.2.2-3.3.el7.x86_64 is excluded
  - package containerd.io-1.2.2-3.el7.x86_64 is excluded
  - package containerd.io-1.2.4-3.1.el7.x86_64 is excluded
  - package containerd.io-1.2.5-3.1.el7.x86_64 is excluded
  - package containerd.io-1.2.6-3.3.el7.x86_64 is excluded
(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)

解決:利用官網給定的指令無法安裝到centos8上,主因是containerd.io只能安裝到1.2.0版,手動下載rpm來安裝,請參考上面三、安裝docker

二、啟動docker時失敗,記錄檔

/usr/bin/containerd: symbol lookup error: /usr/bin/containerd: undefined symbol: seccomp_api_set
containerd.service: Main process exited, code=exited, status=127/n/a
containerd.service: Failed with result 'exit-code'.

解決:因為containerd.io的版本太新導致,後來安裝1.2.6即可,請參考上面三、安裝docker

參考資料

[1] 官網 https://docs.docker.com/engine/install/centos/

[2] https://linuxconfig.org/how-to-install-docker-in-rhel-8

[3] http://blog.stepbystep.tw/blog/post/119991918

[4] https://blog.hellosanta.com.tw/%E7%B6%B2%E7%AB%99%E8%A8%AD%E8%A8%88/%E4%BC%BA%E6%9C%8D%E5%99%A8/%E6%95%99%E4%BD%A0%E4%B8%80%E6%AC%A1%E5%AD%B8%E6%9C%83%E5%AE%89%E8%A3%9D-docker-%E9%96%8B%E5%A7%8B%E7%8E%A9%E8%BD%89-container%C2%A0%E5%AE%B9%E5%99%A8%E4%B8%96%E7%95%8C

[5] https://fedora.pkgs.org/30/docker-ce-stable-x86_64/containerd.io-1.2.13-3.2.fc30.x86_64.rpm.html

[6] Docker hub https://hub.docker.com/

[7] man docker-run

[8] IT邦邦忙 https://ithelp.ithome.com.tw/articles/10199339

你可能感興趣的文章

[Linux] mongodb 初步--1/3 我使用mongo 的一些大小事:安裝及基本操作

[Centos6] php5.3升級為php5.6 Centos6 + php5.6 升級

PHP for sphinx 函式庫安裝 PECL/sphinx PHP>= 5.2.2 已經能原生支援 sphinx,可是預設的沒有裝,我們得自己裝才能用

[Linux] 刪除last/lastb登出入記錄 linux shell的登出入記錄

[Linux] mongodb 初步--2/3 我使用mongo 的一些大小事:叢集

[CentOS] 新增修改及刪除使用者 新增、修改、刪除使用者和群組

[SELINUX] php 呼叫系統程式(使用exec, system等)執行網路服務 這近想透過PHP呼叫系統的程式來執行網路的服務,怎麼測試都失敗…

[CENTOS7] 安裝中文字型 如何在Centos7上安裝和移除中文字型?

[CENTOS7] 安裝rrdtool+RRDs+PERL 要讓perl繪圖,安裝rrdtool和RRDs

使用RRDTOOL來繪製流量圖 使用RRDTOOL來製作流量圖的簡略說明

我有話要說


限制:留言最高字數1000字,超過部分會被截掉。請注意:留言不可帶有網址,會被濾掉。 限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。

訪客留言

[無留言]

隨機好文

SELinux 常用指令和檔案 在Redhat系列中,Centos5以後加入了selinux,他並沒有這麼可怕,不必每次看到Selinux ,就想把他

NETCRAFT發現你的網站及作業系統 NETCRAFT可以發現你的網站及作業系統

世紀帝國征服者新版本--被遺忘的帝國 世紀帝國征服者新版本--被遺忘的帝國 世紀二代的征服者是精典遊戲中的精典,aofe更好玩...

魔球中小女孩唱的歌 The show 魔球中小女孩唱的歌 The show

精讚的版面變化 ▓此文僅作為舊文的記錄▓ 這篇文章為了紀念改版完成而撰寫。 原本的部落格是民國97年的作品,那時還是用舊有的技術來寫,很