
# 手工部署Docker
#### 简介
本文介绍了如何在华为云上使用弹性云服务器的Linux实例手工部署Docker，并提供了Docker常用操作及简单的镜像制作过程。
表1Docker相关术语 
| 术语     | 解释                                                                                                         |
|:---|:---|
| Docker | Docker是开发人员和系统管理员使用容器开发、部署和运行应用程序的平台。                                                                      |
| 镜像     | Docker镜像是一个特殊的文件系统，除了提供容器运行时所需的程序、库、资源、配置等文件外，还包含了一些为运行时准备的配置参数（如匿名卷、环境变量、用户等）。镜像不包含任何动态数据，其内容在构建之后也不会被改变。 |
| 容器     | 镜像（Image）和容器（Container）的关系，就像是面向对象程序设计中的类和实例一样，镜像是静态的定义，容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。                  |
   
该指导以CentOS 7.5 64bit(40GiB)、Debian 12.0.0 64bit、Ubuntu 22.04操作系统为例，Docker要求64位的系统且内核版本至少为3.10。
![](https://support.huaweicloud.com/bestpractice-ecs/public_sys-resources/note_3.0-zh-cn.png)
您还可以选择Solution as Code一键式部署方式自动部署Docker Swarm集群，详细内容请参见[快速部署高可用的Docker Swarm集群](https://www.huaweicloud.com/solution/implementations/rapid-deployment-of-high-availability-docker-swarm-cluster.html)。
#### 前提条件
- 弹性云服务器需要绑定弹性公网IP，具体步骤参见[申请弹性公网IP](https://support.huaweicloud.com/usermanual-eip/eip_0008.html)。
- 弹性云服务器所在安全组添加了如下表所示的安全组规则，具体步骤参见[添加安全组规则](https://support.huaweicloud.com/usermanual-vpc/zh-cn_topic_0030969470.html)。
  表2安全组规则 
  | 方向  | 优先级 | 策略 | 类型   | 协议端口    | 源地址       |
  |:---|:---|:---|:---|:---|:---|
  | 入方向 | 1   | 允许 | IPv4 | TCP: 80 | 0.0.0.0/0 |
     
  
 
#### 部署Docker
请根据当前的操作系统，查看并执行对应的操作步骤。
- [CentOS 7.5]
  1. 登录弹性云服务器。 具体操作请参见[Linux ECS登录方式概述](https://support.huaweicloud.com/usermanual-ecs/zh-cn_topic_0013771089.html)。
     
  
  2. 添加yum源。
     ```
     yum install epel-release -y
     yum clean all
     ```
     
  
  3. 安装yum-utils。
     ```
     yum install -y yum-utils device-mapper-persistent-data lvm2
     ```
     
  
  4. 设置docker yum源。
     ```
     yum-config-manager --add-repo https://mirrors.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo
     sed -i 's+download.docker.com+mirrors.huaweicloud.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
     ```
     
  
  5. 安装并运行Docker。
     ```
     yum -y install docker-ce
     systemctl enable docker
     systemctl start docker
     ```
     
  
  6. 检查安装结果。
     ```
     docker --version
     ```
     回显如下类似信息，表示Docker安装成功。
     ```
     Docker version 26.1.4, build 5650f9b
     ```
     
   
- [Debian 12.0.0]
  1. 登录弹性云服务器。 具体操作请参见[Linux ECS登录方式概述](https://support.huaweicloud.com/usermanual-ecs/zh-cn_topic_0013771089.html)。
     
  
  2. 更新软件包列表。
     ```
     sudo apt-get update
     ```
     
  
  3. 添加Docker软件包源。
     ```
     sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
     sudo curl -fsSL https://mirrors.huaweicloud.com/docker-ce/linux/debian/gpg | sudo apt-key add -
     sudo add-apt-repository -y "deb [arch=$(dpkg --print-architecture)] https://mirrors.huaweicloud.com/docker-ce/linux/debian $(lsb_release -cs) stable"
     ```
     
  
  4. 安装并运行Docker。
     ```
     sudo apt-get -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
     sudo systemctl start docker
     sudo systemctl enable docker
     ```
     
  
  5. 查看docker版本信息。
     ```
     docker -v
     ```
     回显如下类似信息，表示Docker安装成功。
     ```
     Docker version 28.3.3, build 980b856
     ```
     
   
- [Ubuntu 22.04]
  1. 登录弹性云服务器。 具体操作请参见[Linux ECS登录方式概述](https://support.huaweicloud.com/usermanual-ecs/zh-cn_topic_0013771089.html)。
     
  
  2. 更新软件包列表。
     ```
     sudo apt-get update
     ```
     
  
  3. 添加Docker软件包源。
     ```
     sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
     sudo curl -fsSL https://mirrors.huaweicloud.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
     sudo add-apt-repository -y "deb [arch=$(dpkg --print-architecture)] https://mirrors.huaweicloud.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
     ```
     
  
  4. 安装并运行Docker。
     ```
     sudo apt-get -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
     sudo systemctl start docker
     sudo systemctl enable docker
     ```
     
  
  5. 查看docker版本信息。
     ```
     docker -v
     ```
     回显如下类似信息，表示Docker安装成功。
     ```
     Docker version 28.3.3, build 980b856
     ```
     
   
#### 配置镜像加速器
![](https://support.huaweicloud.com/bestpractice-ecs/public_sys-resources/note_3.0-zh-cn.png)
- "华北-乌兰察布一"、"亚太-雅加达"、"拉美-墨西哥城一"、"拉美-墨西哥城二"和"拉美-圣保罗一"区域不支持该功能，如需使用，请切换到其他区域。
- 通过docker pull命令下载Docker镜像时，往往会因为网络原因而需要很长时间，甚至可能因超时而下载失败。建议在拉取镜像前先参考以下方法配置镜像加速器，再进行后续操作。
- 华为云不会强制用户在安装好Docker后，必须要配置加速器。但若是在用户生产环境中，建议提前配置好加速器，以免后续再配置时，需要重启服务，导致生产环境停服。
 
1. 登录[容器镜像服务控制台](https://console.huaweicloud.com/swr/#/swr/dashboard)。
2. 在左侧导航栏选择"镜像资源 \> 镜像中心"。
3. 单击"镜像加速器"，在弹框中找到"加速器地址"，单击![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002162282638.png)，将加速器地址复制到剪切板。
   图1镜像加速器地址   
   ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002197609301.png "点击放大") 
4. 登录弹性云服务器。
5. 创建并编辑/etc/docker/daemon.json文件（如果文件不存在，则创建）。
   ```
   vi /etc/docker/daemon.json
   ```
   
6. 在该文件内添加如下内容：
   ```
   {
       "registry-mirrors": ["加速器地址"]
   }
   ```
   
7. 按**Esc** 键退出编辑模式，并输入**:wq**保存后退出。
8. 重启Docker使配置生效。
   ```
   systemctl restart docker
   ```
   
9. 执行以下命令，当Registry Mirrors字段的地址为加速器的地址时，说明加速器已经配置成功。
   ```
   docker info
   ```
   图2Registry Mirrors信息   
   ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002197563709.png "点击放大") 
 
#### Docker基本用法
1. Docker进程管理。
   - 运行Docker
     ```
     systemctl start docker
     ```
     
   
   - 停止Docker
     ```
     systemctl stop docker
     ```
     
   
   - 重启Docker
     ```
     systemctl restart docker
     ```
     
    
2. 镜像管理。
   1. 拉取镜像。此处以Apache和CentOS官方镜像为例。
      ```
      docker pull httpd
      docker pull centos:7
      ```
      
   
   2. 查看已有镜像
      ```
      docker images
      ```
      ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002392988274.png "点击放大")
      
      
   
   3. 强制删除镜像
      ```
      docker rmi centos:7
      ```
      
    
3. 容器管理。
   1. 创建一个容器并运行。
      ```
      docker run -it -d -p 80:80  --name datahttpd -v /data/:/var/www/httpd/ httpd
      ```
      参数说明如下：
      - -i：以交互模式运行容器，通常与-t同时使用。
      
      - -t：为容器重新分配一个伪输入终端，通常与-i同时使用。
      
      - -d：后台运行容器，并返回容器ID。
      
      - -p：端口映射，格式为"宿主机端口:容器端口"。
      
      - --name：为容器指定一个名称。
      
      - -v：把宿主机上的一个目录挂载到镜像里，格式为"宿主机目录:镜像内挂载的路径"，必须为绝对路径。
      
      
      ![](https://support.huaweicloud.com/bestpractice-ecs/public_sys-resources/note_3.0-zh-cn.png)
      上述参数说明中的宿主机表示所创建的弹性云服务器实例。
      示例命令表示：使用镜像httpd，以交互模式启动一个容器，将容器的80端口映射到宿主机的80端口，宿主机的目录/data映射到容器的/var/www/httpd目录，并返回容器ID。
      ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002161749540.png "点击放大")
      
      
   
   2. 查看容器启动情况。
      ```
      docker ps -a
      ```
      ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002197128957.png "点击放大")
      
      
   
   3. 在浏览器输入弹性云服务器所绑定的弹性公网IP，访问测试容器运行情况。出现以下内容表示运行成功。 ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002197563713.png "点击放大")
      
    
 
#### 镜像制作
通过Dockerfile定制一个简单的Nginx镜像。
1. 创建一个名为Dockerfile的文件。
   ```
   mkdir mynginx
   cd mynginx
   touch Dockerfile
   ```
   
2. 编辑Dockerfile。
   ```
   vim Dockerfile
   ```
   增加文件内容如下：
   ```
   FROM nginx
   RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
   ```
   Dockerfile指令介绍如下。以下仅介绍简单指令，如需了解更多，请参见官方网站。
   - FROM语句：表示使用nginx镜像作为基础镜像，一个Dockerfile中FROM是必备的指令，并且必须是第一条指令。
   
   - RUN语句：格式为RUN \<命令\>，表示执行echo命令，在显示器中显示一段"Hello, Docker!"的文字。
    
3. 构建镜像。
   ```
   docker build -t nginx:v3 .
   ```
   - -t nginx:v3：指定镜像的名称和版本。
   
   - .：指定上下文路径，镜像构建命令将该路径下所有的内容打包给Docker引擎帮助构建镜像。
    
4. 查看部署的nginx镜像，版本为v3。
   ```
   docker images
   ```
   ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002197235633.png "点击放大")
   
 
