七、Docker:DockerFile

其他文章:

一、Docker:概述

二、Docker:安装

三、Docker:命令

四、Docker:可视化管理

五、Docker:镜像(image)

六、Docker:数据卷

七、Docker:DockerFile

八、Docker:Docker网络原理

九、Docker:IDEA整合Docker

----------------------------------------------------------------

七、DockerFile

dockerfile介绍

Dockerfile就是用来构建docker镜像的构建文件!Dockerfile就是一段命令脚本,通过这个脚本可以生成镜像!镜像是一层一层的,脚本是一个一个命令,可以理解成每个命令就是一层镜像。

构建步骤:

1.编写一个dockerfile文件

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

3.docker run 运行镜像

4.docker push 发布镜像(发布到docker hub或者阿里云镜像仓库)

官方的docker hub中都有相关的dockerfile文件:

image-20210507125944628

每个版本都会连接到github的具体dockerFile: https://github.com/CentOS/sig-cloud-instance-images/blob/ccd17799397027acf9ee6d660e75b8fce4c852e8/docker/Dockerfile

image-20210507130132163

通过dockerfile可以看出,centos也是有一个基础镜像,还有一些基本的命令。所以很多命令在centos中都不能使用。因此我们很多时候都会自己做镜像。

docker hub中99%的镜像都是从这个基础镜像过来的: FROM scratch

dockerfile构建的过程

image-20210507130638279

基本知识

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

2.指令从上到下执行

3.#表示注释

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

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

Docker镜像逐渐成为企业交付的标准,必须掌握。

相关指令

FROM # 基础镜像 比如centos
MAINTAINER # 镜像是谁写的 姓名+邮箱
RUN # 镜像构建时需要运行的命令
ADD # 添加,比如添加一个tomcat压缩包
WORKDIR # 镜像的工作目录
VOLUME # 挂载的目录
EXPOSE # 指定暴露端口,跟-p一个道理
RUN # 最终要运行的
CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,而且可被替代
ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD # 当构建一个被继承Dockerfile 这个时候运行ONBUILD指定,触发指令
COPY # 将文件拷贝到镜像中
ENV # 构建的时候设置环境变量

# CMD与ENTRYPOINT的区别
# CMD:指定容器启动时要运行的命令,只有最后一个会CMD生效,而且可被替代。替换的方式: docker run 镜像id 新命令     #新命令会在容器启动后执行
# ENTRYPOINT:和CMD类似,但是是在命令后追加,组成一个新的命令: docker run 镜像id 新命令(参数) # 会将原命令+新命令作为一个整体执行

实战:自己构建一个centos镜像

官方centos镜像的问题
# 官方默认centos,启动后,进入容器,很多命令是没有的,我们可以自定义Dockerfile,使生成的镜像有vim\ifconfig命令
docker run -it centos
自己构建centos镜像
# 创建一个自己的centos

# 1.准备工作 定义Dockerfile
# 进入home目录
cd /home
# 创建一个目录,之后的东西都保存到这里
mkdir dockerfile
# 进入这个目录
cd dockerfile/
# 创建一个dockerfile,名字叫mydockerfile-centos # 官方推荐使用Dockerfile作为相应的名称
vim mydockerfile-centos

# Dockerfile的具体内容
cat mydockerfile-centos
FROM centos  # 基础镜像来源 给官方centos加上自定义的内容
MAINTAINER wuxiaolong<wuxiaolongah@163.com> # 镜像作者信息

ENV MYPATH /usr/local  # 定义一个变量
WORKDIR $MYPATH # docker run后 竟然容器的默认目录

RUN yum -y install vim   # 镜像构建时需要运行的命令 安装vim
RUN yum -y install net-tools # 镜像构建时需要运行的命令 安装net-tools

EXPOSE 80 # 指定暴露端口,跟-p一个道理

CMD echo $MYPATH  # 打印相关信息  指定这个容器启动的时候要运行的命令,只有最后一个会生效,而且可被替代
CMD echo "---end---" # 打印相关信息  指定这个容器启动的时候要运行的命令,只有最后一个会生效,而且可被替代
CMD /bin/bash # 打印相关信息  指定这个容器启动的时候要运行的命令,只有最后一个会生效,而且可被替代

# 2.使用dockerfile构建镜像 最后有个点不能忘  如果配置文件的名字叫Dockerfile,则可以不加-f参数
docker build -f dockerfile-centos -t mycentos:0.1 .

image-20210507181728487

最终返回Successfully表示成功。同时build成功后可以通过docker imagesdocker history 镜像名查看镜像构建的详细信息。可以看到当前这个镜像是怎么一步一步构建起来的,我们平时拿到一个镜像也可以通过这个方法研究一下他是怎么做的。

image-20210507181913635

# 3.启动容器
docker run -it mycentos:0.1 # 版本号必须写,不然他会去找最新的
# 4.进入容器后就可以执行vim和ifconfig相关的命令了。

实战:构建Tomcat镜像

# 第一步:准备镜像文件 tomcat压缩包,jdk压缩包

image-20210507183116632

# 第二步:编写Dockerfile文件
# 官方命名 ==Dockerfile==, build会自动寻找这个文件,就不需要 -f 指定了!

FROM centos
   
MAINTAINER wuxiaolong<wuxiaolongah@163.com> # 镜像作者信息
   
COPY readme.txt  /usr/local/readme.txt  
   
ADD jdk-8u281-linux-x64.tar.gz    /usr/local/  # 添加jdk压缩包 会自动解压到/usr/local/jdk1.8.0_281
ADD apache-tomcat-8.5.59.tar.gz   /usr/local/  # 添加tomcat压缩包 会自动解压到/usr/local/apache-tomcat-8.5.59
   
RUN yum -y install vim    # 镜像构建时,安装vim
ENV MYPATH /usr/local
   
WORKDIR $MYPATH  # 镜像的工作目录,容器运行后会进入该目录
   
ENV JAVA_HOME /usr/local/jdk1.8.0_281          # jdk环境配置
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
   
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.59 # tomcat环境配置
ENV CATALINA_BASH /usr/local/apache-tomcat-8.5.59
   
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin # 环境变量的添加

EXPOSE 8080 # 指定容器内部端口,跟-p一个道理

CMD /usr/local/apache-tomcat-8.5.59/bin/startup.sh && tail -F /usr/local/apache-tomcat-8.5.59/bin/logs/catalina.out  # 指定这个容器启动的时候要运行的命令,只有最后一个CMD会生效,而且可被替代。这里是启动tomcat并查看日志

image-20210507184017651

# 第三步:使用dockerfile构建镜像
# 由于命名为 ==Dockerfile==可以不加 -f 命令
docker build -t diytomcat .
   
# 第四步:运行容器并挂载目录
docker run -d -p 9090:8080 --name ptomcat -v /home/tomcat/test:/usr/local/apache-tomcat-8.5.59/webapps/test -v /home/tomcat/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-8.5.59/logs diytomcat


# 第六步:在宿主机/home/tomcat/test目录下创建index.html文件
# 相当于在容器的/usr/local/apache-tomcat-8.5.59/webapps/test目录下
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
    <h1>测试成功了</h1>
    <h1>wuxiaolong</h1>
</body>
</html>

# 第七步:在浏览器进行访问
http://ip:9090/test/index.html

发布镜像到DockerHub

  • 注册docke rhub账号
  • 在xshell中登录 docker login -u [用户名] 回车后输入密码
  • 给本地镜像按照指定格式进行命名,将本地镜像发布
  • 在xshell中登录 docker logout登出
# 1.使用 tag 命令进行命名  
[root@kk tomcatlogs]# docker tag 8dec2ff80250 u19900101/diytomcat:0.0
[root@kk tomcatlogs]# docker images
REPOSITORY            TAG       IMAGE ID       CREATED        SIZE
diytomcat             latest    8dec2ff80250   5 hours ago    639MB
u19900101/diytomcat   0.0       8dec2ff80250   5 hours ago    639MB

#2.发布 docker push  [镜像名称]:[版本号]
[root@kk tomcatlogs]# docker push u19900101/diytomcat:0.0
The push refers to repository [docker.io/u19900101/diytomcat]
695ac2c9d6b3: Pushed 
652839341dc1: Pushed 
83a7fb7f65e9: Pushed 
3c6cbad0cfce: Pushed 
2653d992f4ef: Pushed 
0.0: digest: sha256:51cad4a88f74a3c6acc275f9dab4b1104402c7aeb4675219066d61f10797393c size: 1373

发布镜像到阿里云

  • 在阿里云中创建一个命名空间 u19900101
  • 创建一个镜像仓库,选则本地仓库
  • 远程登录到阿里云镜像
# 1.登录
$ docker login --username=阿里云账号 registry.cn-hangzhou.aliyuncs.com
# 2.将镜像推送到Registry
$ sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/u19900101/[镜像名称]:[镜像版本号]
$ sudo docker push registry.cn-hangzhou.aliyuncs.com/u19900101/[镜像名称]:[镜像版本号]

在阿里云的镜像仓库中可以找到自己上传的镜像,诡异的是,不能必须要打包为阿里网址开头的才能push上,自己下单无法push上去

总结

image-20210507185731231

也可以通过save和load命令,将镜像编程文件直接发送给其他人运行。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值