目录
docker build -f dockerfile文件路径 -t 镜像名称:[tag] .
初识DockerFile
dockerfile 就是用来构建docker镜像的构件文件!脚本命令,先体验一下!!!
通过这个脚本可以生成镜像,镜像是一层一层的,脚本是一个命令一个命令,每一个命令就是一层
# 创建一个dockerfile文件,名字可以随机,建议dockerfile
# 文件中的内容
FROM centos
VOLUME ["volume01","volume02"]
CMD echo "-----end------"
CMD /bin/bash
这里每一个命令就是一层
docker build -f dockerfile文件路径 -t 镜像名称:[tag] .
# 构建一个镜像,使用docker build -f dockerfile文件路径 -t 镜像名称:[tag] .
# -f dokcerfile 的文件目录
# -t 镜像名称:[tag]
# 注意 命令最后必须带一个.
[root@VM-4-3-centos opt]# docker build -f /opt/dockerfile -t ayit/centos:1.0 .
结果查看:
测试了一下刚刚的文件是否同步出去!
这种方式我们使用的非常多,因为我们通常会构件自己的镜像!
假设构建镜像的时候没有挂载卷,要手动挂载卷 -v 卷名:容器内路径
DockerFile 介绍
dockerfile 是用来构件docker 镜像的文件!命令参数脚本!
构建步骤:
1、编写一个dockerfile文件
2、docker build 构建成为一个镜像
3、docker run 运行镜像
4、docker push 发布镜像(Docker Hub、阿里云仓库)
我们先查看一下docker官网是怎么做的Docker Hub
我们点击这个7.0
DockerFile构建过程
基础知识:
1、每个保留关键字(指令)都必须是大写字母
2、执行从上到下顺序执行
3、# 标识注释
4、每个指令都会创建提交一个新的镜像层,并提交
Docker是面向开发的,我们以后要发布项目,做镜像,就需要编写dockerfile文件,这个文件十分简单
Docker镜像逐渐成为企业交付的标准,必须要掌握
步骤:开发,部署,运维!!! 缺一不可!!!!
DockerFile:构建文件,定义了一切的步骤,源代码
DockerImages:通过DockerFile构建生成的镜像,最终发布和运行产品
Docker容器:容器就像是镜像运行起来提供服务
DockerFile指令:
FROM # 基础的镜像层,一切从这里开始构建
MAINTAINER # 镜像是谁写的,姓名<邮箱>
RUN # 镜像构件的时候需要运行的命令
ADD # 步骤:tomcat镜像,这个tomcat压缩包!添加内容
WORKDIR # 镜像的工作目录
VOLUME # 挂载的目录
EXPOSE # 保留端口的配置
CMD # 指定容器启动时要指定的命令,最后一个会生效,可被替代
ENTRYPOINT # 指定容器启动时要指定的命令,可以追加命令
ONBUILD # 当一个构建被集成DockerFile,这个时候就会运行 ONBUILD 的指令,
触发命令
COPY # 类似ADD,将我们的文件拷贝到镜像中!
ENV # 构件的时候设置环境变量
创建一个自己的centos
# 1.编写DockerFile 的文件
[root@VM-4-3-centos dockerfile]# cat mydockerfile
FROM centos
MAINTAINER ayit<www.ayit.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo --------end---------
CMD /bin/bash
# 2.通过这个文件构件镜像
[root@VM-4-3-centos dockerfile]# docker build -f mydockerfile -t mycentos:1.0 .
Successfully built f6b4e9e0f68e
Successfully tagged mycentos:1.0
CMD和ENTRYPOINT 区别
CMD # 指定容器启动时要指定的命令,最后一个会生效,可被替代
ENTRYPOINT # 指定容器启动时要指定的命令,可以追加命令
测试CMD
# 1.编写dockerfile 文件
[root@VM-4-3-centos dockerfile]# cat cmd-test
FROM centos
CMD ["ls","-a"]
# 2.构建镜像
[root@VM-4-3-centos dockerfile]# docker build -f cmd-test -t cmd-test-centos:1.0 .
# 3.运行容器 ----直接追加
[root@VM-4-3-centos dockerfile]# docker run cmd-test:1.0 -l
docker: Error response from daemon: OCI runtime create failed:
starting container process caused: exec: "-l": executable file
ERRO[0000] error waiting for container: context canceled
# 3.运行容器 ----替换命令
[root@VM-4-3-centos dockerfile]# docker run cmd-test:1.0 ls -al
total 56
drwxr-xr-x 1 root root 4096 Sep 18 12:19 .
drwxr-xr-x 1 root root 4096 Sep 18 12:19 ..
-rwxr-xr-x 1 root root 0 Sep 18 12:19 .dockerenv
lrwxrwxrwx 1 root root 7 Nov 3 2020 bin -> usr/bin
drwxr-xr-x 5 root root 340 Sep 18 12:19 dev
drwxr-xr-x 1 root root 4096 Sep 18 12:19 etc
测试ENTRYPOINT
# 1.编写dockerfile 文件
[root@VM-4-3-centos dockerfile]# cat entrypoint-test
FROM centos
ENTRYPOINT ["ls","-a"]
# 2.构建镜像
[root@VM-4-3-centos dockerfile]# docker build -f entrypoint-test -t cmd-entrypoint-centos:1.0 .
# 3.运行容器 ----直接追加
[root@VM-4-3-centos dockerfile]# docker run entrypoint-test:1.0 -l
total 56
drwxr-xr-x 1 root root 4096 Sep 18 12:20 .
drwxr-xr-x 1 root root 4096 Sep 18 12:20 ..
-rwxr-xr-x 1 root root 0 Sep 18 12:20 .dockerenv
lrwxrwxrwx 1 root root 7 Nov 3 2020 bin -> usr/bin
drwxr-xr-x 5 root root 340 Sep 18 12:20 dev
drwxr-xr-x 1 root root 4096 Sep 18 12:20 etc
DockerFile 中很多命令都十分的相似,我们需要了解它们的区别,我们最好的学习就是对比它们测试后的区别
实战tomcat镜像
1、准备镜像文件,tomcat压缩包,jdk压缩包!(注意使用tar包)
2、编写dockerfile文件,官方命名dockerfile,build会自动寻找这个文件,就不需要 -f 指定了
FROM centos
MAINTAINER nni<nni97@163.com>
ADD jdk-8u301-linux-x64.tar.gz /usr/local
ADD apache-tomcat-9.0.53.tar.gz /usr/local
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
ENV JAVA_HOME=/usr/local/jdk1.8.0_301
ENV JRE_HOME=$JAVA_HOME/jre
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV CATALINA_HOME=/usr/local/apache-tomcat-9.0.53
ENV CATALINA_BASH=/usr/local//apache-tomcat-9.0.53
ENV PATH=/sbin:$JAVA_HOME/bin:$PATH:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.53/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.53/logs/catalina.out
3、通过docker build 来构建镜像
[root@VM-4-3-centos dockerfile]# docker run -d -p 8080:8080 -v /opt/tomcat/logs:/usr/local/apache-tomcat-9.0.53/logs -v /opt/tomcat/webapps:/usr/local/apache-tomcat-9.0.53/webapps/ --name tomcat01 tomcat-jdk