# 构建CANN容器镜像（Ubuntu）

本章节以在容器镜像Ubuntu 18.04上为例，制作包含CANN软件包Toolkit和Kernels的CANN容器镜像。

可以参考本节内容定制修改Dockerfile，自定义制作CANN容器镜像。

1. 以root用户登录服务器。
2. 执行如下命令，在任意目录（如“/home”）新建ascend-cann文件夹。

```
mkdir ascend-cann
```


3. 执行如下命令，进入ascend-cann目录。

```
cd ascend-cann
```


  请在当前目录准备以下软件包。 表1 所需软件或文件 软件或文件 说明 获取方法 Toolkit 开发套件包。 参见资源下载。 Kernels 二进制算子包，可以节省算子编译时间，根据业务场景可选安装。

4. 执行vi Dockerfile命令新建Dockerfile文件，添加如下内容。

```
ARG BASE=$BASE
FROM $BASE
WORKDIR /tmp
COPY . ./
# 定义时区参数
ENV TZ=Asia/Shanghai
# 设置时区
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo '$TZ' > /etc/timezone
ENV LD_LIBRARY_PATH=/usr/local/python3.7.5/lib:$LD_LIBRARY_PATH
ENV PATH=/usr/local/python3.7.5/bin:$PATH
# 设置驱动路径环境变量
ARG ASCEND_BASE=/usr/local/Ascend
ENV LD_LIBRARY_PATH=\
$ASCEND_BASE/driver/lib64:\
$ASCEND_BASE/driver/lib64/common:\
$ASCEND_BASE/driver/lib64/driver:\
$ASCEND_BASE/driver/tools/hccn_tool/:/lib64:\
$LD_LIBRARY_PATH
SHELL ["/bin/bash","-c"]
# 环境准备
RUN apt update && \
apt install -y gcc g++ make cmake libsqlite3-dev zlib1g-dev libssl-dev libffi-dev libbz2-dev liblzma-dev wget git vim unzip && \
wget https://www.python.org/ftp/python/3.7.5/Python-3.7.5.tgz --no-check-certificate && \
tar -zxvf Python-3.7.5.tgz && \
cd Python-3.7.5 && \
./configure --prefix=/usr/local/python3.7.5 --enable-loadable-sqlite-extensions --enable-shared && \
make -j16 && make install && \
cd /tmp && \
mkdir
~
/.pip && \
echo -e '[global]\nindex-url = https://mirrors.huaweicloud.com/repository/pypi/simple\ntrusted-host = mirrors.huaweicloud.com' >>
~
/.pip/pip.conf && \
pip3 install --upgrade pip
# 安装CANN
ARG CANN_PKG=Ascend-cann-toolkit_*.run
ARG KERNEL_PKG=Ascend-cann-kernels-*.run
RUN chmod +x $CANN_PKG && \
./$CANN_PKG --quiet --install --install-path=$ASCEND_BASE --install-for-all && \
chmod +x $KERNEL_PKG && \
./$KERNEL_PKG --quiet --install --install-for-all && \
pip3 install attrs && \
pip3 install numpy && \
pip3 install decorator && \
pip3 install sympy && \
pip3 install cffi && \
pip3 install pyyaml && \
pip3 install pathlib2 && \
pip3 install psutil && \
pip3 install protobuf && \
pip3 install scipy && \
pip3 install requests && \
pip3 install absl-py
# 环境清理
RUN rm -rf /root/.cache/pip && \
rm -rf ./*
```


  修改后执行:wq!命令保存文件并退出。

5. 在当前目录执行以下命令构建镜像。

```
docker build -t
{image_name}
:
{new_tag}
--build-arg BASE=
{image_name}
:
{tag}
.
```


  注意不要遗漏命令结尾的“.”，命令示例如下所示。

```
docker build -t ascend-cann:8.0.RC3-ubuntu --build-arg BASE=ubuntu:18.04 .
```


**表2 命令参数说明**

| 参数 | 说明 |
| --- | --- |
| {image\_name}:{new\_tag} | 此次构建的镜像名称与标签，建议将{image\_name}:{new\_tag}命名为“软件包:软件包版本\-容器OS”（例如“ascend\-cann:8.0.RC3\-ubuntu”） |
| \-\-build\-arg | 指定dockerfile文件内的参数 |
| {image\_name}:{tag} | {image\_name}:{tag}为构建镜像前准备的OS基础容器镜像。如ubuntu:18.04。 |
