本文介绍Docker使用和管理的常用命令,包括镜像的导入导出和使用、容器的使用和暂停、容器的运行和创建日志等。

1. 常用命令

注意:命令中方括号中的内容需要自行替换

  1. 查看已有的docker 镜像(image)和对应的 IMAGE ID
    docker images
  2. 镜像导入导出删除
    # 导入
    docker load -i [retinaface.tar]
    # 导入后使用下述命令给images 命名
    docker tag 8ca8dfe44635 retinaface
    # 导出
    docker save [IMAGE ID] > [retinaface.tar]
    # 指定名称删除镜像
    docker rmi [java:8]
  3. 容器导入导出停止删除
    # 导入
    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)
  4. 创建或运行容器(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                                    

标签: docker

添加新评论