开始输入,可搜索发票、服务、域名、工单,以及 更多...
本文介绍如何在 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、系统版本、执行过的命令和完整报错信息,方便工程师快速定位。