首页 > 其他分享 >将项目封装进docker进行迁移和使用

将项目封装进docker进行迁移和使用

时间:2023-03-02 14:25:48浏览次数:52  
标签:容器 封装 -- pytorch detrex 镜像 docker 迁移

首先要理解docker的基本使用,本文不做过多阐述,博主也对docker没有了解透彻。

这里列一下docker的基本命令:

docker info           # 查看docker信息
docker -v             # 查看docker版本
docker images         # 查看docker所有的镜像
docker ps -a             # 查看docker所有的容器
docker rm ${容器id}     # 删除容器
docker rmi ${镜像id}  # 删除镜像  -f:强制删除;
docker cp ${本地文件的路径} ${容器id}:${容器内文件路径}    # 传输文件,宿主机->容器
docker cp ${容器id}:${容器内文件路径} ${本地文件的路径}    # 传输文件,容器->宿主机
docker start ${容器名}  # 启动容器
docker attach ${容器名}  #进入容器
docker stop ${container id}  # 根据容器id终止运行的容器
Ctrl+d # 退出容器
Ctrl+p+q  # 退出容器而不关闭
docker rename ${旧的容器名} ${新容器名}  # 修改容器名字
docker tag ${旧的容器id\旧的镜像名} ${新的镜像名}
docker commit -m ${备注信息} ${容器id/容器名} ${新的镜像名}:${新的镜像tag}  # 修改完容器中内容,保存为新的镜像

docker save -o ${目标文件} ${镜像名}:${镜像tag}	# 镜像导出
docker save -o nginx.tar nginx:latest	# 样例,其中-o和>表示输出到文件,nginx.tar为目标文件,nginx:latest是源镜像名(name:tag)
docker load -i ${目标文件}					# 镜像导入
docker load -i nginx.tar			# 样例, 其中-i和<表示从文件输入。会成功导入镜像及相关元数据,包括tag信息

docker run --name=${容器名} --ipc=host -it --gpus all -p ${主机端口}:${容器端口} --cpu-shares 1024 -v ${主机文件夹}:${容器文件夹} ${REPOSITORY}:${TAG} /bin/bash

docker run --name=mmdet --ipc=host  -it --gpus all -p 7777:8888 --cpu-shares 1024 -v /home/gy77:/workspace/ pytorch/pytorch:1.12.0-cuda11.3-cudnn8-devel /bin/bash
# --name: 容器名
# --ipc=host: 容器间共享宿主机的内存
# -i: 交互式操作。
# -t: 终端。
# --gpus all :启动所有的gpu
# detrex:v1: 这是指用 ubuntu 15.10 版本镜像为基础来启动容器。
# --cpu-shares 1024 : 设置容器按比例共享CPU资源(容器A是1024,容器B是2048,则是按照1:2)
# /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

# docker增加非管理员的权限
cho $USER
sudo gpasswd -a $USER docker
newgrp docker

docker 添加国内镜像源

ubuntu:

vim /etc/docker/daemon.json 

内容如下:

{
    "registry-mirrors": [
        "http://hub-mirror.c.163.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://registry.docker-cn.com"
    ]
}
service docker restart		# 重启docker
docker info 			 # 验证是否成功

封装项目

本文以detrex项目为例,讲解如何把一个项目封装进docker以便更好的转移。

1️⃣ 拉取pytorch镜像

ptorch镜像网址:https://hub.docker.com/r/pytorch/pytorch/tags

去找一个适合自己的pytorch版本镜像,拉取到本地。这里博主拉取 pytorch:1.12.0-cuda11.3-cudnn8-devel 。可以看到是对应的cuda11.3版本,在宿主机(也就是服务器)中安装的cuda版本最好一致。

⚠️ 值得注意的是,我们要拉取结尾为devel 的镜像。

docker pull pytorch/pytorch:1.12.0-cuda11.3-cudnn8-devel

2️⃣ 创建容器

拉取完毕后,我们可以用docker images 命令查看一下,创建容器

gy77@ECS-yd24:~$ docker images
REPOSITORY         TAG                                             IMAGE ID         CREATED          SIZE
pytorch/pytorch   1.12.0-cuda11.3-cudnn8-devel  43a3ceca55fd   8 months ago  14.1GB

根据自己的需求创建容器:

docker run --name=${容器名} --ipc=host -it --gpus all -p ${主机端口}:${容器端口} --cpu-shares 1024 -v ${主机文件夹}:${容器文件夹} ${REPOSITORY}:${TAG} /bin/bash

# 例子:
docker run --name=detrex --ipc=host  -it --gpus all -p 7777:8888 --cpu-shares 1024 -v /home/gy77:/workspace/ pytorch/pytorch:1.12.0-cuda11.3-cudnn8-devel /bin/bash
# --name: 容器名
# --ipc=host: 容器间共享宿主机的内存
# -i: 交互式操作。
# -t: 终端。
# --gpus all :启动所有的gpu
# detrex:v1: 这是指用 ubuntu 15.10 版本镜像为基础来启动容器。
# --cpu-shares 1024 : 设置容器按比例共享CPU资源(容器A是1024,容器B是2048,则是按照1:2)
# /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

3️⃣ 连接容器

创建容器后,我们就可以在另一个终端中利用 dockers ps -a 命令看到已启动的容器。

如果想让一个新的终端窗口进入容器,使用docker attach命令(容器启动的情况下),容器未启动的情况下,先启动容器。

docker start ${容器名}   # 启动容器
docker attach ${容器名}   # 连接容器

4️⃣ 在容器中搭建我们项目的环境。

⭐ 每个人的项目不一致,这里就需要自己在容器中搭建自己的项目环境了。

# 基础的ubuntu软件包先更新一下:
apt update

# 搭建项目环境(detrex为例):
cd /workspace
git clone https://github.com/IDEA-Research/detrex.git
cd detrex
git submodule init
git submodule update
python -m pip install -e detectron2
pip install -e .

# 测试推理你的项目
cd detrex

# download pretrained DINO model
wget https://github.com/IDEA-Research/detrex-storage/releases/download/v0.2.1/dino_r50_4scale_12ep.pth

# download the demo image
wget https://github.com/IDEA-Research/detrex-storage/releases/download/v0.2.1/idea.jpg

# 验证gpu
python demo/demo.py --config-file projects/dino/configs/dino_r50_4scale_12ep.py \
                    --input "./idea.jpg" \
                    --output "./demo_output.jpg" \
                    --opts train.init_checkpoint="./dino_r50_4scale_12ep.pth"

5️⃣ 将容器打包为镜像。

docker commit -m ${备注信息} ${容器id/容器名} ${新的镜像名}:${新的镜像tag}  # 修改完容器中内容,保存为新的镜像

6️⃣ 镜像导出和导入

docker save -o ${目标文件} ${镜像名}:${镜像tag}	# 镜像导出
docker save -o detrex_img.tar detrex:latest	# 样例,其中-o和>表示输出到文件,nginx.tar为目标文件,nginx:latest是源镜像名(name:tag)
docker load -i ${目标文件}					# 镜像导入
docker load -i detrex_img.tar			# 样例, 其中-i和<表示从文件输入。会成功导入镜像及相关元数据,包括tag信息

标签:容器,封装,--,pytorch,detrex,镜像,docker,迁移
From: https://www.cnblogs.com/gy77/p/17171612.html

相关文章

  • Docker + Verdaccio搭建Npm私有库
    废话不说,直接进入正题。搭建私服需要一台服务器,1核2G即可。一、安装Dockerlinux 服务器使用 curl下载快速安装的shell脚本curl-fsSLget.docker.com-oget-docker.......
  • docker启动mysql注意事项
    1.编码问题登录mysql伪终端mysql查看编码showvariableslike'character%';宿主机在conf.d中添加配置my.cnf文件[client]default_character_set=utf8[mysqld]c......
  • Dockerfile构建镜像
    一、什么是DockerfileDockerfile用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本二、Dockerfile构建镜像过程本文以构建一个eureka单机版服务镜像为例1.......
  • 轻量级CI/CD发布部署环境搭建及使用_04_docker安装nexus3
    轻量级CI/CD发布部署环境搭建及使用_04_配置宿主机的环境:jdk、maven、node、pythod2尽自己的绵薄之力,为开源技术分享添砖加瓦 1,搜索nexus3dockersearchnexus32,拉......
  • 在需要使用 docker-compose 的时候,报错:-bash: docker-compose: 未找到命令
    在需要使用docker-compose的时候,报错:-bash:docker-compose:未找到命令是因为服务器中没有安装docker-compose,需要进行安装。优先使用你的服务器发行版提供的docker......
  • docker+gunicorn+fastapi部署
    一、准备工作1、先确保项目可以正常运行2、使用pipfreeze导出第三方库3、在项目根目录新建pip.conf文件,写入一下内容[global]index-url=http://......
  • centos 安装 docker
    1、查看系统要求Docker要求CentOS系统的内核版本高于3.10,查看CentOS的内核版本。uname-a2、删除旧版本yumremovedockerdocker-commondocker-selinuxdocker......
  • docker启动mysql报错Can't read dir of '/etc/mysql/conf.d/'
    执行命令:dockerrun-p3306:3306--privileged=true-v/mysql/data:/var/lib/mysql-v/mysql/log:/var/log/mysql-v/mysql/conf:/etc/mysql-eMYSQL_ROOT_PASSWORD=......
  • K8S 1.20 弃用 Docker 评估之 Docker 和 OCI 镜像格式的差别
    背景2020年12月初,Kubernetes在其最新的Changelog中宣布,自Kubernetes1.20之后将弃用Docker作为容器运行时。弃用Docker带来的,可能是一系列的改变,包括不限于:......
  • docker vue dist 部署
    1.准备vue打包后的dist2.部署docker 1.准备vue打包后的dista:1个dist目录;1个Dockerfile文件。内容如下:FROMnginxCOPYdist//usr/share/nginx/html/ 说明:自动......