docker复现代码记录

整体流程就是拉取一个官方镜像,然后在官方镜像里面搭一个代码运行所需要的环境,并将代码运行的sh文件也封装到docker里面,最后将这个新的镜像重新打包,然后push到自己的阿里云账户。复现的过程是官方会根据你提供的镜像,在他们的容器(镜像运行的物理环境,这里是指带有4张v100的gpu环境)上重新run sh。具体的过程如下:
1.安装基础工具docker,了解几个操作。
(a)将你做好的镜像上传到指定的仓库:docker push REPOSITORY:TAG, 如果是上传到指定的阿里云账户REPOSITORY需要加上自己的账号和仓库名。
(b)从公共库拉取镜像:docker pull REPOSITORY:TAG
(c)sudo docker images 查看镜像 sudo docker rm id 删除容器 sudo docker rmi images 删除镜像
(d)sudo docker stop $(sudo docker ps -q) 停用所有容器 sudo docker rm $(sudo docker ps -aq) 删除所用容器

2.安装nvidia-docker,用于测试本地的镜像在本地的机器上是否可以运行。
使用这条命令:nvidia-docker run -v /data:/tcdata your_image sh run.sh , 其中/data:需要修改成你的data挂载的绝对路径,your_image 改成本次使用的镜像名字。安装nvidia-docker的时候有一个地方比较坑,按照这个网址https://blog.csdn.net/qq_41493990/article/details/81624419基本可以安装成功,但是测试nvidia-docker的时候,可能会用nvidia-docker run –rm nvidia/cuda nvidia-smi 这条命令来测试,这句话会报一个错误,具体错误记不清楚了,可能是权限不够还是啥的。错误原因在于一定要指定cuda的版本,执行下面的命令:sudo nvidia-docker run --rm nvidia/cuda:9.0-devel nvidia-smi即可。

3.最要命的大概就是在镜像上安装库了,因为使用别的源很容易卡死。我整理了使用阿里云源安装opencv等库的一系列命令,将dockfile写成下列形式,再运行 docker build -t img_name . 即可。shell文件一定要确定好路径哈。

FROM registry.cn-shanghai.aliyuncs.com/tcc-public/pytorch:1.1.0-cuda10.0-py3
ADD . /competition
WORKDIR /competition

# Modify apt-get to aliyun mirror
WORKDIR /
RUN sed -i 's/archive.ubuntu/mirrors.aliyun/g' /etc/apt/sources.list

# Install necessary library
RUN apt-get update
RUN apt-get -y install apt-utils
RUN apt-get -y install git
RUN apt-get -y install lib32z1 libglib2.0-dev libsm6 libxrender1 libxext6 libice6 libxt6 libfontconfig1 libcups2 

# Clone the docker-opencv-python repository
RUN git clone https://github.com/aggresss/docker-opencv-python.git /docker-opencv-python

# Modify pip mirror
WORKDIR /docker-opencv-python
RUN mkdir -p /root/.pip
RUN cp -f pip.conf /root/.pip/

# Install necessary python-library
RUN pip install --upgrade pip
RUN pip install numpy scipy pillow
RUN pip install opencv-python
RUN apt-get -y install zip
RUN pip install scikit-image
RUN pip install sklearn 
CMD ["sh", "run.sh"]

4.向阿里账号上推送镜像的时候,需要将镜像改名,这个在阿里云仓库里面有详细的教程,我就不赘述了。

你可能感兴趣的:(docker复现代码记录)