主要包括两部分:

[1] - Docker 与 NVIDIA-Docker 的安装与配置

[2] - Caffe 镜像使用

1. Docker 安装与配置

Docker安装过程需要使用root权限, 主要有两种安装方式:

1.1 Ubuntu 软件源安装

使用 Ubuntu 系统默认自带的 docker.io 安装包安装Docker,但版本可能相对较旧.
命令行操作过程如下:

sudo apt-get update
sudo apt-get -y install docker.io 
sudo service docker.io status # (检查Docker服务的状态)
sudo docker run hello-world # (测试Docker安装是否成功)

1.2 Docker 官网安装

采用 Docker官网 安装方式可以获取最新版本Docker.

有两个版本:

[1] - Docker Community Edition(CE)

[2] - Docker Enterprise Edition(EE)

这里安装 Docker CE,其支持 Ubuntu Bionic 18.04 (LTS), Ubuntu Xenial 16.04 (LTS) 和 Ubuntu Trusty 14.04 (LTS) 的 64 位系统.

1.2.1 卸载旧版本 docker

Docker 旧版本叫作 dockerdocker-engine,在安装前需要先卸载旧版本.

sudo apt-get remove docker docker-engine docker.io

/var/lib/docker 路径中,保留了镜像images,容器containers,卷volumes,以及网络networks,等.

Docker CE 新版本叫作 docker-ce.

1.2.2 Docker仓库设置

在安装Docker之前需要配置Docker官方仓库,然后从该仓库进行获取与安装.

首先,进行Docker仓库设置:

sudo apt-get update
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common

# Docker 官方 GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# 验证 fingerprint 
sudo apt-key fingerprint 0EBFCD88

# 添加 Docker CE 的 stable 版本的仓库
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

1.2.3 Docker CE 最新版本安装

sudo apt-get update
sudo apt-get install docker-ce
# 存在多个 Docker 仓库时,会安装最新版本的 docker-ce

1.2.4 Docker CE 指定版本安装

[1] - 列出仓库中所有的 Docker CE 版本

apt-cache madison docker-ce

如:

docker-ce | 5:18.09.0~3-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 18.06.1~ce~3-0~ubuntu | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 18.06.0~ce~3-0~ubuntu | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 18.03.1~ce-0~ubuntu | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 18.03.0~ce-0~ubuntu | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 17.12.1~ce-0~ubuntu | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 17.12.0~ce-0~ubuntu | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 17.09.1~ce-0~ubuntu | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 17.09.0~ce-0~ubuntu | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 17.06.2~ce-0~ubuntu | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 17.06.1~ce-0~ubuntu | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 17.06.0~ce-0~ubuntu | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 17.03.3~ce-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 17.03.2~ce-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 17.03.1~ce-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 17.03.0~ce-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages

[2] - 安装 Docker CE 指定版本

sudo apt-get install docker-ce=<VERSION>
# 如:
sudo apt-get install docker-ce=18.03.1~ce-0~ubuntu

1.2.5 Docker CE deb 安装(强烈推荐)

Ubuntu16.04 - amd 对应 Docker deb 下载路径:

https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/

Ubuntu 其他版本 Docker deb 下载路径:

https://download.docker.com/linux/ubuntu/dists/
选择对应的 Ubuntu 版本号,依次选择下载列表.

Docker deb 安装:

sudo dpkg -i /path/to/docker-ce.deb

1.3 查看 Docker 状态

sudo service docker status 
sudo docker info

1.4 Docker - hello-world 镜像测试

sudo docker run hello-world

自动下载 hello-world 镜像,并在容器内运行. 输出如:

Hello from Docker!

2. 阿里云加速器设置

由于官方Docker Hub网络速度较慢,这里使用阿里云提供的Docker Hub. 需要配置阿里云加速器,官方说明如下:

2.1 Docker CE > 1.10.0

推荐安装 1.10.0 以上版本的 Docker.

通过修改daemon配置文件/etc/docker/daemon.json来使用加速器:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://fird1mfg.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

2.2 Docker CE > 1.10.0(官网已去除)

针对Docker客户的版本小于等于1.10的用户:
或者想配置启动参数,可以使用下面的命令将配置添加到docker daemon的启动参数中.

Ubuntu 12.04 14.04的用户:

echo "DOCKER_OPTS=\"\$DOCKER_OPTS --registry-mirror=https://fird1mfg.mirror.aliyuncs.com\"" | sudo tee -a /etc/default/docker
sudo service docker restart

Ubuntu 15.04 16.04的用户:

sudo mkdir -p /etc/systemd/system/docker.service.d

sudo tee /etc/systemd/system/docker.service.d/mirror.conf <<-'EOF'
[Service]
ExecStart=/usr/bin/docker daemon -H fd:// --registry-mirror=https://fird1mfg.mirror.aliyuncs.com
EOF

sudo systemctl daemon-reload
sudo systemctl restart docker

3. NVIDIA-Docker 安装

NVIDIA-Docker

Nvidia-Docker 已经升级到 2.0 版本. 但这里还是采用的 nvidia-docker 1.0.1 版本.

[1] - 依赖项

GNU/Linux x86_64 with kernel version > 3.10
Docker >= 1.9 (official **docker-engine**, **docker-ce** or **docker-ee** only)
NVIDIA GPU with Architecture > Fermi (2.1)
NVIDIA drivers >= 340.29 with binary **nvidia-modprobe** (驱动版本与CUDA计算能力相关)

[2] - CUDA与NVIDIA driver安装

处理NVIDIA-Docker依赖项 NVIDIA drivers >= 340.29 with binary nvidia-modprobe 要求.
根据显卡,下载对应版本的CUDA并进行安装.

[3] - NVIDIA-Docker 安装

# 安装 nvidia-docker 和 nvidia-docker-plugin
wget -P /tmp https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidia-docker_1.0.1-1_amd64.deb

sudo dpkg -i /tmp/nvidia-docker*.deb && rm /tmp/nvidia-docker*.deb

# 测试
sudo nvidia-docker run --rm nvidia/cuda nvidia-smi

4. Caffe 镜像使用

这里使用阿里云的镜像服务.,从Docker注册服务器的Docker仓库下载一个已有的Docker镜像.

[1] - 登录阿里云

# 登录阿里云
sudo nvidia-docker login registry.aliyuncs.com
# Username: \*********\*     
# Password:  \*********\*

[2] - 拉取Caffe镜像

sudo nvidia-docker pull registry.cn-hangzhou.aliyuncs.com/docker_learning_aliyun/caffe:v1

[3] - 查看拉取的Caffe镜像信息

sudo nvidia-docker images

输出信息:

[4] - 查看Caffe镜像的显卡信息

sudo nvidia-docker run -it registry.cn-hangzhou.aliyuncs.com/docker_learning_aliyun/caffe:v1 nvidia-smi

输出信息,如:

[5] - 进入容器,操作类似于Ubuntu系统,默认进入容器内的 /workspace 目录

sudo nvidia-docker run -it registry.cn-hangzhou.aliyuncs.com/docker_learning_aliyun/caffe:v1 /bin/bash

[6] - 基于容器Caffe镜像运行python程序

sudo nvidia-docker run --volume=$(pwd):/workspace --volume=/path/to/data:/data --rm caffe-image:base python demo.py

说明:

nvidia-docker run:运行镜像

--volume=$(pwd):/workspace --volume=/path/to/data:/data: 将主机的路径挂载到容器中, ":"前后分别为为主机目录和容器路径

-rm: 运行镜像后删除

caffe-image:base: Caffe镜像

python demo.py: python程序运行,类似于Ubuntu环境.

5. Docker 错误解决

5.1 python 提示错误 UnicodeEncodeError: 'ascii' codec can't encode characters in position

错误:

docker 中 python 代码的 print("中文") 出现错误,但宿主机不会出现该错误,如下:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-127: ordinal not in range(128)

错误原因:

因为locale 的设置导致 shell 的stdin/stdout/stderr 的默认编码为ascii,当用ascii编码去解释python3默认unicode编码的时候,则会有问题

解决方法:

python3 的解决方式是 容器在初始化时候 需要设置shell的stdin/stdout/stderr 的默认编码方式为 utf-8,需要重启容器

# docker run 方式
docker run -e PYTHONIOENCODING=utf-8 m_container:latest my-python3
# docker-compose 方式
environment:
 - PYTHONIOENCODING=utf-8

From docker python 提示错误UnicodeEncodeError: 'ascii' codec can't encode characters in position

Last modification:December 14th, 2018 at 04:53 pm