docker使用与镜像提交

edited by nrzheng,20220224

创建镜像

要先准备两个文件,如下图所示:
在这里插入图片描述
其中,Dockerfile内容如下:

# BASE IMAGE
FROM nvidia/cuda:10.0-cudnn7-runtime-ubuntu16.04

SHELL ["/bin/bash","-c"]

WORKDIR /tmp
# copy安装文件
COPY Python-3.6.9.tar.xz /tmp
# 设置 root 密码
RUN echo 'root:password' | chpasswd \
# 安装openssh-server 并配置
  && apt-get update && apt-get -y install openssh-server \
  && sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config \ 
  && sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/g' /etc/ssh/sshd_config \
  && mkdir /var/run/sshd \
# 安装python依赖包
  && apt-get -y install build-essential python-dev python-setuptools python-pip python-smbus \
  && apt-get -y install build-essential libncursesw5-dev libgdbm-dev libc6-dev \
  && apt-get -y install zlib1g-dev libsqlite3-dev tk-dev \
  && apt-get -y install libssl-dev openssl \
  && apt-get -y install libffi-dev \
# 安装python 3.6.9
  && mkdir -p /usr/local/python3.6 \
  && tar xvf Python-3.6.9.tar.xz \
  && cd Python-3.6.9 \
  && ./configure --prefix=/usr/local/python3.6 \
  && make altinstall \
# 建立软链接
  && ln -snf /usr/local/python3.6/bin/python3.6 /usr/bin/python \
  && ln -snf /usr/local/python3.6/bin/pip3.6 /usr/bin/pip\
# 安装pytorch
  && mkdir ~/.pip && echo -e '[global] \nindex-url = https://pypi.tuna.tsinghua.edu.cn/simple' >> ~/.pip/pip.conf \
  && pip install torch===1.2.0 torchvision===0.4.0 -f https://download.pytorch.org/whl/torch_stable.html \
# 清理copy的安装文件
  && apt-get clean \
  && rm -rf /tmp/* /var/tmp/*

EXPOSE 22

CMD ["/bin/bash"]

使用dockerfile创建镜像,先写好Dockerfile,然后放到文件夹里(如上所示),之后在xshell中启用管理员权限,cd到文件夹里运行命令(注意后面有个点)(服务器要联网):

docker build -t + 镜像的名字:版本 .

在这里插入图片描述
运行后可以用命令docker images查看:
在这里插入图片描述
这样我们就创建了一个镜像。
接下来就是在镜像里创建,启动容器。(镜像是静态的,启动容器可以改变容器,但是不会改变镜像,然后再据此创建新的镜像,或者覆盖原来的镜像

创建容器

(在镜像yzc_znr的基础启动容器yzc_znr_container)

docker run -it --gpus all --name yzc_znr_container yzc_znr /bin/bash
  • –gpus all 才能用nvidia-smi查看
  • yzc_znr_container是容器的名字
  • yzc_znr就是刚刚用Dockerfile创建的镜像名字

(run之后就是在容器里了)
在这里插入图片描述
这样就创建了容器并且进入了容器
(可以使用exit退出容器,使用docker ps -a查看所有容器状态,用docker start + 容器id启动id,start只是启动而已,要进去还需要用docker attach + 容器id进入容器)

docker ps -a(查看所有容器状态)
docker start + 容器id启动id(启动容器)
docker attach + 容器id(进入容器)

(具体容器使用命令可以上网查询)

在本地设置好镜像

(比赛的提交过程)

设置容器

就是往容器里面放需要提交的东西,具体要求见上面的文档(没放)。创建工作空间(要求的)命令如下:

  • 退出tmp(dockerfile里面写的):cd
  • 进入/:cd /
  • 创建workspace(提交要求):mkdir workspace
  • 然后cd进去workspace

接下来就是往容器里面的workspace传需要提交的东西。本次比赛需要上传的有(ocr例子):
在这里插入图片描述
可以在window打包好需要的东西(解压出来是零散的文件,而不是文件夹)。再把压缩包传到服务器,再打开一个命令行把压缩包传到容器里,再进行解压。
压缩:
在这里插入图片描述
从服务器把压缩包传到容器:

docker cp /emwusr/zwb/znr/aaaa.zip a27001c20ee6:/workspace
(docker cp local-file-path container-id:container-path)
  • /emwusr/zwb/znr/aaaa.zip:就是要传的压缩包的路径
  • a27001c20ee6:/workspace:容器id:/workspace

再解压(解压完可以把压缩包删了):
在这里插入图片描述
然后要python运行一下那个py文件,把没有的包安装一下。
最后是这样(因为本地没有这两个文件夹):
在这里插入图片描述
(最后记得把运行的py文件改成‘run.py’(比赛提交要求),命令:)
至此,容器就弄好了

将容器改变写回镜像

先exit退出容器
将容器改变写回镜像并改变启动命令:

docker commit --change="WORKDIR /workspace" -c 'CMD ["python","run.py","/input_path", "/output_path"]' yzc_znr_container yzc_znr:v1
  • –change=“WORKDIR /workspace”:这里就是把工作文件夹改到workspace
  • yzc_znr_container:容器名字
  • yzc_znr:v1:镜像名字。可以弄一个新的镜像,如果用原来的镜像名字,就会把原来的覆盖(这里把原来的覆盖了)(注意下图镜像被覆盖,id也不一样了

在这里插入图片描述

创建阿里云仓库

网址
创建个人实例,设置Registry 登录密码,创建私有本地镜像仓库,如下图所示
(下面的内容根据自己的信息设置即可)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
下面是操作指南:
在这里插入图片描述

把镜像传到阿里云

(操作指南看上面)
在本地连接到刚刚创建的阿里云:

docker login --username=damonx registry.cn-hangzhou.aliyuncs.com
  • damonx是阿里云的登陆账号
  • 之后会要输入密码

在这里插入图片描述
打标签:

docker tag 935dafae768f registry.cn-hangzhou.aliyuncs.com/damonzheng46/yzc_znr:aliyun
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/damonzheng46/yzc_znr:[镜像版本号]

在这里插入图片描述
(可以看到id是一样的,就是tag不一样)

push到阿里云上面:

docker push registry.cn-hangzhou.aliyuncs.com/damonzheng46/yzc_znr:aliyun
docker push registry.cn-hangzhou.aliyuncs.com/damonzheng46/yzc_znr:[镜像版本号]

在这里插入图片描述
这样镜像就被传到阿里云上面了
在这里插入图片描述

把阿里云的镜像提交到比赛官网

这里的镜像名称就是:
docker pull registry.cn-hangzhou.aliyuncs.com/damonzheng46/yzc_znr:[镜像版本号]的后面这串registry.cn-hangzhou.aliyuncs.com/damonzheng46/yzc_znr:aliyun

在这里插入图片描述

非第一次提交

之后提交的话,就可以用之前创建的镜像再拉容器出来,然后更改容器里面的内容(如果原来的容器还在的话也可以直接在原来的容器改),再覆盖回镜像,再提交。

  • 更改容器里面的内容
  • 容器写回镜像(可以覆盖掉原来的,注意id就变了)
  • 再登陆阿里云,打tag,push。非第一次上传的话,push就很快了

在这里插入图片描述

一些命令

启动容器:docker run -it --gpus all --name container-name image-name /bin/bash
   
复制文件到容器:docker cp local-file-path container-id:container-path
   
将容器改变写会镜像:docker commit container-id image-name
   
将容器改变写会镜像,并修改启动命令:
docker commit --change="WORKDIR /workspace" -c 'CMD ["python","run.py","/input_path", "/output_path"]' container-name image-name
 
提交至阿里云仓库:
docker login --username=xxx registry.cn-hangzhou.aliyuncs.com
docker tag image-id registry.cn-hangzhou.aliyuncs.com/fudan_ewb_seg/gaofen_allright:v0.1
docker push registry.cn-hangzhou.aliyuncs.com/fudan_ewb_seg/gaofen_allright:v0.1
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

damonzheng46

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值