開始輸入,可搜尋發票、服務、域名、工單,以及 更多...
本文介紹如何在 Linux 伺服器上安裝 Docker 和 Docker Compose:使用 Docker 官方軟體源,分別給出 Debian/Ubuntu 與 Rocky Linux/AlmaLinux 的命令,並演示安裝後的基礎配置、執行第一個容器、配置映象加速,以及 Docker 埠繞過防火牆這一常見安全問題。適用於 IMIDC VPS 與獨立伺服器,需要 64 位系統和 root 許可權。
系統自帶倉庫裡的 docker.io、podman-docker 等包與 Docker 官方的 docker-ce 會衝突。全新系統執行時提示“未安裝”屬正常。已有的映象和資料位於 /var/lib/docker,解除安裝這些包不會自動刪除它們。
# Debian / Ubuntu: remove distro packages that conflict with Docker CE
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do apt-get remove -y $pkg; done
# Rocky Linux / AlmaLinux
dnf remove -y docker docker-client docker-client-latest docker-common docker-latest \
docker-latest-logrotate docker-logrotate docker-engine podman runc
官方源比發行版倉庫更新更及時,並且包含 docker compose 外掛(Compose V2)。下面的命令通過 /etc/os-release 自動識別是 Debian 還是 Ubuntu 以及版本代號,複製貼上即可。
apt-get update
apt-get install -y ca-certificates curl
install -m 0755 -d /etc/apt/keyrings
. /etc/os-release # sets $ID (debian/ubuntu) and $VERSION_CODENAME
curl -fsSL https://download.docker.com/linux/$ID/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/$ID $VERSION_CODENAME stable" \
> /etc/apt/sources.list.d/docker.list
apt-get update
apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
RHEL 系使用 Docker 提供的 rhel 倉庫,Rocky Linux 與 AlmaLinux 8/9 均可使用。首次安裝時會提示匯入 GPG 金鑰,確認指紋來自 Docker 後輸入 y。
dnf install -y dnf-plugins-core
dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
設定開機自啟並執行 hello-world 驗證。如果希望普通使用者無需 sudo 使用 docker,可將其加入 docker 組;但要注意 docker 組成員實際上擁有 root 級許可權,只應授予可信使用者。
systemctl enable --now docker
docker version
docker compose version
docker run --rm hello-world
# Optional: allow a normal user to run docker (this is equivalent to root access)
usermod -aG docker deploy
# log out and log in again as "deploy", then test:
docker ps
新版 Compose 是 docker compose(中間是空格),配置檔案推薦命名為 compose.yaml。下面用 Nginx 映象起一個網站容器,埠只繫結到 127.0.0.1,後續可再用宿主機 Nginx 反向代理並配置 HTTPS(參見“Nginx 反向代理”教程)。
mkdir -p /opt/web && cd /opt/web
cat > compose.yaml <<'EOF'
services:
web:
image: nginx:stable
ports:
- "127.0.0.1:8080:80"
volumes:
- ./html:/usr/share/nginx/html:ro
restart: unless-stopped
EOF
mkdir -p html && echo "Hello from Docker" > html/index.html
docker compose up -d
docker compose ps
curl http://127.0.0.1:8080
docker compose logs -f web # Ctrl+C to stop following
IMIDC 香港、日本、韓國等地區的伺服器通常可以直接訪問 Docker Hub,一般無需加速。若拉取映象很慢,可在 daemon.json 裡配置你信任的映象站(registry-mirrors 只對 Docker Hub 生效)。同時建議限制容器日誌大小,避免日誌撐滿磁碟。匿名拉取有頻率限制,頻繁拉取時請先 docker login。
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<'EOF'
{
"registry-mirrors": ["https://mirror.example.com"],
"log-driver": "json-file",
"log-opts": { "max-size": "20m", "max-file": "3" }
}
EOF
systemctl restart docker
docker info | grep -A2 "Registry Mirrors"
# Avoid anonymous Docker Hub pull limits
docker login
journalctl -u docker -n 50 檢視報錯。Docker 會自己寫入 iptables/nftables 規則來發布埠,這些規則優先於 ufw 的規則,所以即使 ufw 沒有放行 8080,-p 8080:80 釋出的埠依然能被公網訪問。推薦做法是隻繫結 127.0.0.1,由 Nginx 對外;如果必須對外發布,則在 DOCKER-USER 鏈中限制來源 IP。
# 1) Recommended: publish only on localhost and expose the app through Nginx
# compose.yaml -> ports: - "127.0.0.1:8080:80"
# 2) Restrict a published port in the DOCKER-USER chain
# (only 198.51.100.20 may reach container port 8080 via eth0)
iptables -I DOCKER-USER -i eth0 -p tcp -m conntrack --ctorigdstport 8080 --ctdir ORIGINAL \
! -s 198.51.100.20 -j DROP
iptables -L DOCKER-USER -n --line-numbers
# 3) firewalld (Rocky/AlmaLinux): Docker adds its own "docker" zone
firewall-cmd --get-active-zones
firewall-cmd --zone=docker --list-all
# After reloading or restarting the firewall, restart Docker to rebuild its rules
systemctl restart docker
-p 3306:3306 暴露到公網,這是伺服器被入侵和勒索的常見原因。當前使用者不在 docker 組,或加入後沒有重新登入。執行 id 確認組成員,重新登入 SSH 後再試;也可以直接用 root 或 sudo 執行。
docker-compose(帶橫線)是已停止維護的 V1 獨立程式;docker compose 是 V2 外掛,隨 docker-compose-plugin 安裝,命令引數基本相容,新專案請統一使用 V2。
過載 firewalld 或清空 iptables 會刪除 Docker 寫入的 NAT 規則。執行 systemctl restart docker 讓 Docker 重新生成規則即可。
如果按以上步驟操作後問題仍未解決,請提交工單聯絡 IMIDC 7×24 技術支援,並附上伺服器 IP、系統版本、執行過的命令和完整報錯資訊,方便工程師快速定位。