问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

DockerFile 镜像打包全流程详解+例子

创作时间:
作者:
@小白创作中心

DockerFile 镜像打包全流程详解+例子

引用
CSDN
1.
https://blog.csdn.net/qq_38304320/article/details/120812153

Dockerfile是用于构建Docker镜像的脚本文件,通过定义一系列的指令来自动化构建过程。本文将详细介绍Dockerfile的基础知识、常用指令以及完整的镜像打包流程,并通过实际例子帮助读者掌握Dockerfile的使用方法。

Dockerfile基础知识

Dockerfile是一个文本文件,包含了构建Docker镜像所需的所有命令和参数。以下是Dockerfile的一些基本规则:

  1. 每个保留关键字(指令)都必须是大写字母
  2. 指令从上到下顺序执行
  3. #表示注释
  4. 每个指令都会创建一个新的镜像层并提交

Dockerfile指令详解

示例1:创建一个带有vim和ifconfig的CentOS镜像

官方的CentOS镜像默认不包含vim和ifconfig命令,我们可以通过以下Dockerfile来创建一个包含这些工具的镜像:

FROM centos
MAINTAINER ldj<666@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

构建镜像的命令如下:

docker build -f /root/ldj/docker-file/dockerfile2-centos -t ldj-centos:1.0 .

示例2:CMD和ENTRYPOINT的区别

CMD和ENTRYPOINT都是用于指定容器启动时运行的命令,但它们的行为有所不同:

  • CMD:只有最后一个会生效,可以被替代
  • ENTRYPOINT:不会被替代,可以追加命令

CMD命令演示

Dockerfile内容:

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

运行命令:

docker run eee738131140 -l

这将导致错误,因为-l替换了CMD中的命令。正确的做法是:

docker run eee738131140 ls -h /root

ENTRYPOINT命令演示

Dockerfile内容:

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

运行命令:

docker run bf83f4af585c
docker run bf83f4af585c -h

ENTRYPOINT不会被覆盖,可以追加命令。

示例3:创建一个Tomcat镜像

这是一个更复杂的示例,展示了如何创建一个包含JDK和Tomcat的镜像:

Dockerfile内容:

FROM centos
MAINTAINER ldj<666@qq.com>
COPY readme.txt /usr/local/readme.txt
ADD jdk-17_linux-x64_bin.tar.gz /usr/local
ADD apache-tomcat-9.0.54.tar.gz /usr/local
RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk-17
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.54
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.54
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.54/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.54/bin/logs/catalina.out

构建镜像:

docker build -t diytomcat .

启动镜像:

docker run -d -p 8088:8080 --name ldjtomcat -v /root/ldj/tomcat/test:/usr/local/apache-tomcat-9.0.54/webapps/test -v /root/ldj/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.54/logs diytomcat

发布镜像:

  1. 注册Docker Hub账号
  2. 登录Docker Hub
docker login --help
  1. 标记并推送镜像
docker tag 10ed4ccc76de ldj/centos:1.0
docker push ldj/centos:1.0

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号