DockerFile

DockerFile


DockerFile介绍

dockerfile是用来构建docker镜像的文件,它就是一个命令参数脚本

构建步骤:

1.编写一个dockerfile文件

2.docker build构建成为一个镜像

3.docker run运行一个镜像

4.docker push发布镜像(DockerHub、阿里云镜像仓库)

查看一下官方是怎么做的?

在这里插入图片描述

在这里插入图片描述

很多官方的镜像都是基础包,很多功能是没有的,我们通常需要自己搭建自己的镜像

官方既然可以制作镜像,我们也可以自己构建镜像

DockerFile构建过程

基础知识:

1.每个保留关键字(指令)都必须是大写字母

2.执行顺序是从上到下顺序执行

3.#表示注释

4.每一个指令都会创建提交一个新的镜像层并提交

在这里插入图片描述

dockerfile是面向开发的,我们以后要发布项目,做镜像就需要编写dockerfile文件,这个文件十分简单

Docker镜像逐渐成为了企业交付的标准,所以我们必须要去掌握它

步骤:开发、部署、上线、运维缺一不可

DockerFile:构建文件,定义了一切的步骤,好比是源代码

DockerImages:通过DockerFile构建生成的镜像,这个镜像就是我们最终发布和运行的产品

Docker容器:容器就是镜像运行起来提供服务的

DockerFile的指令

FROM          # 基础镜像,一切从这里开始构建
MAINTAINER    # 镜像是谁写的,一般是姓名+邮箱
RUN           # 镜像构建的时候需要运行的命令
ADD           # 添加内容(压缩包)
WORKDIR       # 镜像的工作目录
VOLUME        # 挂载的目录位置
EXPOSE        # 指定暴露的端口
CMD           # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可以被替代
ENTRYPOINT    # 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD       # 当构建一个被继承的DockerFile,这个时候就会运行ONBUILD的指令(触发指令)
COPY          # 类型ADD,就是将我们的文件拷贝到镜像中(但是不会自动解压)
ENV           # 构建的时候,设置环境变量
实战测试

DockerHub中大多数的镜像都是从这个基础镜像过来的FROM scratch,然后配置需要的软件和配置来进行的构建

在这里插入图片描述

创建一个自己的centos
# 1.编写dockerfile的文件
[root@iZ2zedtw714kk6kmn4p41qZ dockerfile]# vim mydockerfile-centos
[root@iZ2zedtw714kk6kmn4p41qZ dockerfile]# cat mydockerfile-centos
FROM centos

MAINTAINER hzy<876823858@qq.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.通过这个文件来构建镜像
# 命令 docker build -f dockerfile文件路径 -t 镜像名:[tag]
Successfully built 0f3eefd76514
Successfully tagged mycentos:0.1

# 3.测试运行

对比:之前原生的centos
在这里插入图片描述

我们增强之后的centos

在这里插入图片描述

我们可以列出本地镜像的变更历史(docker history 镜像id)

在这里插入图片描述

我们平时拿到一个镜像以后就可以研究它是怎么做的了

CMD和ENTRYPOINT的区别
CMD           # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可以被替代
ENTRYPOINT    # 指定这个容器启动的时候要运行的命令,可以追加命令

测试CMD

# 编写dockerfile文件
[root@iZ2zedtw714kk6kmn4p41qZ dockerfile]# vim dockerfile-cmd-test
FROM centos
CMD["ls","-a"]

# 构建镜像
[root@iZ2zedtw714kk6kmn4p41qZ dockerfile]# docker build -f dockerfile-cmd-test -t cmdtest .

# run运行,发现我们的ls -a生效
[root@iZ2zedtw714kk6kmn4p41qZ dockerfile]# docker run 5bb10bb8cb0b
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var

# 想追加一个命令 -l ls -al
[root@iZ2zedtw714kk6kmn4p41qZ dockerfile]# docker run 5bb10bb8cb0b -l
docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"-l\": executable file not found in $PATH": unknown.

# CMD的情况下 -l替换了CMD["ls","-a"]命令,-l不是命令,所以报错

测试ENTRYPOINT

[root@iZ2zedtw714kk6kmn4p41qZ dockerfile]# vim dockerfile-cmd-entrypoint
[root@iZ2zedtw714kk6kmn4p41qZ dockerfile]# docker build -f dockerfile-cmd-entrypoint -t entrypoint-test .
Sending build context to Docker daemon  4.096kB
Step 1/2 : FROM centos
 ---> 831691599b88
Step 2/2 : ENTRYPOINT ["ls","-a"]
 ---> Running in b9dfd55c6ca9
Removing intermediate container b9dfd55c6ca9
 ---> 02bdf13e0c04
Successfully built 02bdf13e0c04
Successfully tagged entrypoint-test:latest
[root@iZ2zedtw714kk6kmn4p41qZ dockerfile]# docker run 02bdf13e0c04
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
[root@iZ2zedtw714kk6kmn4p41qZ dockerfile]# docker run 
dockerfile-cmd-entrypoint  dockerfile-cmd-test        mydockerfile-centos    

#我们的追加命令,是直接拼接在我们的 ENTRYPOINT 命令的后面的
[root@iZ2zedtw714kk6kmn4p41qZ dockerfile]# docker run 02bdf13e0c04 -l
total 56
drwxr-xr-x   1 root root 4096 Jul  9 12:31 .
drwxr-xr-x   1 root root 4096 Jul  9 12:31 ..
-rwxr-xr-x   1 root root    0 Jul  9 12:31 .dockerenv
lrwxrwxrwx   1 root root    7 May 11  2019 bin -> usr/bin
drwxr-xr-x   5 root root  340 Jul  9 12:31 dev
drwxr-xr-x   1 root root 4096 Jul  9 12:31 etc
drwxr-xr-x   2 root root 4096 May 11  2019 home
lrwxrwxrwx   1 root root    7 May 11  2019 lib -> usr/lib
lrwxrwxrwx   1 root root    9 May 11  2019 lib64 -> usr/lib64
drwx------   2 root root 4096 Jun 11 02:35 lost+found
drwxr-xr-x   2 root root 4096 May 11  2019 media
drwxr-xr-x   2 root root 4096 May 11  2019 mnt
drwxr-xr-x   2 root root 4096 May 11  2019 opt
dr-xr-xr-x 108 root root    0 Jul  9 12:31 proc
dr-xr-x---   2 root root 4096 Jun 11 02:35 root
drwxr-xr-x  11 root root 4096 Jun 11 02:35 run
lrwxrwxrwx   1 root root    8 May 11  2019 sbin -> usr/sbin
drwxr-xr-x   2 root root 4096 May 11  2019 srv
dr-xr-xr-x  13 root root    0 Jul  8 16:52 sys
drwxrwxrwt   7 root root 4096 Jun 11 02:35 tmp
drwxr-xr-x  12 root root 4096 Jun 11 02:35 usr
drwxr-xr-x  20 root root 4096 Jun 11 02:35 var

Dockerfile中很多命令都十分相似,我们最好的学习就是对比他们,然后测试效果

实战:Tomcat镜像

1.准备镜像文件 tomcat压缩包,jdk的压缩包

在这里插入图片描述

2.编写dockerfile文件,官方命令Dockerfile,build的时候会自动寻找这个文件,就不需要-f来指定了

FROM centos
MAINTAINER hzy<876823858@qq.com>

COPY readme.txt /usr/local/readme.txt

ADD jdk-8u251-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.37.tar.gz /usr/local/

RUN yum -y install vim

ENV MYPATH /usr/local

WORKDIR $MYPATH

ENV JAVA_HOME /usr/local/jdk1.8.0_11
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.37
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.37
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080
 
CMD /usr/local/apache-tomcat-9.0.37/bin/startup.sh && tail -F /usr/local//usr/local/apache-tomcat-9.0.37/bin/logs/catalina.out

3.构建镜像

# docker build -t diytomcat .

4.启动镜像

5.访问测试

6.发布项目(由于做了卷挂载,我们直接在本地编写项目就可以了)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值