一、背景
我们难免会有定制docker image的需求,本文就以前端项目依赖的Node环境为例,讲述如何把自定义的镜像由一个私库推送到另外一个私库的场景。
本文分为两部分,一是编写定制的Dockerfile文件;二是把harbor私库的镜像推送到nexus私库。
二、Dockerfile
在dockerhub搜索node,https://hub.docker.com/search?q=node
进入后,选择你在用的node版本。
FROM node:16.13.0ARG VUE_CLI_VERSION=3.3.0
ENV VUE_CLI_VERSION ${VUE_CLI_VERSION}ENV NPM_CONFIG_LOGLEVEL infoRUN apt-get -y update
RUN apt-get install -y zip unzip# 使用淘宝镜像,加速下面的安装lerna
RUN echo "\
registry=https://registry.npm.taobao.org/ \n\
proxy=null \n\
strict-ssl=false \n\
sass_binary_site=https://npm.taobao.org/mirrors/node-sass/ \
" > /root/.npmrcRUN npm install -g lernaWORKDIR /home/node/nemv
三、推送harbor私库的镜像到nexus私库
1、本地已有制作好的镜像
docker images | grep xxx
先找到要推送的镜像,然后打tag标签,最后push推送到nexus。
root@dev-vm-jvm-worker-01:~# docker images | grep composer
harbor.xx.cloud/library/xx-composer 2.0.14 0690257d107b 2 years ago 169MBroot@dev-vm-jvm-worker-01:~# docker tag harbor.xx.cloud/library/xx-composer:2.0.14 192.168.5.6:8086/library/xx-composer:2.0.14root@dev-vm-jvm-worker-01:~# docker push 192.168.5.6:8086/library/xx-composer:2.0.14
The push refers to repository [192.168.5.6:8086/library/xx-composer]
776b99c66f0b: Pushed
8b0cb31cc99e: Pushed
4ec04a860bcf: Pushed
440afdd54420: Pushed
26beb482d6f3: Pushed
3c2df1de189c: Pushed
89d01b1c277b: Pushed
110755da6eb9: Pushed
02708184b93d: Pushed
0a1e5e00585b: Pushed
6cfea6e4001e: Pushed
5b838bbb8048: Pushed
493cc3941b45: Pushed
5d718d40b44e: Pushed
24e52497c24f: Pushed
86d905c1f58e: Pushed
22573737ba76: Pushed
777b2c648970: Pushed
2.0.14: digest: sha256:2e1a3138a004fe20939685b0b64fdce290e883bcc406ebd8523a747a45be83f7 size: 4080
2、本地没有已制作好的镜像
整个流程就多了第一步build环节,其他同上。
docker build -t library/xx-composer:2.0.14 .
四、总结
node版本如要升级,只需要修改Dockerfile中的版本号即可。
官方node镜像默认就支持yarn和npm,无需我们额外去安装。
当然,第一次由于是从dockerhub下载,网络差异,镜像的构建速度可能会比较慢。但是后面拉取私库的自定义镜像就比较快速了。