1、Docker 安装
背景:是在ubuntu系统中联网的情况下安装docker:
参考手册如下:在 Ubuntu 上安装 Docker 桌面 |码头工人文档
使用 apt 存储库安装
在新主机上首次安装 Docker 引擎之前,需要设置 Docker 存储库。之后
可以安装和更新存储库中的 Docker。
===========================设置存储库===============================
1.更新软件包索引并安装软件包以允许使用 基于 HTTPS 的存储库:
sudo apt-get update sudo apt-get install ca-certificates curl gnupg |
2.添加 Docker 的官方 GPG 密钥:
sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg |
3.使用以下命令设置存储库:
echo \ "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null |
=========================安装Docker引擎========================
- 更新包索引:
sudo apt-get update |
2.安装 Docker Engine、containerd 和 Docker Compose。
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin 3. |
3.通过运行映像来验证 Docker 引擎安装是否成功
sudo docker run hello-world |
Docker 常用命令: # 列出本机的所有 image 文件: docker images # 列出本机的所有 docker容器: docker ps -a # 列出本机的运行中的 docker容器: docker ps 启动容器 Docker start 容器id 退出容器 Docker stop 容器id 删除容器 Docker rm 容器id 删除镜像 Docker rmi 镜像id 进入容器 Docker exec -it 容器id /bin/bash |
2.Docker 环境部署
2.1 docker环境下配置conda
1.拉取anaconda镜像
continuumio/anaconda3 镜像是docker镜像库中star数最高的镜像
docker pull continuumio/anaconda3
用 docker images 指令 查看是否拉取成功。
2.用continuumio/anaconda3镜像创建一个名为test的容器
docker run --name test -idt continuumio/anaconda3
-idt中的 -d 指定容器的运行模式,可以使docker 的服务是在后台运行。但加了 -d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec
执行完该指令后再查看一下容器列表(docker ps -a)
进入test容器,查看conda位置
docker exec -it test /bin/bash
在test容器内查看容器内的anaconda的位置
whereis anaconda
#或者使用
conda info --envs
查看完后接着退出容器:
#快捷键
Ctrl+d
2.2 docker环境下配置conda
退出容器后,在本地环境中,将需要打包的本地复制到docker中:
docker cp /home/b/miniconda3/envs/yolo1.7 test:/opt/conda/envs
其中 : /home/b/miniconda3/envs/yolo1.7 是自己需要打包的本地环境, test是容器名,/opt/conda是在容器内使用 conda info --envs 查看到的根目录。
将本地文件 /home/b/…/tools 复制到test容器的根目录下。
docker cp /home/b/.../tools test:/root/
c容器内查看复制结果并退出容器:
3、打包镜像
Docker commit 容器名 镜像名:版本号
Docker commit bb04671a1aab xiao:latest
4、上传dockerhub
5、为要执行的镜像新建容器并推理运行
docker container run --gpus "device=0" -m 28g --name xiao --rm -v $PWD/TestImage/:/workspace/inputs/ -v $PWD/xiao_outputs/:/workspace/outputs/ xiao:v1 /bin/bash -c './predict.sh'
==========================遇到的问题以及如何解决============================
Ps: docker container run 和docker run都是可以执行的。
-x 是 将后面的所有语句作为一条命令进行执行。
执行sh predict.sh 无法激活conda环境的问题
原因在于
原理的 predict.sh 头文件使用的是bash,
#!/bin/sh
Source /opt/conda/envs/segmental activate segmental
使用sh 执行bash文件无法执行source命令,会报如下错误:
正确做法,需要将激活conda的环境变量的路径写入sh 脚本中:
再执命令:
docker container run --gpus "device=0" -m 28g --name xiao --rm -v $PWD/TestImage/:/workspace/inputs/ -v $PWD/xiao_outputs/:/workspace/outputs/ xiao:v1 /bin/bash -c 'sh predict.sh'
可以正确运行: