什么是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容器路径