logo
0
0
WeChat Login
Forkfromcnb-xu/docker, behindmain2 commits

云原生构建Docker镜像

本仓库简介了云原生构建Docker镜像的流程。

Docker镜像制作

选择基础镜像

选择合适的基础镜像可以简化构建难度和工作量,基础镜像的名称可以在毫秒镜像查询。

常用基础镜像:nvidia/cudapytorch/pytorch

准备Dockerfile

docker build 命令默认使用当前工作目录下的Dockerfiledockerfile。如果是其他名称,需要使用docker build -f 自定义文件名称

dockerfile示例:

# 指定基础镜像
FROM ubuntu:24.04

# 设置工作目录,可选,一般不指定
# WORKDIR <路径>

# 复制文件/文件夹到docker内部,可选
# COPY <本地文件/文件夹的路径> <docker内部的路径>

# 设置环境变量,该环境变量仅在镜像构建阶段和运行阶段生效
# <变量名称>和<值>之间可用空格隔开,也可以写成<变量名称>=<值>,可以使用续行符 \ 同时设置多个环境变量
# ENV <变量名称> <值>
# ENV <变量名称>=<值>
# ENV <变量名称1>=<值1> \
#     <变量名称2>=<值2>

# 在docker内运行命令,可以使用续行符 \ ,也可以写在一行。每一个RUN都会构建一个新的layer,尽量将相关命令整合到一起运行,以减少layer的生成
# RUN <docker内需要运行的命令>

# apt install 会自动处理软件包的安装顺序,不需要人为指定安装顺序,即可以将所有需要安装的软件包写在一起
# 安装软件包后应清理缓存,以减小镜像大小
RUN apt update -y \
    && apt install -y --no-install-recommends \
        ca-certificates curl wget \
        aria2 git git-lfs htop jq rsync openssh-server pigz tree unzip vim \
    && rm -rf /var/lib/apt/lists/*

# 安装code-server和扩展
# 此处create_languagepacks脚本来源于https://cnb.cool/examples/ecosystem/chinese-env,用于生成vscode中文插件必要的配置文件
RUN curl -fsSL https://code-server.dev/install.sh | sh \
    && rm -f $HOME/.cache/code-server/code-server* \
    && code-server --install-extension cnbcool.cnb-welcome \
    && code-server --install-extension ms-ceintl.vscode-language-pack-zh-hans \
    && curl -fsSL https://cnb.cool/cnb-xu/docker/-/git/raw/main/create_languagepacks | sh

# 设置中文编码格式
ENV LANG=C.UTF-8 \
    LANGUAGE=C.UTF-8

构建镜像(docker build)

# cd dockerfile所在目录
# docker build -t docker.cnb.cool/{repository-path}:latest .

# 这里的repository-path指制品地址
# 制品地址可以是仓库{repo-id}(可从环境变量$CNB_REPO_SLUG_LOWERCASE获取),例如本仓库cnb-xu/docker,实测只要是自己仓库的repo-id都可以
# 制品地址也可以是仓库{repo-id}/自定义字段,例如:cnb-xu/docker/cuda
# :latest为镜像标签(tag)
# 注意命令最后的这个 . 不能少!

# 示例:
cd /workspace
docker build -t docker.cnb.cool/$CNB_REPO_SLUG_LOWERCASE/ubuntu:24.04-zh-hans-vscode .

# 镜像制作成功后会显示:
# => => naming to docker.cnb.cool/cnb-xu/docker/ubuntu:24.04-zh-hans-vscode

上传镜像(docker push)

# docker push docker.cnb.cool/{repository-path}:latest

# 这里的 docker.cnb.cool/{repository-path}:镜像标签 要和前面构建的一致

# 示例:
docker push docker.cnb.cool/$CNB_REPO_SLUG_LOWERCASE/ubuntu:24.04-zh-hans-vscode

简化的 docker build+push 命令(脚本)

# build 自定义镜像标签

# 例如:
build ubuntu-24.04-zh-hans-vscode

该命令只能在dockerfile同级目录下运行,只支持自定义镜像标签,制品地址从环境变量$CNB_REPO_SLUG_LOWERCASE获取并自动添加。

简化的 git 命令(和上面的docker镜像制作没有联系~)

这里做了两个简化的 git 命令,方便快速更新仓库,脚本在.ide/script里,环境启动后自动alias,终端内可直接运行。

添加文件或文件夹(终端内运行):

add 文件或文件夹的路径1 文件或文件夹的路径2 文件或文件夹的路径3 ...

删除文件或文件夹(终端内运行,谨慎操作!):

del 文件或文件夹的路径1 文件或文件夹的路径2 文件或文件夹的路径3 ...

About

云原生构建Docker镜像

Language
Shell100%