本文介绍Docker使用和管理的常用命令,包括镜像的导入导出和使用、容器的使用和暂停、容器的运行和创建日志等。
1. 常用命令
注意:命令中方括号中的内容需要自行替换
查看已有的docker 镜像(image)和对应的 IMAGE ID
代码语言:javascript复制docker images
镜像导入导出删除
代码语言:javascript复制# 导入
docker load -i [retinaface.tar]
# 导入后使用下述命令给images 命名
docker tag 8ca8dfe44635 retinaface
# 导出
docker save [IMAGE ID] > [retinaface.tar]
# 指定名称删除镜像
docker rmi [java:8]
容器导入导出停止删除
代码语言:javascript复制# 导入
docker import [name.tar]
# 导出
docker export [container ID] > [name.tar]
# 停止所有正在运行的容器
docker stop $(docker ps -q)
# 删除(如果容器正在运行,需要加-f)
docker rm [container ID]
# 删除所有正在运行的容器
docker rm -f $(docker ps -q)
创建或运行容器(container)
代码语言:javascript复制# 从image中创建container并运行,具体参数见 docker run --help
docker run -d [retinaface:v1] /bin/bash
# 在容器内使用gpu,使用--runtime = nvidia设置选项,或者有些版本如Docker 18用nvidia-docker
docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi
nvidia-docker run --rm nvidia/cuda nvidia-smi
# 在Docker 19.03或更高版本中,设置选项--gpus all
# 指定GPU: --gpus "device=1"
docker run --gpus all --rm nvidia/cuda nvidia-sm
docker run -d --shm-size 32g -v /home/kpp/mydata:/workspace -p 2422:22 -p 7777:8888--name vector --gpus all vectornet:v4
# 进入正在运行的container,exec退出使用ctrl D
docker exec -it [name/id] /bin/bash
# 或者,attach退出使用ctrl p ctrl q
docker attach [name/id]
# docker exec 和docker attach 都可以进到container的shell, 但是有区别。
# docker exec在容器内会起一个新的进程,docker attach 只会把标准输出输入连接到容器内的PID1
# Attach就像投屏,如果你从两个终端attach到一个container,当你在一个终端输入的时候,
# 内容会出现在另一个终端,两个终端是连接在同一个tty上的。
# 用attach方式进到container,当从终端退出来的时候,container是会被关闭的。
# exec是不会这样的,不同终端连接到不同的tty,退出终端的时候不会关闭container的main process.
# 启动未在运行的container
docker start [name/id]
# 查看所有container或查看正在运行的container
docker ps -a
docker ps
# 容器导出为image, -a为名字,-m为更改信息
docker commit -a "baozoudelimi" -m "add 20170309 xxxx message" [contain_id] [image_name]
5.管理
代码语言:javascript复制# 查看运行日志
docker logs [container-id]
# 查看哪些容器在跑代码
docker stats # cpu占用高的,大概在跑代码
docker top [containerName] # 查看容器在跑的进程PID
docker inspect [containerName] | grep Mounts -A 20
2. ssh连接docker容器
进入容器,安装ssh apt install openssh-server
;并修改ssh配置允许root登录
# 编辑文件/etc/ssh/sshd_config
# 添加一行PermitRootLogin yes表示ssh允许root登录
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
# 随后一定要重启ssh服务
service ssh restart
进入容器,设置root密码
代码语言:javascript复制passwd root
之后就可以直接ssh远程连接进容器了 如果ssh连接容器后没办法使用python等环境,
代码语言:javascript复制vim ~/.bashrc
# 然后添加下面三行到文件中
export LIBRARY_PATH=/usr/local/cuda/lib64/stubs
export LD_LIBRARY_PATH=/usr/local/nvidia/lib:/usr/local/nvidia/lib64
export PATH=/opt/conda/bin:/usr/local/nvidia/bin:/usr/local/cuda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# 保存退出后运行
source ~/.bashrc
3. docker容器中使用jupyter
代码语言:javascript复制jupyter notebook --allow-root --ip 0.0.0.0