docker配置

docker配置

安装

docker 配置 nvidia 显卡:
配置文件在/etc/daemon. json

{
    "registry-mirrors": [
        "https://xfybksbc.mirror.aliyuncs.com",
        "https://registry.docker-cn.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://hub-mirror.c.163.com",
        "https://mirror.baidubce.com",
        "https://ccr.ccs.tencentyun.com"
    ],
    "runtimes": {
        "nvidia": {
            "args": [],
            "path": "nvidia-container-runtime"
        }
    }
}

Docker 命令行

DOCKERFILE

常用保留字指令释义
FROM基础镜像,当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板,第一条必须是 from
MAINTAINER镜像维护者的姓名和邮箱地址
RUN容器构建时需要运行的命令,有两种形式,一是后面加 shell 命令如 RUN yum -y install vim,另一种是 exec 格式,如 RUN [“./test. php”, “dev”, “offline”]
EXPOSE当前容器对外暴露出的端口
WORKDIR指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点
USER指定该镜像以什么样的用户去执行,如果都不指定,默认是 root
ENV用来在构建镜像过程中设置环境变量,这个环境变量可以在后续的其他指令中使用
ADD将宿主机目录下的文件拷贝进镜像且会自动处理 URL 和解压 tar 压缩包
COPY类似 ADD,拷贝文件和目录到镜像中。将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置
VOLUME容器数据卷,用于数据保存和持久化工作
CMD指定容器启动后的要干的事情,格式跟 RUN 相似,和前面 RUN 命令的区别:CMD 是在 docker run 时运行,RUN 是在 docker build 时运行

注意要将所需文件和 Dockerfile 文件中的路径对应上。
在 Dockerfile 目录下,使用失灵进行构建

docker build -t 新镜像名字:TAG .

常用功能

docker run 的参数

docker run [OPTIONS] IMAGE [COMMOND] [ARGS...]
 
# OPTIONS 说明
	--name="容器新名字": 为容器指定一个名称;
	-d: 后台运行容器,并返回容器 ID,也即启动守护式容器;(--detach)
	-i:以交互模式运行容器,通常与 -t 同时使用;(--interactive)
	-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;(--tty)
	-P:  所有暴露的端口随机映射到宿主机端口;(--publish-all)
	-p: 指定端口映射,有以下四种格式(--publish)
	      ip:hostPort:containerPort
	      ip::containerPort
	      hostPort:containerPort
	      containerPort
    -w: 指定命令执行时,所在的路径(--workdir)
    -v: 数据卷映射,宿主机路径:虚拟机路径(--volume)
    -e: 设置容器里边的环境变量
 

Docker Compose

version: '3.8'

services:
  nvidia-test:
    image: nvidia/cuda:latest
    container_name: nvidia-test
    command: nvidia-smi
  
    deploy:
        resources:
            reservations:
              devices:
                - driver: nvidia
                  count: 1
                  capabilities:
                        - gpu
version: '3.6'
services:
  gitlab:
    image: xjw_01:v0.2  # 镜像名称
    container_name: jyp # 容器名称
    restart: always  # 重启策略
    ports:  # 端口映射
      - 9512:22
      - 9513:4000
    volumes:  # 文件映射
      - /home/debian/datasets:/datasets
      - /home/debian/docker_data/jyp:/data
      - /home/debian/software_packages:/software_packages
    cap_add:   # 添加内容功能,删除内核功能使用的是cap_drop
     - SYS_PTRACE
    devices:
     - /dev/ttyUSB0:/dev/ttyUSB0
    deploy:
        resources:
            reservations:
              devices:
                - driver: nvidia
                  count: 1
                  capabilities:
                        - gpu
    shm_size: '8g'

docker-py 使用

安装

pip install docker

使用

# 导入
import docker

# 获取客户端
client = docker.from_env()

# 容器操作
client.containers.create()
client.containers.get("name")
client.containers.list()

# 查看容器退出信息
client.containers.get("container_name").wait()['StatusCode']


# 容器状态


退出码含义
0一个归属的前台进程退出 (通常是执行完成)
1由于应用程序错误导致的失败
137表示容器接收到 SIGKILL 信号 (人工干预或者 oom-killer [OUT-OF-MEMORY])
139表示容器接收到 SIGSEGV 信号
143表示容器接收到 SIGTERM 信号

docker 配置代理拉取镜像

第一步添加配置文件

#创建一下目录和文件
mkdir /etc/systemd/system/docker.service.d/ 
vim /etc/systemd/system/docker.service.d/http-proxy.conf

#添加一下内容
[Service]
Environment="HTTP_PROXY=http://192.168.2.199:8118"
Environment="HTTPS_PROXY=http://192.168.2.199:8118"
# 下面是不走代理的时候,可以不加。有私有仓库时,可以用来加私有仓库
# Environment="NO_PROXY=localhost,127.0.0.1"

第二步重启服务

systemctl daemon-reload
systemctl restart docker

查看状态

# 可以看到刚才配置的代理
docker info | grep -i proxy
LICENSED UNDER CC BY-NC-SA 4.0