主要包括两部分:
[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 旧版本叫作 docker
或 docker-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 已经升级到 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