Docker简介及常用命令


什么是Docker

镜像(image)

Docker 镜像是一个特殊的文件系统(root文件系统),除了提供容器运行时所需的程序、 库、资 源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境 变量、用户等)。

分层存储,镜像的复用、定制变的更为容易。甚至可以用之前构建好的 镜像作为基础层,然后进一步添加新的层,以定制自己所需的内容,构建新的镜 像。

容器(container)

镜像( Image )和容器( Container )的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被 创建、启动、停止、删除、暂停等。

仓库(repository)

一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的 各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版 本的镜像。如果不给出标签,将以 latest 作为默认标签。

使用 Docker 镜像

Docker 运行容器前需要本地存在对应的镜像,如果本地不存在该镜像,Docker 会 从镜像仓库下载该镜像。

Docker 安装及nvidia-docker 1.参考https://docs.docker.com/engine/install/ubuntu/ 2.https://github.com/NVIDIA/nvidia-docker 按步骤安装即可,前提已安装好nvidia-smi

构建基础镜像 https://note.youdao.com/ynoteshare1/index.html?id=e79a70c78aaa25cabe819b6f3cdc3f97&type=note

1.编写Dockerfile

# 基础镜像,需要提前构建好并上传到三维家镜像仓库中
FROM docker.3vjia.com/leiruisheng/dl_env:py369-cu101-v1.1.0
# 按此格式注明作者信息
MAINTAINER Xelawk <leiruisheng@3vjia.com>
# 使用当前$PATH/pip安装常用开发与部署环境
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple \
pandas \
matplotlib \
scikit-image
# 设置容器入口
ENTRYPOINT ["/bin/bash"]

具体例子:

# 基础镜像,需要提前构建好并上传到三维家镜像仓库中
FROM docker.3vjia.com/linshangjun/docker-space-name:py369-cu101
# 按此格式注明作者信息
MAINTAINER linshangjun <linshangjun@3vjia.com>
# 使用当前$PATH/pip安装常用开发与部署环境
RUN pip uninstall --yes tensorflow
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple \
pandas \
matplotlib \
scikit-image \
tensorflow==1.14.0 \
scipy \
PyYAML>=5.3
RUN pip install git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI
# 设置容器入口
ENTRYPOINT ["/bin/bash"]

2.写完Dockerfile后,在当前目录下运行以下命令即可构建并上传你的基础镜像

#构建
~$ docker build -t your_image_name[:tag] .
#打标签
~$ docker tag your_image_name[:tag] docker.3vjia.com/yourname/your_image_name[:tag]
#上传镜像
~$ docker push docker.3vjia.com/yourname/your_image_name[:tag]

使用镜像运行api

## 第一步是从远程拉取环境镜像到本地
docker pull docker.3vjia.com/linshangjun/docker-test-image:py369-cu101

## 然后执行以下命令开启你的容器主进程即可发布应用
~$ docker run --name myapp \     # 给你的容器起个别名
          --gpus all \           # 开启nvidia runtime
          -v /root/app:/Dev \    # 绑定应用目录到容器内部的工作目录中
          --entrypoint python3 \  # 指定Python解释器,默认python即可
          -p 5000:5000 \         # 绑定并映射你的应用端口
          -d \                   # 后台守护进程
          docker.3vjia.com/linshangjun/docker-test-image:py369-cu101 \    # 指定镜像
          api.py                 # python脚本
docker run --name my_app  --gpus all -v /root/app:/Dev --entrypoint python3 -p 5000:5000 -d  docker.3vjia.com/linshangjun/docker-test-image:py369-cu101 api.py

Docker 常用命令

docker --version :查看docker 版本 docker images:查看本地镜像 exit:离开docker

示例: 进入交互shell docker run --name myshell \ --gpus all \ -it \ -p 20003:22 \ docker.3vjia.com/linshangjun/docker-test-image:py369-cu101

开启pycharm调试

1. 先设置自定义密码
~$ passwd  

2. 进入编辑ssh服务端配置文件
~$ vim /etc/ssh/sshd_config

3. 注释一行,增加一行
#PermitRootLogin prohibit-password
PermitRootLogin yes

4. 重启ssh
~$ /etc/init.d/ssh start

5. 最后就能从外部ssh到容器内部了  
~$ ssh root@target_ip -p 2333

ssh root@10.1.5.138 -p 2333

docker run --name myshell --gpus all -it -p 2333:22 docker.3vjia.com/leiruisheng/dl_env:py369-cu101-v1.0.0

启动docker:docker start myshell #myshell 为镜像名

docker ps #查看运行的镜像

docker attach a75f730db5d0 #a75f730db5d0为ID

运行api:docker run --name my_app --gpus all --entrypoint python -p 5000:5000 -it 489f4326910b IndexAPI.py

进入已运行容器内部:docker exec -ti 06a99026225d /bin/bash

实时查看容器日志:docker logs -f -t --tail 100 aigc #aigc为容器名

复制本地文件到容器:docker cp 你的文件路径 容器长ID:docker容器路径