Docker 安装与使用
添加 Docker CE 仓库
Section titled “添加 Docker CE 仓库”Docker 官方提供了适用于企业级 Linux 的软件仓库。以下步骤适用于 RHEL、CentOS Stream、AlmaLinux、Rocky Linux 等 EL 系发行版。
# 安装 DNF 插件(提供 config-manager)sudo dnf install -y dnf-plugins-core
# 添加 Docker 官方仓库sudo dnf config-manager --add-repo \ https://download.docker.com/linux/centos/docker-ce.reposudo yum install -y yum-utils
sudo yum-config-manager --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo安装 Docker
Section titled “安装 Docker”-
安装 Docker Engine、CLI 和容器运行时:
Terminal window sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-pluginTerminal window sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin -
启动 Docker 并设置开机自启:
Terminal window sudo systemctl enable --now docker -
验证安装:
Terminal window sudo docker versionsudo docker run hello-world -
(可选)将当前用户加入 docker 组,避免每次使用 sudo:
Terminal window sudo usermod -aG docker $(whoami)退出并重新登录后生效。
# 从 Docker Hub 拉取镜像docker pull nginx:latestdocker pull almalinux:9
# 搜索镜像docker search mariadb
# 查看本地镜像docker images# 前台运行,退出后自动删除docker run --rm -it almalinux:9 /bin/bash
# 后台运行 Nginxdocker run -d --name my-nginx -p 80:80 nginx:latest
# 带环境变量和卷挂载运行 MariaDBdocker run -d --name my-db \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=your_password \ -v /data/mysql:/var/lib/mysql \ mariadb:10.11# 查看正在运行的容器docker ps
# 查看所有容器docker ps -a
# 查看容器日志docker logs my-nginxdocker logs -f --tail 100 my-nginx
# 查看容器详细信息docker inspect my-nginx
# 查看容器资源使用docker stats# 停止容器docker stop my-nginx
# 启动已停止的容器docker start my-nginx
# 重启容器docker restart my-nginx
# 删除已停止的容器docker rm my-nginx
# 强制删除运行中的容器docker rm -f my-nginx
# 删除所有已停止的容器docker container prune
# 删除未使用的镜像docker image prune -a# 以交互终端进入容器docker exec -it my-nginx /bin/bash
# 在容器中执行命令docker exec my-nginx nginx -tDocker Compose
Section titled “Docker Compose”Docker Compose 用于定义和管理多容器应用。Docker CE 安装时自带 docker compose 子命令(V2 版本)。
编写 compose 文件
Section titled “编写 compose 文件”创建 docker-compose.yml:
services: web: image: nginx:latest ports: - "80:80" - "443:443" volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro - ./html:/usr/share/nginx/html:ro - certbot_data:/etc/letsencrypt:ro depends_on: - app restart: unless-stopped
app: build: ./app expose: - "8000" environment: - DATABASE_URL=mysql://root:changeme@db:3306/myapp depends_on: - db restart: unless-stopped
db: image: mariadb:10.11 environment: MYSQL_ROOT_PASSWORD: changeme MYSQL_DATABASE: myapp volumes: - db_data:/var/lib/mysql restart: unless-stopped
redis: image: redis:7-alpine restart: unless-stopped
volumes: db_data: certbot_data:管理 Compose 服务
Section titled “管理 Compose 服务”# 启动所有服务(后台)docker compose up -d
# 查看服务状态docker compose ps
# 查看日志docker compose logs -f
# 仅查看某个服务的日志docker compose logs -f app
# 重新构建并启动docker compose up -d --build
# 停止所有服务docker compose down
# 停止并删除数据卷docker compose down -v
# 扩展服务实例数docker compose up -d --scale app=3构建自定义镜像
Section titled “构建自定义镜像”编写 Dockerfile
Section titled “编写 Dockerfile”FROM almalinux:9-minimal
RUN microdnf install -y python3 python3-pip && \ microdnf clean all
WORKDIR /appCOPY requirements.txt .RUN pip3 install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
USER 1001
CMD ["python3", "-m", "uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]# 构建镜像docker build -t my-app:v1 .
# 给镜像打标签docker tag my-app:v1 registry.example.com/my-app:v1
# 推送到私有仓库docker push registry.example.com/my-app:v1存储驱动配置
Section titled “存储驱动配置”Docker 在 EL 系统上默认使用 overlay2 存储驱动,这是推荐的选项。
查看当前存储驱动
Section titled “查看当前存储驱动”docker info | grep "Storage Driver"配置 Docker 守护进程
Section titled “配置 Docker 守护进程”编辑或创建 /etc/docker/daemon.json:
{ "storage-driver": "overlay2", "data-root": "/data/docker", "log-driver": "json-file", "log-opts": { "max-size": "100m", "max-file": "3" }, "registry-mirrors": [ "https://mirror.example.com" ]}重启 Docker 使配置生效:
sudo systemctl restart docker迁移存储目录
Section titled “迁移存储目录”如需将 Docker 数据从默认的 /var/lib/docker 迁移到新位置:
-
停止 Docker:
Terminal window sudo systemctl stop docker -
复制现有数据:
Terminal window sudo rsync -aP /var/lib/docker/ /data/docker/ -
在
/etc/docker/daemon.json中设置data-root:{"data-root": "/data/docker"} -
启动 Docker 并验证:
Terminal window sudo systemctl start dockerdocker info | grep "Docker Root Dir" -
确认一切正常后,删除旧目录:
Terminal window sudo rm -rf /var/lib/docker
Docker 会自行管理 iptables 规则。如果使用 firewalld,需要注意以下事项:
# 允许容器间通信sudo firewall-cmd --permanent --zone=trusted --add-interface=docker0sudo firewall-cmd --reload常用维护命令
Section titled “常用维护命令”# 查看 Docker 磁盘使用docker system df
# 全面清理未使用资源docker system prune -a --volumes
# 导出容器为镜像docker commit my-nginx my-nginx-backup:latest
# 导出/导入镜像文件docker save -o nginx-backup.tar nginx:latestdocker load -i nginx-backup.tar