阿里云国际代理商:轻量应用服务器最佳实践-手动部署Docker

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

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

  • 如果您希望快速部署Docker环境。具体操作,请参见快速部署Docker。

准备工作

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

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

部署Docker

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

  2. 根据服务器的操作系统,选择对应的操作,部署Docker。具体操作系统与相对应操作全攻略可看官方文档。

    配置镜像源

    由于运营商网络原因,从Docker Hub拉取镜像会失败。配置镜像加速器可解决该问题。

    重要

    docker search命令会直接查询Docker Hub,因此会执行失败。

    1. 登录容器镜像服务控制台,在左侧导航栏选择镜像工具 > 镜像加速器,在镜像加速器页面获取加速器地址

    2. 编辑Docker配置文件/etc/docker/daemon.json。若文件不存在,先创建。

      {
          "registry-mirrors": ["<加速器地址>"]
      }            
    3. 重启Docker服务应用新配置。

      sudo systemctl restart docker

    使用Docker快速部署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-world
      sudo 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

    Alibaba Cloud Linux、CentOS、Red Hat、Anolis、Fedora:

    sudo yum -y install docker-compose-plugin

    Ubuntu、Debian:

    sudo apt-get -y install docker-compose-plugin
    
    

    使用Docker Compose部署应用

    1. 创建编排文件docker-compose.yaml

      #创建编排文件,添加Mysql与WordPress
      sudo tee docker-compose.yaml <<-'EOF'
      version: '3.1'
      
      services:
        wordpress:
          image: wordpress
          restart: always
          ports:
            - "80:80"
          environment:
            #数据库地址
            WORDPRESS_DB_HOST: wordpress_db
            #数据库用户名
            WORDPRESS_DB_USER: wordpress
            #数据库密码
            WORDPRESS_DB_PASSWORD: ${WORDPRESS_DB_PASSWORD}
            #数据库名称
            WORDPRESS_DB_NAME: wordpress
          volumes:
            - wordpress:/var/www/html
      
        db:
          image: mysql:5.7
          restart: always
          container_name: wordpress_db
          environment:
            #数据库名称
            MYSQL_DATABASE: wordpress
            #数据库用户名
            MYSQL_USER: wordpress
            #数据库密码
            MYSQL_PASSWORD: ${WORDPRESS_DB_PASSWORD}
            #数据库ROOT用户密码
            MYSQL_RANDOM_ROOT_PASSWORD: ${WORDPRESS_DB_PASSWORD}
          volumes:
            - db:/var/lib/mysql
      
      volumes:
        wordpress:
        db:
      EOF
    2. 在浏览器中输入https://轻量应用服务实例的公网IP,即可进入WordPress配置页面,您可以根据界面提示配置相关参数后,访问WordPress。

      常见问题

      配置了镜像加速镜像还是拉取不到

      由于运营商网络等不稳定因素影响,镜像加速器无法保证成功拉取到指定版本的容器镜像。建议在生产环境中减少对DockerHub容器镜像的依赖,如果拉取失败请参见官方镜像加速。

      Docker配置非root用户权限

      默认情况下,Docker命令需要root权限(即使用sudo)。为了避免每次都输入sudo并遵循最小权限原则,应将当前用户添加到docker用户组。

      1. 将当前用户添加到docker组。

        sudo usermod -aG docker $USER
      2. 执行newgrp docker命令生效后。直接使用docker命令,无需添加sudo

      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即可。

相关新闻

联系我们

联系我们

电报:@yunshuguoji

邮件:yunshuguoji@outlook.com

工作时间:早上8:00-晚上11:00

认准电报
认准电报
分享本页
返回顶部