一,Dockerfile的概念和用途
概念:dockerfile本质上是包含一组或多组docker镜像命令的文档,通过文档docker可以构建镜像
一,dockerfile镜像构建和传统构建镜像的对比(以Tomcat项目为例)
1,传统docker构建镜像的过程:
- 拉取远程仓库tomcat镜像
- 用基础镜像构建tomcat容器
- 项目编码完成,打成war包
- 通过cp或者数据卷把war包放入tomcat容器中
- tomcat解析war包运行项目
- 通过commit把容器打包成镜像
- 在通过save把docker镜像保存到本地
传统构造过程至少要有五步才能完成构建
2,dockerfile构建镜像的过程:
- 拉取远程仓库Tomcat镜像做为基础镜像
- 打包项目成war包
- 书写dockerfile命令到dockerfile文件中
- 通过docker -build命令直接构建
docker除了写dockerfile文件,其实只需要一步就完成镜像的构建
二,dockerfile的作用
主要用来帮助我们构建自定义的镜像,dockerfile为镜像文件和描述文件
出现原因:传统方式构建镜像太过繁杂
核心作用:方便用户在开发过程中将自己的应用打包成镜像
二,Dockerfile命令
Dockerfile格式:第一条命令必须是FROM指定基础镜像,命令标识必须大写,通过#注释
1,FROM:指定基础镜像,必须为第一条命令
三种书写格式:
- FROM image
- FROM image:tag
- FROM image@digest
注:tag和digest是可选的,如果不使用这两个值,会使用latest版本的镜像
FROM mysql FROM mysql:5.6
2,RUN:构建镜像时执行的命令
两种书写格式:
- shell形式:run后面直接写shell命令
- exec形式:run后面写json格式的命令(本质上执行的还是shell命令)
注:RUN指令创建的中间镜像会被缓存,并会在下次构建中使用。如果不想使用这些缓存镜像,可以在构建时指定--no-cache参数,如:docker build --no-cache
#shell形式 run ll / #exec形式 run ["ll","/"]
3,CMD:构建容器后要执行的命令(也就是容器启动时才能被调用)
和RUN一样两种书写格式:不重复
注: CMD不同于RUN,CMD用于指定在容器启动时所要执行的命令,而RUN用于指定镜像构建时所要执行的命令,CMD指令会被后面的CMD指令和run自带的命令覆盖
CMD echo "This is a test." | wc - CMD ["/usr/bin/wc","--help"]
4,ENTPYPOINT:配置容器使其可执行化(配合CMD命令使用)
和RUN一样两种书写格式:不重复
注:ENTRYPOINT与CMD非常类似,不同的是通过docker run执行的命令不会覆盖ENTRYPOINT,而docker run命令中指定的任何参数,都会被当做参数再次传递给ENTRYPOINT。Dockerfile中只允许有一个ENTRYPOINT命令,多指定时会覆盖前面的设置,而只执行最后的ENTRYPOINT指令。
FROM ubuntu ENTRYPOINT ["top", "-b"] CMD ["-c"]
一般在使用使用CMD为ENTPYPOINT传参,run动态覆盖CMD的内容
5,EVN:设置环境变量
两种书写格式:name变量名,value变量值
- ENV name=value
- ENV name value
调用EVN变量:$name
ENV myname=wql ENV mysex nan RUN echo $mysex >wql.txt
6,EXPOSE:指定对外界开发的端口(与主机做端口映射必须指定)
格式:EXPOSE port [port]
一次可以开发多个端口
注:EXPOSE并不会让容器的端口访问到主机。要使其可访问,需要在docker run运行容器时通过-p来发布这些端口,或通过-p参数来发布EXPOSE导出的所有端口
EXPORE 8080 443 EXPOSE 8011
7,WORKDIR:指定工作目录(进入容器时会直接跳到此目录)
格式:WORKDIR pth
WORKDIR /usr/tomcat/webapps
8,COPY:将本地文件或目录添加到容器指定目录中
格式:COPY locanpath conatinerpath
#拷贝本地文件wql.txt到容器的tomcat目录中 COPY ./wql.txt /home/tomcat #拷贝当前整个目录到容器home目录中 COPY ./ /home
9,ADD:如COPY一样都将本地拷贝到容器
ADD的拷贝特性(COPY不具备):
- 拷贝tar类型的文件会自动进行解压
- 可以通过wget下载网络资源到容器
#下载网络图片到容器image目录 ADD wget http://wql.luoqin.ltd/wp-content/uploads/2020/04/1.jpg /home/image #拷贝wql.tar文件到容器home目录 ADD ./wql.tar /home
10,VOLUME: 义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。
格式:
- VOLUME ["path1", "path2"...]
- VOLUME path
在启动容器 docker run 的时候,我们可以通过 -v 参数修改挂载点。
三,Docker加载Dockerfile命令
命令:docker build 目录
参数:
- -t:指定镜像的名称和版本号(wql:1.0)
- -f:指定要使用的Dockerfile文件的路径
- -m:设置内存最大值
- -q:安静模式创建(只输出镜像ID)
注:.代表当前目录和linux的./是一样的
#把当前目录文件打包成镜像 docker build -t wql:1.0 -f ./Dockerfile -q .
Comments | NOTHING
Warning: Undefined variable $return_smiles in /www/wwwroot/wql_luoqin_ltd/wp-content/themes/Sakura/functions.php on line 1109