# 容器引擎基础知识
容器引擎是Kubernetes最重要的组件之一，负责管理镜像和容器的生命周期。可以轻松地为任何应用创建一个轻量级的、可移植的、自给自足的容器。
SWR当前支持Docker和Containerd两种容器引擎。下文以Docker容器引擎为例简单介绍容器引擎的安装和镜像文件的制作。
#### 安装前的准备工作
在安装容器引擎前，请了解容器引擎的基础知识，具体请参见[Docker Documentation](https://docs.docker.com)。
#### 选择容器引擎的版本
容器引擎几乎支持在所有操作系统上安装，用户可以根据需要选择要安装的容器引擎版本，具体请参见<https://docs.docker.com/engine/install/>。
![](https://support.huaweicloud.com/usermanual-swr/public_sys-resources/note_3.0-zh-cn.png)
- 容器镜像的存储可以使用容器镜像服务（SWR），建议下载18.06及以上版本的Docker容器引擎。
- 安装容器引擎需要连接互联网，内网服务器需要绑定弹性公网IP后才能访问。
 
#### 安装容器引擎
您可以根据自己的操作系统选择对应的安装步骤：
**[Linux操作系统下安装]**
**[EulerOS操作系统下安装]**
- **Linux操作系统下安装**
  在Linux操作系统下，可以使用如下命令快速安装Docker的最新稳定版本。如果您想安装其他特定版本的Docker，可参考[安装Docker](https://docs.docker.com/engine/install/)。
  ```
  curl -fsSL get.docker.com -o get-docker.sh
  sh get-docker.sh
  sudo systemctl daemon-reload
  sudo systemctl restart docker
  ```
  
- **EulerOS操作系统下安装**
  在EulerOS操作系统下，安装容器引擎的方法如下：
  1. 登录弹性云服务器。
  
  2. 配置yum源。
  
  3. 安装并运行容器引擎。
     1. 获取yum源里的docker-engine包。
        ```
        yum search docker-engine
        ```
        
     
     2. 使用**yum install -y** 命令安装上一步获取的docker-engine包，x86架构示例：
        ```
        yum install docker-engine.x86_64 -y
        ```
        
     
     3. 设置开机启动Docker服务。
        ```
        systemctl enable docker
        ```
        
     
     4. 启动Docker。
        ```
        systemctl start docker
        ```
        
      
  
  4. 检查安装结果。
     ```
     docker --version
     ```
     回显如下类似信息，表示容器引擎安装成功。
     ```
     Docker version 18.09.0, build 384e3e9
     ```
     
   
 
#### 制作容器镜像
本节指导您通过Dockerfile定制一个简单的Web应用程序的容器镜像。Dockerfile是一个文本文件，其内包含了一条条的指令（Instruction），每一条指令构建一层，因此每一条指令的内容，就是描述该层应当如何构建。
使用Nginx镜像创建容器应用，在浏览器访问时则会看到默认的Nginx欢迎页面，本节以Nginx镜像为例，修改Nginx镜像的欢迎页面，定制一个新的镜像，将欢迎页面改为"Hello, SWR!"。
1. 以root用户登录容器引擎所在机器。
2. 创建一个名为Dockerfile的文件。 
   ```
   mkdir mynginx
   cd mynginx
   touch Dockerfile
   ```
   
   
3. 编辑Dockerfile。 
   ```
   vim Dockerfile
   ```
   增加文件内容如下：
   ```
   FROM nginx
   RUN echo '<h1>Hello, SWR!</h1>' > /usr/share/nginx/html/index.html
   ```
   Dockerfile指令介绍如下。
   - FROM语句：表示使用nginx镜像作为基础镜像，一个Dockerfile中FROM是必备的指令，并且必须是第一条指令。
   
   - RUN语句：格式为RUN \<命令\>，表示执行echo命令，在显示器中显示一段"Hello, SWR!"的文字。
   
   
   按"Esc"，输入**:wq**，保存并退出。
   
   
4. 使用**docker build** \[*选项* \] \<*上下文路径* \> 构建镜像。
   
   ```
   docker build -t nginx:v1 .
   ```
   - -t nginx:v1：指定镜像的名称和版本。
   
   - **.**：指定Dockerfile所在目录，镜像构建命令将该路径下所有的内容打包给容器引擎帮助构建镜像。
   
   
   
   
5. 执行以下命令，可查看到已成功部署的nginx镜像，版本为v1。 
   ```
   docker images
   ```
   
   
 
 #### 制作镜像压缩包
本节指导您将容器镜像制作成tar或tar.gz文件压缩包。
1. 以root用户登录容器引擎所在机器。
2. 执行如下命令查看镜像。 
   ```
   docker images
   ```
   查看需要导出的镜像及tag。
   
   
3. 执行如下命令制作镜像压缩包。 
   ```
   docker save [OPTIONS] IMAGE [IMAGE...]
   ```
   - OPTIONS：--output或-o，表示导出到文件。
   
   - 压缩包格式为：.tar或.tar.gz。
   
   
   ![](https://support.huaweicloud.com/usermanual-swr/public_sys-resources/caution_3.0-zh-cn.png)
   使用docker save制作镜像压缩包时，请使用{image}:{tag}，不要使用镜像id，否则无法在swr页面推送。
   示例：
   ```
   $ docker save nginx:latest > nginx.tar
   $ ls -sh nginx.tar
   108M nginx.tar
   $ docker save php:5-apache > php.tar.gz
   $ ls -sh php.tar.gz
   372M php.tar.gz
   $ docker save --output nginx.tar nginx
   $ ls -sh nginx.tar
   108M nginx.tar
   $ docker save -o nginx-all.tar nginx    # 将nginx所有版本打包
   $ docker save -o nginx-latest.tar nginx:latest
   ```
   
   
 
#### 导入镜像文件
使用Docker客户端
下面指导您通过docker load命令将镜像压缩包导入为一个镜像。
执行方式有2种：
```
docker load < 路径/文件名.tar
docker load --input或者-i 路径/文件名.tar
```
示例：
```
docker load --input fedora.tar
```
