Docker基础之DockerFile

文章目录

  • DockerFile
    • DockerFile 介绍
    • DockerFile 构建过程
    • DockerFile 的指令
    • 实战测试
    • 实战:Tomcat镜像
    • 发布自己的镜像
    • 小结


DockerFile

DockerFile 介绍

dockerfile 是用来构建 docker 镜像的文件,命令参数脚本
构建步骤:
1、编写一个 dockerfile 文件
2、docker build 构建成为一个镜像
3、docker run 运行镜像
4、docker push 发布镜像(DockerHub、阿里云镜像仓库)

查看一下官方是怎么做的

Docker基础之DockerFile_第1张图片
Docker基础之DockerFile_第2张图片
很多官方镜像都是基础包,很多功能没有,我们通常都会自己搭建自己的镜像
官方既然可以制作镜像,那我么也可以

DockerFile 构建过程

基础知识:
1、每个保留关键字(指令)都是必须是大写字母
2、执行从上到下顺序执行
3、# 表示注释
4、每一个指令都会创建提交一个新的镜像层,并提交
Docker基础之DockerFile_第3张图片
dockerfile是面向开发的,我们以后要发布项目,做镜像,就需要编写dockerfile文件,这个文件十分简单
Docker镜像逐渐成为了企业交付的标准,必须要掌握!

步骤: 开发,部署,运维 缺一不可
DockerFile : 构建文件,定义了一切的步骤,源代码
DockerImages:通过DockerFile构建生产的镜像,最终发布和运行的产品
Docker容器:容器就是镜像运行起来提供服务器

DockerFile 的指令

以前的话我们就是使用别人的,现在我们知道了这些指令后,我们来练习自己写一个镜像

FROM          # 基础镜像,一切从这里开始构建
MAINTAINER    # 镜像是谁写的,姓名 + 邮箱
RUN           # 镜像构建的时候需要运行的命令
ADD           # 步骤,tomcat镜像,这个tomcat压缩包!添加内容
WORKDIR       # 镜像的工作目录
VOLUME        # 挂载的目录
EXPOST        # 保留端口配置
CMD           # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT    # 指定这个容器启动的时候要运行的命令,可以追加命令。
ONBUILD       # 当构建一个被继承 DockerFile 这个时候就会运行 ONBUILD 的指令,触发指令
COPY          # 类似 ADD ,将我们文件拷贝到镜像中
ENV           # 构建的时候设置环境变量

Docker基础之DockerFile_第4张图片

实战测试

Docker Hub 中99%镜像都是从这个基础镜像过来的 FROM scratch,然后配置需要的软件和配置来进行的构建
Docker基础之DockerFile_第5张图片
创建一个自己的centos
1、编写Dockerfile的文件(vim mydockerfile_centos)

FROM centos
MAINTAINER zhangsan<123344@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]
docker build -f mydockerfile_centos -t mycentos:0.1 .

3、测试运行

docker run -it mycentos:0.1

对比:之前的原生的centos
Docker基础之DockerFile_第6张图片
我们增加之后的镜像
Docker基础之DockerFile_第7张图片


我们可以列出本地镜像的变更历史
Docker基础之DockerFile_第8张图片
我们平时拿到一个镜像,可以研究一下它是怎么做的了?

CMD 和 ENTRYPOINT 区别

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

测试CMD

vim dockerfile_cmd_test
# 编写 dockerfile文件
FROM centos
CMD ["ls","-a"]

# 构建镜像
docker build -f dockerfile_cmd_test -t cmdtest .
# run 运行,发现我们的 ls -a 命令生效
docker run dd8e4401d72f

# 想追加一个命令 -l   ls- al  出现如下图片报错
docker run dd8e4401d72f -l

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

在这里插入图片描述
测试 ENTRYPOINT

vim dockerfile_cmd_entrypoint

FROM centos
ENTRYPOINT ["ls","-a"]

docker build -f dockerfile_cmd_entrypoint -t entrypoint-test .

# 我们的追加命令,是直接拼接在我们的 ENTRYPOINT 命令的后面
docker run 3c4c9621ed91 -l

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

实战:Tomcat镜像

1、准备镜像文件压缩包 tomcat 压缩包,jdk的压缩包
Docker基础之DockerFile_第9张图片
2、编写dockerfile文件,官方命名 Dockerfile,build会自动寻找这个文件,就不需要 -f 指定了

# 1、编写Dockerfile
vim Dockerfile

FROM centos
MAINTAINER xiaoming<123333@qq.com>

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

ADD jdk-8ull-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.22.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.22
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.22
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080

CMD /usr/local/apache-tomcat-9.0.22/bin/startup.sh && tail -f /usr/local/apache-tomcat-9.0.22/logs/catalina.out

3、构建镜像

docker build -t diytomcat .

4、启动镜像

docker images

docker run -d -p 9090:8080 --name xiaomingtomcat -v /home/xiaoming/build/tomcat/test:/usr/local/apache-tomcat-9.0.22/webapps/test -v /home/xiaoming/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.22/logs diytomcat

5、访问测试
6、发布项目(由于做了卷挂载,我们直接在本地编写项目就可以发布了)

mkdir WEB-INF
cd WEB-INF
vim web.xml
cd ..
vim index.jsp

Docker基础之DockerFile_第10张图片
发现:项目部署成功,可以直接访问ok
我们以后开发的步骤:需要掌握 Dockerfile 的编写,我们之后的一切都是使用docker镜像来发布运行!

发布自己的镜像

DockerHub
1、地址 https://hub.docker.com/ 注册自己的账号
2、确定这个账号可以登录
3、在我们服务器上提交自己的镜像
Docker基础之DockerFile_第11张图片
4、登录完毕后就可以提交镜像了,就是一步 docker push
Docker基础之DockerFile_第12张图片
阿里云镜像服务上
1、登录阿里云
2、找到容器镜像服务
3、创建命名空间
4、创建容器镜像
5、浏览阿里云

阿里云容器镜像就参考官方地址

小结

Docker基础之DockerFile_第13张图片

你可能感兴趣的:(Docker,docker,容器,运维)