安装
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