Dockerfile指令集
对于Dockerfiel而言,是在学习docker工具里面,最重点的内容,它可以帮助我们生成自己想要的基础镜像。部署一个容器最重要的就是镜像,指令都已经内置好了。
FROM 这个镜像的妈妈是谁?(指定基础镜像)
MAINTAINER 告诉别人,谁负责养它?(指定维护者信息,可以没有)
RUN 你想让它干啥(在命令前面加上RUN即可)
ADD/COPY 给它点创业资金(COPY文件,会自动解压)
WORKDIR 我是cd,今天刚化了妆(设置当前工作目录)
VOLUME 给它一个存放行李的地方(设置卷,挂载主机目录)
ENV 告诉这个镜像你有哪些工具(设置环境变量 )不会占用镜像层数 echo $PATH
EXPOSE 它要打开的门是啥(指定对外的端口)希望暴露的端口号CMD 奔跑吧,兄弟!(指定容器启动后的要干的事情)写的是shell的指令
Dockerfile中的copy和add差别
add:如果所拷贝的文件是一个压缩包,在增加一个目标位置,它会先将压缩包解压,然后把压缩包解压后的内容放到压缩位置。add把压缩包解压过去,(一般情况下压缩包这种东西除非回滚会使用,打镜像的时候一定是单一任务完成的指令是最稳妥的因为最容易控制)
copy:拷贝一个压缩包,只会把压缩包放到对应的目录就完事了。没有任何的多余动作。(copy常用)
cd /opt/test
touch Dockerfile
vim Dockerfile
看run能不能正常实现创建文件。
docker build -t test:v0.1 .
镜像的打包构建,目标镜像名test:v0.1 根据当前目录进行构建
Dockerfile单阶段构建镜像
单阶段构建镜像采用前端的vue项目作为基点,打包vue项目到机器中进行部署。
在公司,前端进行工作是需要电脑里面装有node js的环境的,需要把安装包放在机器里,才能进行前端代码的编写,需要先下载一个node,js的包。
18.12.1 LTS 长期支持版本 19.0.1 Current 开发版本
需要先下载一个包,安装到你的机器,再去开发前端的程序,才能开发,必须有一个开发的环境。就像python,必须下载python的解释器,才能写python。
解决环境的途径是:有一个镜像,在镜像里包含了环境。
环境有了,把代码拷贝进去就成了。以node:18.12.1为基底镜像,将我的代码拷贝进去,然后给代码运行起来,就能形成一个前端的项目,而服务器里不用装node js的环境,只需要把新打包的环境放上去运行就ok。现在需要node js的环境。
单阶段构建:一个阶段使用编程语言的环境,将代码拷到编程语言的环境,再把代码运行起来,就完成了单阶段的构建。
缺点:打出来的镜像比较大。
去安装它的一些依赖,js代码,包括html的代码就把它运行起来了。
Dockerfile多阶段构建镜像
单阶段构建所产生的镜像太大了,如果既想完成代码的测试,又想缩小镜像的大小。如何去做到?
采用第一个node js的镜像,去对我们的前端代码进行打包编译,把编译后的产物给它拷贝到另外一台基底镜像中,以此就可以把源代码正常的解析出来,就可以完成对源代码镜像的封装。实际上在前端的vue基础之上可以进行依赖的安装。
run build 这个指令会生成一个dist目录,dist目录就是把前端的代码,包括依赖的一些包全都打包到dist目录中,这个目录中就是由vue这个项目写出来的一堆代码,由于脱离了node js环境无法运行的代码,让它能够达到纯净度极高的一个html css js 的代码程度,让它摆脱node js 照样可以运行。
在这个过程中只需要向浏览器去提供这些文件就可以,需要一个中间件nginx,只要把dist目录放到nginx里就完成能摆脱node js的环境,从而实现最终打出来的镜像大小。
在一个dockerfile遍写两个集体镜像。
第一个集体镜像专门用作将前端的项目代码,打包出js目录来
第二个集体镜像只需要拷贝从第一个阶段到第二个阶段