Docker 学习

docker 学习笔记

1. 基础教程

参考教程:

  1. 菜鸟入门Docker
  2. Docker 封装anaconda环境,生成镜像并打包1
  3. Docker 封装anaconda环境,生成镜像并打包2
  4. Docker 菜鸟教程

2. docker镜像准备

下载基础镜像

1
docker pull ubuntu:18.04

制作镜像

编写Dockerfile文件,内容示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# 使用官方的 Python 3.8 镜像作为基础镜像
FROM python:3.8

# 安装 wget

RUN apt-get update && apt-get install -y wget && rm -rf /var/lib/apt/lists/*

# 下载 Miniconda 安装脚本

RUN wget -q[https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh](https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh) -O miniconda.sh

# 安装 Miniconda

RUN bash miniconda.sh -b -p /opt/miniconda &&
rm miniconda.sh

# 初始化 Conda

RUN /opt/miniconda/bin/conda init bash

# 创建新的 Conda 环境

ENV CONDA_ENV=myenv
RUN conda create -y --name $CONDA_ENV python=3.8

# 激活 Conda 环境

RUN echo "conda activate $CONDA_ENV" >> ~/.bashrc

# 安装所需的包

RUN conda install -y -n $CONDA_ENV numpy pandas matplotlib

# 设置容器内的工作目录

WORKDIR /usr/src/app

# 设置容器启动时的命令

CMD ["/bin/bash"]

构建镜像

1
docker build --network host -t mirrors.tencent.com/star_library/tlinux-64bit-python3.6:0415 .

推送镜像

1
2
3
4
5
6
7
8
9
10
# 以下方括号内容为需要根据实际需求替换的字符串
# 登录至软件源docker registry,[user]为OA账号名,[token]为软件源系统分配,可以通过【快捷指令】获取
sudo docker login --username [user] --password [token] mirrors.tencent.com

# push镜像至软件源docker registry,[image_id]即docker镜像的id,可以通过sudo docker image list命令查看
sudo docker tag [image_id] mirrors.tencent.com/[namespace]/[repo]:[tag]
sudo docker push mirrors.tencent.com/[namespace]/[repo]:[tag]


docker push mirrors.tencent.com/gethinhu/tlinux-64bit-python3.6:0415

3. 调试

为了保证调试时训练程序运行环境与线上实际的运行环境一致,需要在开发机上用与线上相同的docker镜像启动容器

为了方便,平台也准备了一个脚本run_docker.sh,可以从附件下载使用。使用方法:

注意:

如果报错‘run_docker.sh : command not found’,请检查/usr/local/bin是否包含在$PATH里,如果没有,将其加入$PATH。

如果报错‘docker: Error response from daemon: could not select device driver “” with capabilities: [[gpu]].’,是因为开发机没安装nvidia-docker,可以联系O2000(Oteam统一技术支持)解决。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 1. 编写run_docker.sh
# 示例

#!/bin/bash
image_full_name=$1
if [ -z ${image_full_name} ]
then
echo "mirrors.tencent.com/lllzheng/cuda11.8-ubuntu20.04:0511 \n"
exit 0
fi

cmd=$2
if [ -z "${cmd}" ]
then
echo "cd /apdcephfs/private_lllzheng/taiji/peg-in-hole-6D/ \n"
echo "conda activate mujoco \n"
echo "python3 /apdcephfs/private_lllzheng/taiji/peg-in-hole-6D/try_train.py \n"
exit 0
fi

echo ${image_full_name}
echo ${cmd}
docker run -it --gpus all --network=host --name test -v /apdcephfs/:/apdcephfs/private_lllzheng ${image_full_name} ${cmd}

#如果docker -v版本小于19.03,请使用以下docker run命令
#docker run -it -e NVIDIA_VISIBLE_DEVICES=all --network=host -v /apdcephfs/:/apdcephfs/ ${image_full_name} ${cmd}

# sudo bash run_docker.sh mirrors.tencent.com/lllzheng/cuda11.8-ubuntu20.04:0511 /bin/bash -c "cd /apdcephfs/private_lllzheng/taiji/peg-in-hole-6D/ && conda activate mujoco && python3 /apdcephfs/private_lllzheng/taiji/peg-in-hole-6D/try_train.py"

# 2. 运行run_docker.sh
chmod +x run_docker.sh
run_docker.sh ${image_full_name} ${cmd}
eg:run_docker.sh mirrors.tencent.com/star_library/g-tlinux2.2-python3.6-cuda9.0-cudnn7.6-tf1.12:latest /bin/bash -c "python3.6 /apdcephfs/private_gethinhu/mnist_trainer/fully_connected_feed.py --train_dir /apdcephfs/share_986015/mnist_dataset/ --max_steps 100000 --batch_size=1000"

Docker 学习
https://ustc-lizheng.github.io/2024/05/26/docker_learn_note/
作者
高山临溪谷
发布于
2024年5月26日
许可协议