# Rocky Linux9 上安裝 Docker
資料來源:https://idroot.us/install-docker-rocky-linux-9/#:~:text=sudo%20dnf%20install%20docker-ce%20docker-ce-cli%20containerd.io%20docker-compose-plugin%20--allowerasing,sudo%20systemctl%20enable%20docker%20sudo%20systemctl%20start%20docker
在本文中,我們展示如何在 Rocky Linux 9 上安裝 Docker CE。Docker CE是一個免費的開源容器化平臺,Docker使用Linux內核在作業系統之上創建容器、部署和運行應用程式。
本文假設您至少具有Linux的基本知識,知道如何使用shell。安裝非常簡單,大部分都是以 root 權限執行,若是一般使用者則需具備sudo權限,在命令中添加 'sudo'以獲得root權限。以下將展示如何在 Rocky Linux 上逐步安裝 Docker 容器,假設 user1 具備sudo權限。
## 1.系統更新
```
user1# sudo dnf check-update
user1# sudo dnf install dnf-utils
user1# sudo dnf install device-mapper-persistent-data lvm2
```
## 2.安裝 Docker
```
.加入docker套件來源庫
user1# sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
.安裝docker套件
user1# sudo dnf install docker-ce docker-ce-cli containerd.io docker-compose-plugin --allowerasing
```
安裝完後會在Linux系統上建立一個user group "docker",可供後續使用。
## 3.啟動 Docker
docker一般都透過root權限執行,透過systemctl來啟動。
```
root# systemctl enable docker
root# systemctl start docker
```
若要讓另一個具有sudo權限的user來執行docker,則需加入docker group
```
user1# sudo usermod -aG docker $(whoami)
user1# sudo usermod -aG docker user1
user1# newgrp docker <==加入docker group
```
驗證docker是否安裝完成,若沒有錯誤訊息表示成功安裝。
```
user1# docker version
```
## 使用 rootless 模式
docker一般都透過root權限執行,但以root權限執行可能會損害系統,考量到安全一般會以非root權限執行,此時需先停掉系統的docker服務:
```
root# systemctl stop docker
root# systemctl disable docker
root# reboot
```
重開機後,以root權限執行以下指令,載入ip_tables模組:
```
root# sh -eux <<EOF
# Load ip_tables module
modprobe ip_tables
EOF
```
再將要使用docker的使用者(EX:user2),啟用其個人的systemctl執行權限
```
root# loginctl enable-linger user2
```
登出root,之後改以一般user登入,設定環境變數XDG_RUNTIME_DIR,並加入.bashrc,再進行docker rootless自動設定:
```
user2# echo "export XDG_RUNTIME_DIR=/run/user/$UID" >> ~/.bashrc
user2# export XDG_RUNTIME_DIR=/run/user/$UID
user2# dockerd-rootless-setuptool.sh install
```
完成後會看到最後一行為
```
export DOCKER_HOST=unix:///run/user/$UID/docker.sock
```
代表設定成功,其中/run/user/$UID/docker.sock為這個user使用的sock窗口,每個使用者的執行窗口(sock)都不相同。
要注意的是,此時有設定可使用docker的使用者,在系統重開機後,都會自動啟動個人的docker服務,無論有無建立容器(container)都會佔用記憶體。
## 安裝 portainer
在管理Docker容器時,portainer是很好的圖形介面管理程式,其運作方式也是透過docker容器,因此安裝及維護相當容易。https://www.portainer.io/
```
1. 建立 portainer 用的 volume
docker volume create portainer_data
2. 安裝並執行 portainer
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
```
若是以rootless方式執行portainer,需將docker.sock設定到執行的窗口,修改如下:
```
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/run/user/$UID/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
```