一、安装docker【本安装命令适用于CentOS Linux 7 (Core),其他操作系统不一定能用】
- 查看docker是否存在
docker --version| grep Docker | wc -l 【存在输出1,不存在输出0并开始安装docker】
- 安装所需依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
- 设置稳定的docker安装仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 列出可安装的docker版本,选择你需要安装的版本
yum list docker-ce --showduplicates | sort -r
- 安装18.09.1版本命令如下:
yum install docker-ce-18.09.1 docker-ce-cli-18.09.1 containerd.io
- 启动docker 【Docker 安装完默认未启动】
systemctl start docker
- 查看docker是否安装成功
docker run hello-world 【出现下图证明docker安装成功】
- 查看安装的docker版本
docker -v
- 卸载docker
yum remove docker-ce && rm -rf /var/lib/docker
备注:1、如需安装最新版本的docker,则执行以下命令
yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
2、安装期间出现下图所示,直接输入y即可
3、如果本机上已存在docker可卸载相关依赖重新安装,卸载命令如下:
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
二、重置docker默认路径
- 查看docker位置,默认在/var/lib/docker
docker info
- 查看磁盘空间大小
df -h
- 选择磁盘空间足够大的路径新建目录,用来存放docker文件
mkdir -p /public/docker
- 停止docker服务
systemctl stop docker
- 迁移/var/lib/docker目录下的文件到目标位置
mv /var/lib/docker /dev/docker
- 建立软连接
ln -s /public/docker /var/lib/docker
- 重启docker
systemctl start docker
备注:如果安装完docker后不进行docker迁移则长时间使用后会报BUG1
三、docker 常用命令
镜像与容器的关系:不同的镜像相当于不同的APP。容器相当于每个APP中的各个功能。将镜像看作微信,则容器相当于微信中与不同的人的会话栏。
- 编译镜像
新建Dockerfile,例如:
docker编译命令:
(1)使用当前目录的 Dockerfile 创建镜像:
docker build -t ImageName:TagName .
(2)使用当前目录的Dockerfile_pyt文件创建镜像:
docker build -t ImageName:TagName -f Dockerfile_pyt .
(3)使用非当前目录的Dockerfile创建镜像:【以下命令Dockerfile在/home/service】
docker build -t ImageName:TagName -f /home/service .
- 查看某个镜像
docker images | grep 镜像名
- 保存镜像
docker save -o 保存的镜像名.tar 镜像名
- 加载镜像
docker load -i 保存的镜像文件
- 删除镜像
docker rmi 镜像ID【只有删除镜像才能腾出空间】【由下图可知一个镜像对应多个容器,如果该镜像中有些容器没有停止的话是无法删除该镜像的】
- 交互式进入容器(interactively)【关键参数:-ti】
docker run -it --rm --runtime=nvidia --ipc=host -v /home/notebook/data:/workspace/bert_data mlperf-nvidia:language_model /bin/bash
- 非交互式进入容器【关键参数:sleep infinity】
docker run --rm -d -e CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 --ipc=host -v=/home/data:/workspace/data mlperf-nvidia:language_model sleep infinity
- 查看容器
docker ps
- 进入容器
docker exec -it 容器ID /bin/bash
- 退出容器
exit
- 停止所有容器
docker stop $(docker ps -a -q)
- 删除所有停止的容器
docker rm $(docker ps -a -q)
- 停止某个运行的容器
docker stop CONTAINE ID
- 删除某个运行的容器
docker rm CONTAINE ID
- 查看docker run的历史
history | awk '/docker/ && /run/ {print }'
- 启动docker服务
systemctl start docker
- 查看docker服务是否启动
systemctl status docker
- 设置docker为开机自启动
systemctl enable docker.service
- 重新加载docker配置
systemctl daemon-reload
- 重新启动docker
service docker restart
四、docker run参数介绍
-d:后台运行容器
-ti:以交互模式运行容器
-e:在创建docker容器时设置环境变量,环境变量将在容器运行时生效。
-v:将宿主机的目录映射到docker中
--rm:容器退出时自动删除该容器
--name:为容器指定一个名称
五、docker的--gpus参数
具体实例如下:
-
- nvidia-docker run -d -e NVIDIA_VISIBLE_DEVICES=all --name nvidia_docker_test nvidia/cuda:10.0-base /bin/sh -c "while true; do echo hello world; sleep 1; done"
- docker run --gpus all nvidia/cuda:10.0-base /bin/sh -c "while true; do echo hello world; sleep 1; done"
备注:以上a与b的实现的功能是一样的即-e NVIDIA_VISIBLE_DEVICES=all与--gpus all的作用是相同的,只是命令a适用于docker的19.03版本之前,命令b适用于docker的19.03及其之后的版本。docker -e是指设置环境变量。
参考:docker容器使用GPU方法_docker gpu_普通网友的博客-CSDN博客
六、DOCKERFILE文件
DOCKERFILE文件的命令详见:
RUN:用于指定docker build过程中运行的程序,其可以是任何命令
COPY:用于从docker 主机复制新文件或者目录至创建的新镜像指定路径中
ADD:指令类似于COPY指令,ADD支持使用TAR文件和URL路径
WORKDIR:用于为Dockerfile中所有的RUN、CMD、ENTRYPOINT、COPY和ADD指定设定工作目录
直接用WORKDIR创建的目录可能没有写的权限,解决这个bug的话需要在DOCKERFILE中更改该目录的权限,使用命令RUN chmod -R 777 /workspace/bert。
dockerfile其他常用命令详见:dockerfile常用命令总结_抓不住的蚊子的博客-CSDN博客
七、DOCKERFILE之requirements.txt详解
(1)安装速度慢
DOCKERFILE中经常有RUN pip3 install --no-cache-dir -r requirements.txt的操作,由于网速等原因可能会导致pip安装很慢,可以通过换源来解决。即将该命令修改为RUN pip3 install --no-cache-dir -r requirements.txt -i Simple Index
(2)git相关疑问
requirements.txt中经常会有git+https的操作,例如:git+https://github.com/mlcommons/logging.git@1.1.0-rc4,由于网络原因,该操作经常会失败。
解决方案一:加网关GitHub Proxy 代理加速,如下所示:
git+https://ghproxy.com/https://github.com/mlcommons/logging.git@1.1.0-rc4
解决方案二:pip install git+https://github.com/XXX/XXX 命令报错_smallAction的博客-CSDN博客
(3)安装包版本疑问
如果镜像中需要安装特定版本的包,可通过修改requirement.txt实现。如下图所示,如果docker中运行程序需要numpy的1.18.5版本,在requirement.txt中填写numpy==1.18.5即可。若该方法失败的话可以直接在Dockerfile中填写RUN pip install XXXXX。