目录
1.在根目录下创建文件:Dockerfile
FROM python:3.7.4
COPY . /app
WORKDIR /app
RUN pip install --no-cache-dir -r requirements.txt
#CMD [ "python", "name_ner.py" ]
-
FROM baturayo/tensorflow2.1.0-py3.7.7
可以在:hub.docker.com 下载基础镜像,比如包含TensorFlow2.1的镜像。
复制pull后面的代码:
-
RUN pip install -r requirements.txt
运行根目录下的requirements,安装环境。
pip freeze >requirements.txt
将当前项目的环境导入到根目录的requirements.txt中
2.创建docker镜像
在项目的根目录下输入:docker build -t name_ner .
name_ner是docker镜像的名称
输入:docker images
查看已创建的镜像
3.容器测试运行
- 创建容器
docker run -dit -p 6002:6002 --name ner name_ner:latest /bin/bash
容器名:ner - 启动容器
docker start ner
- 进入容器
docker attach ner
- 运行代码
python name_ner.py
4.修改容器中的代码
- 将代码从外部拷贝到容器中替换原有的代码
docker cp /home/chenxin/main.py ner:/
“ner:/app/” 为容器的根目录 - 使用vi命令直接修改文件,需要安装vi包
- 使用挂载的方式
5.创建基础镜像
如果在工作中不同环境的包大部分是相同的,仅少数几个包不同,那么可以创建一个基础镜像,遇到不同的环境可以基于基础镜像安装少数几个包即可,可以省去大量安装包的时间。
基础镜像只有环境,无需创建app目录,Dockerfile内容:
FROM python:3.7.4
RUN pip install --no-cache-dir -r requirements.txt
6.基于基础镜像创建新的镜像
Dockerfile内容:
FROM nlp_base:latest
COPY . /app
WORKDIR /app
RUN pip install --no-cache-dir -r requirements.txt
"nlp_base"为镜像名称,"latest"为标签号,requirements.txt
中只需将本环境与基础镜像环境不同包的版本列出即可。
7.删除镜像
docker rmi 6f577458a64d
“6f577458a64d”为IMAGE ID
运行后出现:
停止使用该镜像的容器:
docker stop c7b485f637e6
删除该容器:
docker rm c7b485f637e6
再删除镜像:
docker rmi 6f577458a64d
8. 保存和加载镜像
8.1 保存镜像
命令:
docker save -o image_saved_name.tar repository_name/tag
-o: 输出到的文件。
8.2 加载镜像
命令:
docker load -i image_saved_name.tar
9. 问题解决
9.1 docker permission denied解决
- 用户加入到docker用户组:
sudo usermod -aG docker username
- 给docker.sock添加权限:
sudo chmod a+rw /var/run/docker.sock
9.2 container的修改保存到image
docker commit 将 container中的修改生成image:
docker commit container_id/name repository:tag
9.3 docker内nvidia-smi无法使用
- 创建容器时加入–gpus:
docker run --gpus all -it --rm image_name
解释
- –gpus all:允许容器访问所有可用的 GPU。
- -it:以交互模式运行容器。
- –rm:容器在退出后自动删除。
- -d: 以后台模式运行容器(detached mode)。这意味着容器启动后,命令行会立即返回,而不是在容器的终端中保持打开状态。
若报错:
docker: Error response from daemon: exec: "nvidia-container-runtime-hook": executable file not found in $PATH.
sudo apt install安装下面依赖包:
libnvidia-container1
libnvidia-container-tools
nvidia-container-toolkit
nvidia-container-runtime
nvidia-docker2 # 非必须