手动部署Docker

2025-11-11   访问量:1001


Docker是一个开源的应用容器引擎,提供了容器的自动化打包、分发和运行的工具和服务,具有隔离性好、可移植性强、易于管理等优势。本文主要介绍如何在Linux轻量应用服务器中安装和使用DockerDocker Compose。

说明

准备工作

  • 已创建Linux轻量应用服务器,并满足以下配置。具体操作,请参见创建轻量应用服务器

  • Linux轻量应用服务器入方向放行8022端口。具体操作,请参见防火墙设置

部署Docker

  1. 远程连接轻量应用服务器。具体操作,请参见远程连接Linux服务器

  2. 根据服务器的操作系统,选择对应的操作,部署Docker。

    Alibaba Cloud Linux 3

    Alibaba Cloud Linux 2

    CentOS 7.x

    CentOS 8.x

    Ubuntu

    Debian

    Fedora

    Red Hat

    Anolis OS

    在安装最新版本的Docker之前,请确保先卸载当前安装的Docker及其相关组件,避免潜在的安装冲突和兼容性问题。

    卸载旧版本的Docker

    1. 执行以下命令安装Docker社区版本。

      说明

      如果您使用的是非阿里云服务器,请将http://mirrors.cloud.aliyuncs.com替换为https://mirrors.aliyun.com

       

      #添加Docker软件包源sudo wget -O /etc/yum.repos.d/docker-ce.repo http://mirrors.cloud.aliyuncs.com/docker-ce/linux/centos/docker-ce.repo
      sudo sed -i 's|https://mirrors.aliyun.com|http://mirrors.cloud.aliyuncs.com|g' /etc/yum.repos.d/docker-ce.repo#Alibaba Cloud Linux3专用的dnf源兼容插件sudo dnf -y install dnf-plugin-releasever-adapter --repo alinux3-plus#安装Docker社区版本,容器运行时containerd.io,以及Docker构建和Compose插件sudo dnf -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin#启动Dockersudo systemctl start docker#设置Docker守护进程在系统启动时自动启动sudo systemctl enable docker
    2. 通过查看Docker版本命令,验证Docker是否安装成功。

       

      sudo docker -v

      如下图回显信息所示,表示Docker已安装成功。image

配置镜像源

Docker Hub镜像拉取受网络影响时,可配置Docker镜像源提升速度。但请注意,镜像源配置不适用于docker search命令,因为它直接查询Docker Hub。

说明

  • 要配置阿里云容器镜像服务ACR镜像加速器,请登录容器镜像服务控制台,在左侧导航栏选择镜像工具 > 镜像加速器,在镜像加速器页面获取加速器地址

  • 网络不稳定可能导致加速器无法成功拉取指定版本的容器镜像。如需进一步解决方案,请参阅Docker Hub拉取失败解决方案

  1. 您需要编辑Docker的配置文件/etc/docker/daemon.json,如果该文件不存在,您需要创建它。

     

    {
       "registry-mirrors": ["<加速器地址>"]}            
  2. 完成编辑后,保存文件并退出。然后,为了使新的配置生效,您需要重启Docker服务。这可以通过执行以下命令来完成。

    重要

    重启Docker会使您的Docker服务短暂不可用,请谨慎操作。

     

    sudo systemctl restart docker

创建简单Web程序镜像

以下是创建基于Nginx镜像的简单Web程序镜像。

  1. 构建Web程序镜像。

     

    #拉取Nginx镜像sudo docker pull nginx:latest#创建Dockerfile设置Nginx作为基础镜像,并在Web服务器的根目录创建一个显示Hello World!的index.html文件。sudo tee Dockerfile <<-'EOF'
    FROM nginx:latest
    RUN echo 'Hello World!' > /usr/share/nginx/html/index.html
    EOF#构建镜像,镜像名称为hello-worldsudo docker build . -t hello-world:latest
  2. 启动Web程序镜像的容器,并且命名容器名称为hello-world

     

    sudo docker run -d -p 80:80 --name hello-world hello-world:latest
  3. 执行curl http://localhost命令,验证Web程序是否正确显示Hello World!

安装Docker Compose

如果您参考的本文安装Docker,那么Compose插件将默认安装到您的实例中。您可以通过如下命令查看。

 

sudo docker compose version

预期输出(vN.N.N代表Compose的版本):Docker Compose version vN.N.N

如果您的Compose插件未成功安装或您需要使用Compose独立版(docker-compose)可参考下面内容。

重要

  • 使用Compose独立版时,命令中间要用连字符,比如docker-compose up

  • 使用Compose插件时,命令中间不用连字符,比如docker compose up

Compose插件

Compose独立版

Alibaba Cloud Linux 3、CentOS 8.x、Fedora

Ubuntu、Debian

Alibaba Cloud Linux 2、CentOS 7.x、Red Hat、Anolis OS

 

sudo dnf -y install docker-compose-plugin

使用查看Compose版本命令,验证Compose是否安装成功。

 

sudo docker compose version

使用Docker Compose部署应用

以下是创建基于WordPress镜像的Web程序。

  1. 创建Compose编排文件并启动WordPress服务。

     

    #创建编排文件,添加Mysql与WordPresssudo tee docker-compose.yaml <<-'EOF'version: '3.1'services:
     wordpress:
       image: wordpress
       restart: always
       ports:
         - "80:80"
       environment:      #数据库地址
         WORDPRESS_DB_HOST: db      #数据库用户名
         WORDPRESS_DB_USER: wordpress      #数据库密码
         WORDPRESS_DB_PASSWORD: 123456      #数据库名称
         WORDPRESS_DB_NAME: wordpress
       volumes:
         - wordpress:/var/www/html

     db:
       image: mysql:5.7
       restart: always
       ports:
         - "3306:3306"
       environment:      #数据库名称
         MYSQL_DATABASE: wordpress      #数据库用户名
         MYSQL_USER: wordpress      #数据库密码
         MYSQL_PASSWORD: 123456      #数据库ROOT用户密码
         MYSQL_RANDOM_ROOT_PASSWORD: '1'
       volumes:
         - db:/var/lib/mysql

    volumes:
     wordpress:
     db:
    EOF#启动服务容器。sudo env "PATH=$PATH" docker compose up -d
  2. 在浏览器中输入https://轻量应用服务实例的公网IP,即可进入WordPress配置页面,您可以根据界面提示配置相关参数后,访问WordPress。

常见问题

http://mirrors.cloud.aliyuncs.com无法访问

  • 问题现象:地址http://mirrors.cloud.aliyuncs.com无法访问。

  • 可能原因:网络不稳定。

  • 解决方案:请将http://mirrors.cloud.aliyuncs.com替换为https://mirrors.aliyun.com

    说明

    使用https://mirrors.aliyun.com需要您的实例已开通公网。如您不清楚如何开通公网,请参见开通公网

执行dnf config-manager命令报错

  • 问题现象:在Linux系统实例中执行dnf config-manager命令出现如下报错:

     

    /usr/lib/python3/dist-packages/dnf/const.py:22: DeprecationWarning: The distutils package is deprecated and slated for removal in Python 3.12. Use setuptools or check PEP 632 for potential alternatives.
  • 可能原因:dnf版本太旧导致安装失败。

  • 解决方案:您可以尝试使用sudo dnf update dnf来更新dnf软件包到最新状态,然后再尝试安装Docker。

执行dnf install docker-ce命令报错

  • 问题现象:在Linux系统实例中执行dnf -y install docker-ce命令出现如下报错:

     

    (8-9/12): docker-ce-24.0.7-1.el8.x86_64.rpm 38% [================- ] 8.2 MB/s | 38 MB 00:07 ETA
    The downloaded packages were saved in cache until the next successful transaction.
    You can remove cached packages by executing 'dnf clean packages'.
    Error: Error downloading packages:
    containerd.io-1.6.26-3.1.el8.x86_64: Cannot download, all mirrors were already tried without success.
  • 可能原因:软件包缓存太旧导致安装失败。

  • 解决方案:您可以尝试使用sudo dnf clean packages清理软件包缓存之后,再尝试安装docker

  • 问题现象:在Linux系统实例中执行dnf -y install docker-ce命令出现如下报错:

     

    CentOS- Base                                                                                                                         0.0  B/s |   0  B     00:30    
    Errors during downloading metadata for repository 'base':
     - Curl error (6): Couldn't resolve host name for http://mirror.centos.org/os/BaseOS/x86_64/os/repodata/repomd.xml [Could not resolve host: mirror.aliyuncs.com]
     - Curl error (28): Timeout was reached for http://mirror.centos.org/os/BaseOS/x86_64/os/repodata/repomd.xml [Connection timed out after 30000 milliseconds]
     - Curl error (6): Couldn't resolve host name for http://mirror.centos.org/os/BaseOS/x86_64/os/repodata/repomd.xml [Could not resolve host: mirror.cloud.aliyuncs.com]
    Error: Failed to download metadata for repo 'base': Cannot download repomd.xml: Cannot download repodata/repomd.xml: All mirrors were tried
  • 可能原因:使用了已下线的CentOS 8软件源。

  • 解决方案:可参考如下步骤,使用阿里提供的可用源替换已下线的CentOS 8软件源。

     

    # 备份过期软件源。sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup# 下载阿里提供的CentOS-Base.repo 到 /etc/yum.repos.d/。wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.aliyuncs.com/repo/Centos-vault-8.5.2111.repo# 将阿里源中的软件源地址替换为ECS可访问的源地址。sudo sed -i 's/mirrors.cloud.aliyuncs.com/url_tmp/g' /etc/yum.repos.d/CentOS-Base.repo && sudo sed -i 's/mirrors.aliyun.com/mirrors.cloud.aliyuncs.com/g' /etc/yum.repos.d/CentOS-Base.repo && sudo sed -i 's/url_tmp/mirrors.aliyun.com/g' /etc/yum.repos.d/CentOS-Base.repo# 清理旧缓存并生成缓存。sudo yum clean all && sudo yum makecache

    执行完上述步骤后再尝试安装docker即可。

相关文档


热门文章
更多>