文档

安装Docker并使用

更新时间:

如果您需要在云服务器ECS上安装Docker,可使用阿里云提供的Docker镜像源快速部署。本文主要介绍如何在 Linux系统的ECS中安装Docker、使用Docker制作镜像以及通过docker-compose更加高效地构建、部署和管理应用程序。

自动安装Docker(使用扩展程序

使用限制

当您的操作系统满足以下条件时,您可以使用扩展程序快速安装Docker,无需手动执行命令安装。什么是扩展程序?

  • ECS实例必须处于运行中状态。

  • ECS实例已分配公网IP地址或绑定弹性公网IP(EIP)。具体操作,请参见绑定和解绑弹性公网IP

  • ECS实例已安装云助手,并且云助手状态为正常

  • 操作系统

    • Alibaba Cloud Linux 3/2

    • CentOS 7.9/7.8/7.7

    • Ubuntu 22/20/18

    • Debian 12/11.1/11.5/11.6/11.7/11.8/11.9

    • Windows Server 2022/2019

操作步骤

  1. 登录ECS管理控制台,找到目标ECS实例,单击实例ID,进入实例详情页。

  2. 选择定时与自动化任务 > 安装/卸载扩展程序 > 安装扩展程序

    image

  3. 安装扩展程序对话框,要安装的扩展程序选择Docker社区版,然后单击下一步,按照界面提示完成操作。

    image

    当任务状态为已完成时,说明Docker已安装。

    image

手动安装Docker

说明

您也可以点击一键部署通过ROS快速安装Docker并启用,无需手动执行命令。

准备工作

已创建一台基础ECS实例,并满足以下配置。如何创建ECS实例?

  • 操作系统:Alibaba Cloud Linux 3 64位、Alibaba Cloud Linux 2 64位、CentOS 7.x 64位、CentOS 8.x 64位、Ubuntu 22/20、Debain 11/12

  • 网络类型:专有网络VPC

  • IP地址:实例已分配公网IP地址或绑定弹性公网IP(EIP)。如何为ECS实例开通公网?

  • 安全组:入方向放行80、22端口。具体操作,请参见如何添加安全组规则放行端口

操作步骤

  1. 远程连接ECS实例。

    具体操作,请参见通过密码或密钥认证登录Linux实例

  2. 安装Docker。

    Alibaba Cloud Linux 3

    1. 运行以下命令,添加docker-ce的dnf源。

      sudo dnf config-manager --add-repo=https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    2. 运行以下命令,安装Alibaba Cloud Linux 3专用的dnf源兼容插件。

      sudo dnf -y install dnf-plugin-releasever-adapter --repo alinux3-plus
    3. 运行以下命令,安装Docker。

      sudo dnf -y install docker-ce --nobest
      说明

      安装docker过程中如有问题请参考常见问题

    Alibaba Cloud Linux 2

    1. 运行以下命令,下载docker-ce的yum源。

      sudo wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    2. 运行以下命令,安装Alibaba Cloud Linux 2专用的yum源兼容插件。

      sudo yum install yum-plugin-releasever-adapter --disablerepo=* --enablerepo=plus
    3. 运行以下命令,安装Docker。

      sudo yum -y install docker-ce

    CentOS 7.x

    1. 运行以下命令,下载docker-ce的yum源。

      sudo wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    2. 运行以下命令,安装Docker。

      sudo yum -y install docker-ce

    CentOS 8.x

    1. 切换CentOS 8源地址。

      CentOS 8操作系统版本结束了生命周期(EOL),按照社区规则,CentOS 8的源地址http://mirror.centos.org/centos/8/内容已移除,您在阿里云上继续使用默认配置的CentOS 8的源会发生报错。如果您需要使用CentOS 8系统中的一些安装包,则需要手动切换源地址。具体操作,请参见CentOS 8 EOL如何切换源?

    2. 运行以下命令,安装DNF。

      sudo yum -y install dnf
    3. 运行以下命令,安装Docker存储驱动的依赖包。

      sudo dnf install -y device-mapper-persistent-data lvm2
    4. 运行以下命令,添加稳定的Docker软件源。S

      sudo dnf config-manager --add-repo=https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    5. 运行以下命令,检查Docker软件源是否已添加。

      sudo dnf list docker-ce

      出现如下图所示回显,表示Docker软件源已添加。

      image..png

    6. 运行以下命令安装Docker。

      sudo dnf install -y docker-ce --nobest

    Ubuntu(18/22/20)/Debian(11/12)

    1. 更新软件包列表。

      sudo apt update
    2. 安装Docker所需依赖包。

      sudo apt-get -y install ca-certificates curl
    3. 创建/etc/apt/keyrings目录,并下载Docker的官方GPG密钥到该目录。

      Ubuntu 18/22/20

      sudo install -m 0755 -d /etc/apt/keyrings
      sudo curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
      sudo chmod a+r /etc/apt/keyrings/docker.asc

      Debian 11/12

      sudo install -m 0755 -d /etc/apt/keyrings
      sudo curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
      sudo chmod a+r /etc/apt/keyrings/docker.asc
    4. 将Docker仓库添加到系统的软件源列表。

      Ubuntu 18/22/20

      echo \
        "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] http://mirrors.aliyun.com/docker-ce/linux/ubuntu \
        $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
        sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

      Debian 11/12

      echo \
        "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] http://mirrors.aliyun.com/docker-ce/linux/debian \
        $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
        sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    5. 更新软件包列表。

      sudo apt update
    6. 安装Docker。

      sudo apt-get install -y docker-ce docker-ce-cli containerd.io
  3. 查看docker版本信息。

    docker -v

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

    image..png

  4. 启动Docker守护进程并设置开机自启动。

    • 执行以下命令,启动Docker服务,并设置开机自启动。

      sudo systemctl start docker
      sudo systemctl enable docker
    • 执行以下命令,查看Docker是否启动。

      sudo systemctl status docker

      如下图回显所示,表示Docker已启动。

      image..png

Docker基本使用

下文只列出Docker基本用法,更详细的操作命令,请参见Docker官网

  • 您可以通过如下命令管理Docker守护进程。

    sudo systemctl start docker     #运行Docker守护进程
    sudo systemctl stop docker      #停止Docker守护进程
    sudo systemctl restart docker   #重启Docker守护进程
    sudo systemctl enable docker    #设置Docker开机自启动
    sudo systemctl status docker    #查看Docker的运行状态
  • 管理镜像

    本文以阿里云仓库的Apache镜像为例,介绍如何使用Docker管理镜像。

    • 拉取镜像。

      sudo docker pull registry.cn-hangzhou.aliyuncs.com/lxepoo/apache-php5
    • 修改标签。如果镜像名称较长,您可以修改镜像标签以便记忆区分。

      sudo docker tag registry.cn-hangzhou.aliyuncs.com/lxepoo/apache-php5:latest aliweb:v1
    • 查看已有镜像。

      sudo docker images
    • 强制删除镜像。

      sudo docker rmi -f registry.cn-hangzhou.aliyuncs.com/lxepoo/apache-php5
  • 管理容器

    重要
    • 下文的<镜像ID>可通过docker images命令查询。

    • 如果您要在容器内部运行相关命令,您可以通过在容器中运行cat /etc/os-release提前确认您的容器操作系统类型及版本,以便使用合适的命令来完成您的操作。

    • 启动一个容器。

      您可以通过守护模式或者交互模式启动一个容器。

      说明
      • 使用守护模式启动的容器,退出容器后容器会保持运行状态。

      • 使用交互模式启动的容器,退出容器后容器状态会变成Exited,您可以使用sudo docker start <容器ID>命令使容器恢复运行状态。

      使用守护模式启动容器

      sudo docker run -d --name <容器名> <镜像ID>

      使用交互模式启动容器

      # 使用交互模式启动一个新容器。
      sudo docker run -it <镜像ID> /bin/bash
    • 查看容器ID。

      sudo docker ps -a
    • 启动停止状态的容器。

      sudo docker start <容器ID>
    • 在一个运行中的容器中执行命令。

      sudo docker exec -it <容器ID> /bin/bash
      说明

      如果要退出容器,可以执行exit命令。

使用Docker制作镜像

本步骤指导如何通过Dockerfile定制制作一个简单的Nginx镜像。

  1. 执行以下命令,拉取镜像。本示例以拉取阿里云仓库的Apache镜像为例。

    sudo docker pull registry.cn-hangzhou.aliyuncs.com/lxepoo/apache-php5
  2. 修改镜像名称标签,便于记忆。

    sudo docker tag registry.cn-hangzhou.aliyuncs.com/lxepoo/apache-php5:latest aliweb:v1
  3. 执行以下命令,新建并编辑Dockerfile文件。

    1. 执行以下命令,新建并编辑Dockerfile文件。

      vim Dockerfile
    2. i进入编辑模式,并添加以下内容,改造原镜像。

      #声明基础镜像来源。
      FROM aliweb:v1
      #声明镜像拥有者。
      MAINTAINER DTSTACK
      #RUN后面接容器运行前需要执行的命令,由于Dockerfile文件不能超过127行,因此当命令较多时建议写到脚本中执行。
      RUN mkdir /dtstact
      #开机启动命令,此处最后一个命令需要是可在前台持续执行的命令,否则容器后台运行时会因为命令执行完而退出。
      ENTRYPOINT ping www.aliyun.com
    3. Esc键,输入:wq并按Enter键,保存并退出Dockerfile文件。

  4. 执行以下命令,基于基础镜像nginx构建新镜像。

    命令格式为docker build -t <镜像名称>:<镜像版本> .命令末尾的.表示Dockerfile文件的路径,不能忽略。以构建新镜像aliweb:v2为例,则命令为:

    sudo docker build -t aliweb:v2 .
  5. 执行以下命令,查看新镜像是否构建成功。

    sudo docker images 

    如下图回显所示,表示构建成功。

    image..png

安装并使用docker-compose

docker-compose是Docker官方提供的用于定义和运行多个Docker容器的开源容器编排工具,可以使用YAML文件来配置应用程序需要的所有服务,然后使用docker-compose运行命令解析YAML文件配置,创建并启动配置文件中的所有Docker服务,具有运维成本低、部署效率高等优势。

关于docker-compose的更多信息,请参见Docker官网

重要

仅Python 3及以上版本支持docker-compose,并请确保已安装pip。

安装docker-compose

  1. 运行以下命令,安装setuptools。

    sudo pip3 install -U pip setuptools
  2. 运行以下命令,安装docker-compose。

    sudo pip3 install docker-compose
  3. 运行以下命令,验证docker-compose是否安装成功。

    docker-compose --version

    如果回显返回docker-compose版本信息,表示docker-compose已安装成功。

使用docker-compose部署应用

下文以部署WordPress为例,介绍如何使用docker-compose部署应用。

  1. 创建并编辑docker-compose.yaml文件。

    1. 运行以下命令,创建docker-compose.yaml文件。

      sudo vim docker-compose.yaml
    2. (可选)配置镜像加速服务。

      由于运营商网络原因,会导致您拉取Docker Hub镜像变慢,甚至下载失败。您可以使用阿里云容器镜像服务ACR提供的官方镜像加速器,加速官方镜像的下载。具体操作,请参见官方镜像加速

    3. 按下i键,进入编辑模式,新增以下内容。

      本示例以安装WordPress为例。

      version: '3.1'             # 版本信息
      
      services:
      
        wordpress:               # 服务名称         
          image: wordpress       # 镜像名称
          restart: always        # docker启动,当前容器必启动
          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        # docker启动,当前容器必启动
          ports:
             - 3306:3306         # 映射端口
          environment:           # 环境变量
            MYSQL_DATABASE: wordpress
            MYSQL_USER: wordpress
            MYSQL_PASSWORD: 123456
            MYSQL_RANDOM_ROOT_PASSWORD: '1'
          volumes:               # 卷挂载路径
            - db:/var/lib/mysql
      
      volumes:
        wordpress:
        db:
    4. 按下Esc键,退出编辑模式,然后输入:wq保存并退出。

  2. 执行以下命令,启动应用。

    sudo env "PATH=$PATH" docker-compose up -d
  3. 在浏览器中输入http://云服务器ECS实例的公网IP,即可进入WordPress配置页面,您可以根据界面提示配置相关参数后,访问WordPress。

常见问题

Linux ECS实例或容器中执行systemctl相关命令报错

  • 问题现象:在Linux系统实例或容器中执行systemctl命令出现类似如下报错:

    • System has not been booted with systemd as init system (PID 1). Can't operate.

    • Failed to get D-Bus connection: xxx xxx.

  • 可能原因:没有使用systemd作为其初始化系统(init system)。

  • 解决方案:您可以尝试使用service命令来进行服务管理。例如,将sudo systemctl restart sshd.service,替换为sudo service sshd restar

Linux ECS实例中执行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。

Linux ECS实例中执行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即可。

说明

如果您不想使用阿里提供的可用源,您可以自行注释掉原有/etc/yum.repos.d/CentOS-Base.repo中不可用的软件源地址,然后再尝试安装docker

相关文档