Docker架构分析
Docker说是C/S架构的,Docker的架构图如下:
怎么看出是C/S架构呢,我做了个验证,
服务器:CentOS + Docker
本机:Win10 + Docker
本机装好windows版Docker后,用命令查看:
本机没有什么image,也没有容器在跑。
在本机的环境变量中加上DOCKER_HOST,就切换到了服务器上的环境了:
再在本机执行docker命令:
看到的是服务器上的images和docker,可以看到服务器上正在用容器跑harbor。
所以就可以看出来了确实是C/S模式。再进一步验证一下,
一个npm build好的前端工程目录+Dockerfile,执行docker build命令,就会把本地的文件发往服务器端去打包,公司的网络做了限制了,往服务器发包失败,要是成功了我还看不出在哪儿打的包,失败了就看出来了要往服务器发送本地文件去打包。
前端工程打包
试了两种打包方式:
把npm build出来的东西打包
执行npm run build命令得到dist目录,Dockerfile内容如下,
FROM nginx:alpine
COPY /dist /usr/share/nginx/html
再执行docker build -t xxxxxxx .,打包后docker push推到harbor
直接通过源码打包
直接在前端工程下建立Dockerfile
FROM node:14-alpine as builder
ENV PROJECT_ENV production
# ENV NODE_ENV production
WORKDIR /code
ADD package.json package-lock.json /code
RUN npm ci
ADD . /code
RUN npm run build:prod
# 选择更小体积的基础镜像
FROM nginx:alpine
COPY --from=builder /code/dist /usr/share/nginx/html
再执行docker build -t xxxxxxx .,打包后docker push推到harbor。
用docker iamges --digests -a 看看,可以看到Dockerfile的每行指令,一层一层的往镜像上加东西,最开始的node镜像119M,考两个文件进去120M,执行 npm run build就变成了500多M,最后以nginx镜像为基础加上dist又变成了29M。
再用docker inspect查看一个镜像,可以看到这是哪条命令出来的镜像:
最后分享一个图: