Docker-(2) 常用命令
本文介绍Docker使用和管理的常用命令,包括镜像的导入导出和使用、容器的使用和暂停、容器的运行和创建日志等。
1. 常用命令
注意:命令中方括号中的内容需要自行替换
- 查看已有的docker 镜像(image)和对应的 IMAGE ID
docker images
- 镜像导入导出删除
# 导入 docker load -i [retinaface.tar] # 导入后使用下述命令给images 命名 docker tag 8ca8dfe44635 retinaface # 导出 docker save [IMAGE ID] > [retinaface.tar] # 指定名称删除镜像 docker rmi [java:8]
- 容器导入导出停止删除
# 导入 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)
# 从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.管理
# 查看运行日志 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密码
passwd root
之后就可以直接ssh远程连接进容器了
如果ssh连接容器后没办法使用python等环境,
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
jupyter notebook --allow-root --ip 0.0.0.0