logo
0
0
Login

云原生构建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 ...