Docker入门到精通(四)

本文详细介绍了DockerFile的结构、常用指令以及如何使用DockerFile构建基础镜像、安装软件、配置环境,还对比了CMD与ENTRYPOINT的区别,并演示了如何制作Tomcat镜像并发布到DockerHub和阿里云容器服务。
摘要由CSDN通过智能技术生成

一、DockerFile详解
DockerFile是用来构建docker镜像的文件!命令参数脚本!

1:构建步骤
(1)编写一个dockerfile文件
(2)docker build构建成为一个镜像
(3)docker run运行镜像
(4)docker push 发布镜像(DockerHub、阿里云镜像仓库等等)
很多官方镜像都是基础包,很多功能没有,我们通常会自己搭建自己的镜像!官方既然可以制作镜像,那我们也可以!

2:DockerFile构建过程
★基础知识
(1)每个保留关键字(指令)都必须是大写字母
(2)执行从上到下顺序执行
(3)#表示注释
(4)每一个指令都会创建提交一个新的镜像层,并提交!

★DockerFile是面向开发的,我们以后要发布项目,做镜像,就需要编写DockerFile文件,这个文件十分简单!Docker镜像逐渐成为企业交付的标准,必须要掌握!
(1)DockerFile:构建文件,定义了一切的步骤,源代码
(2)DockerImages:通过DockerFile构建生成的镜像,最终发布和运行的产品,原来是jar包、war包
(3)Docker容器:容器就是镜像运行起来提供服务器

3:DockerFile的指令

// 解释
(1)FROM(基础镜像,一切从这里开始构建,centos)
(2)MAINTAINER(镜像是谁写的,姓名+邮箱)
(3)RUN(镜像构建的时候需要运行的命令)
(4)ADD(步骤:tomcat镜像,这个tomcat压缩包,添加内容,会自动解压)
(5)WORKDIR(镜像的工作目录)
(6)VOLUME(挂载卷目录)
(7)EXPOSE(暴露端口配置)
(8)CMD(指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被代替)
(9)ENTRYPOINT(指定这个容器启动的时候需要运行的命令,可以追加命令)
(10)ONBUILD(当构建一个被继承DockerFile这个时候就会运行ONBUILD的指令。触发指令)
(11)COPY(类似ADD,将我们文件拷贝到镜像中)
(12)ENV(构建的时候设置环境变量)

4:实战测试
DockerHub中99%镜像都是从这个基础镜像过来的FROM scratch,然后配置需要的软件和配置来进行构建的。
// 官方的centos镜像很多命令是没有的(例如,vim、ifconfig)

// 创建一个自己的centos

★创建新文件(mydockerfile-centos),开始写命令

FROM centos
MAINTAINER xcgg<xcgg0821@126.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

★docker bulid -f mydockerfile-centos -t mycentos:0.1 .(通过这个文件构建镜像,不要忘记后面的“.”)
// 防止踩坑

原因:centos版本的问题,本次问题报错没有AppStream,而这个AppStream是版本8的centos才有的,是版本8的新增内容,在版本7是没有它的,官网没有提供!
解决:修改FROM centos:7

★docker运行镜像,测试vim与ifconfig命令是否存在

对比之前:工作目录为根目录,命令不全(vim、ifconfig等等)
★docker history 镜像ID(我们可以列出镜像进行的变更历史)

我们平时拿到一个镜像,可以研究一下它是怎么做的!

5:CMD与ENTRYPOINT的区别
(1)CMD(指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被代替)
(2)ENTRYPOINT(指定这个容器启动的时候需要运行的命令,可以追加命令)
★创建新文件(dockerfile-cmd-test),开始写命令

FROM centos:7
CMD [“ls”,”-a”]

★docker build -f dockerfile-cmd-test -t cmdtest .(构建镜像,不要忘记后面的”.”)


★docker run 容器ID(运行镜像)

// 注意:想追加命令”-l”,即”ls -al”,会报错

原因:因为在CMD的情况下,”-l”替换了CMD[“ls”,”-a”]命令,”-l”并不是命令,所以报错

★创建新文件(dockerfile-entrypoint -test),开始写命令

FROM centos:7
ENTRYPOINT [“ls”,”-a”]

★docker build -f dockerfile-entrypoint -test -t entrypointtest .(构建镜像,不要忘记后面的”.”)


★docker run 容器ID(运行镜像)

// 开始追加”-l”命令,发现不会报错,是直接拼接到ENTRYPOINT命令后面的

DockerFile中很多命令都十分的相似,我们需要了解他们的区别。

二、DockerFile制作Tomcat镜像
1:准备镜像文件
(1)tomcat压缩包(apache-tomcat-8.5.35.tar.gz)
(2)jdk压缩包(jdk-8u161-linux-x64.tar.gz)
(3)readme.txt文件


2:编写DockerFile文件,制作并启动镜像
★创建新文件(Dockerfile,官方命名,build会自动寻找这个文件,就不用-f指定了),开始写命令

FROM centos:7
MAINTAINER xcgg<xcgg0821@126.com>

COPY readme.txt /home/zhouziyu/dockerTomcat/readme.txt

ADD jdk-8u161-linux-x64.tar.gz /home/zhouziyu/dockerTomcat
ADD apache-tomcat-8.5.35.tar.gz /home/zhouziyu/dockerTomcat

RUN yum -y install vim
RUN yum -y install net-tools
RUN yum -y install initscripts
RUN yum -y install iputils

ENV MYPATH /home/zhouziyu/dockerTomcat
WORKDIR $MYPATH
ENV JAVA_HOME /home/zhouziyu/dockerTomcat/jdk1.8.0_161
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /home/zhouziyu/dockerTomcat/apache-tomcat-8.5.35
ENV CATALINA_BASH /home/zhouziyu/dockerTomcat/apache-tomcat-8.5.35
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080

CMD /home/zhouziyu/dockerTomcat/apache-tomcat-8.5.35/bin/startup.sh && tail -F /home/zhouziyu/dockerTomcat/apache-tomcat-8.5.35/logs/catalina.out

★docker build -t diytomcat .(构建镜像,不要忘记后面的”.”,镜像文件所在的目录执行)

docker run -d -p 8080:8080 --name xcggtomcat -v /home/zhouziyu/dockerTomcat/webapps:/home/zhouziyu/dockerTomcat/apache-tomcat-8.5.35/webapps/test -v /home/zhouziyu/dockerTomcat/logs: /home/zhouziyu/dockerTomcat/apache-tomcat-8.5.35/logs 容器ID

// 查看容器内部资源

// 日志文件

// 本地webapps添加文件,就会在容器中/webapps/test文件夹中显示出来

 三、发布自己的镜像
1:发布镜像到DockerHub
(1)先注册账号,确定这个账号可以登录
(2)在我们的服务器上提交自己的镜像(记得先登录)
(3)登录完毕就可以提交镜像了,docker push

★docker login -u xcgg0821


★docker push 作者名称/镜像名:版本号(提交镜像,保证连接外网)
// 防止踩坑

原因:缺少tag标签,需要增加tag标签

★docker tag 容器ID 作者名称/镜像名:版本号

// 防止踩坑

原因是push的时候需要带上自己Docker Hub的用户名,用户名/镜像名:版本号这样的形式,可以为这个镜像增加一个TAG。

// 重新发布

// 退出


2:发布镜像到阿里云容器服务

(1)登录阿里云

(2)在找到容器镜像服务

(3)创建命名空间(xcgg)

(4)创建容器镜像(station,私有的,本地仓库)

(5)浏览页面信息

3:补充
★docker save -o 目标文件 容器ID(镜像压缩成包)


★docker load -i 文件名.tar(镜像解压)


// 小结


 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值