docker详解

一、安装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参数

具体实例如下:

    1. 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"
    2. 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。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值