手动部署Docker

Docker是一个开源的应用容器引擎,提供了容器的自动化打包、分发和运行的工具和服务,具有隔离性好、可移植性强、易于管理等优势。本文主要介绍如何在Linux轻量应用服务器中手工部署Docker,并提供了Docker常用操作、使用Docker制作镜像的流程及其安装并使用docker-compose部署WordPress。

说明
  • 您也可以通过应用镜像快速部署Docker:

    • 如果您尚未创建轻量应用服务器,建议您通过应用镜像快速部署Docker。具体操作,请参见快速部署Docker(使用应用镜像)

    • 如果已创建轻量应用服务器,您也可以通过重置系统时选择Docker应用镜像部署Docker,但重置系统会清除轻量应用服务器上的磁盘数据,请您根据需要做好数据备份。具体操作,请参见重置系统

  • 关于Docker的更多信息,请参见Docker概述

准备工作

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

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

  • 防火墙:入方向放行80和22端口。具体操作,请参见防火墙设置

部署Docker

  1. 远程连接轻量应用服务器。具体操作,请参见远程连接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
      • 如果执行命令时,出现类似如下的报错信息,您需要执行sudo dnf clean packages清除软件包缓存后,重新安装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
      • 如果执行命令时,出现类似下图的报错信息,您需要注释/etc/yum.repos.d下的CentOS源,注释后重新安装docker-ce。

        adad566

    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进程管理

  • 启动Docker守护进程

    sudo systemctl start docker
  • 查看Docker的运行状态

    sudo systemctl status docker
  • 停止Docker守护进程

    sudo systemctl stop docker
  • 重启Docker守护进程

    sudo systemctl restart docker
  • 设置Docker开机自启动

    sudo systemctl enable 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. 在浏览器中输入https://轻量应用服务实例的公网IP,即可进入WordPress配置页面,您可以根据界面提示配置相关参数后,访问WordPress。

常见问题

在Linux实例或容器中执行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

相关文档

  • Docker的更多使用方法,请参见Docker官方文档

  • 使用Docker镜像。

    阿里云容器镜像服务ACR推出了制品中心,为容器开发者免费提供了来源于阿里云官方、龙蜥社区的安全可信容器基础镜像。部署Docker后,您可以直接使用制品中心的Docker容器镜像来实现特定业务需求,例如部署应用、开发环境、操作系统、AI/大数据学习框架等。

  • Docker镜像加速。

    您可以使用P2P加速功能提升镜像拉取速度,减少应用部署时间。具体操作,请参见在其他容器环境中使用P2P加速

  • 您可以在Docker中配置CLI来管理您的阿里云资源。具体操作,请参见在Docker中配置阿里云CLI

  • 您还可以选择使用阿里云容器镜像服务ACR,管理和运行容器化应用程序。