Docker 之 Dockerfile
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
一、官方镜像
学习docker镜像的制作之前,先去看看官方的镜像是怎么制作的,查看官方dockerfile的方式如下所示
-
进入官方镜像仓库,搜索镜像,如下图所示
-
找到镜像后,查看的相应的版本信息并进入到github
-
进入github后,即可看到官方的Dockerfile,通过Dockerfile文件后,可以清晰的看到镜像的制作过程
二、Dockerfile构建过程
- 基础知识:
- 每个关键字(指令)都必须是大写字母
- 执行流程是从上到下顺序执行
- "#" 表示注释
- 每一个指令都会创建提交一个新的镜像层,并提交
- 步骤
- Dockerfile:构建文件,定义了一切的步骤,源代码
- Dockerimages:通告Dockerfile构建生成的镜像,最终发布运行的产品
- Docker容器:容器就是镜像运行起来提供服务
三、命令
FROM # 基础镜像,一切从这开始构建 MAINTAINER # 镜像是谁写的,姓名+邮箱 RUN # 镜像构建的时候需要运行的命令 ADD # 添加内容 WORKDIR # 镜像的工作命令 VOLUME # 定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。 EXPOSE # 指定暴露端口 CMD # 指定容器启动的时候运行的命令,只有最后一个会生效,可被替代 ENTRYPOINT # 指定这个容器启动的时候要运行的命令可以追加命令 ONBUILD # 当构建一个被继承的 dockerfile ,这个时候就会运行ONBUILD的指令,触发指令 COPY # 复制指令,从上下文目录中复制文件或者目录到容器里指定路径。 ENV # 构建的时候设置环境变量 ARG # 构建参数,与 ENV 作用一致。不过作用域不一样。 USER # 用于指定执行后续命令的用户和用户组 HEALTHCHECK # 用于指定某个程序或者指令来监控 docker 容器服务的运行状态。 LABEL # LABEL 指令用来给镜像添加一些元数据(metadata)
具体的命令使用请看考菜鸟教程的命令介绍
四、Dockerfile编写
这里我们编写自己的Tomcat镜像进行测试
- 准备镜像文件,这里需要Tomcat和jdk的压缩包
- 编写Dockerfile文件,文件命名为Dockerfile,build会自动寻找这个文件,否则编译时需要使用-f指定
FROM ubuntu:16.04 MAINTAINER jiaozhu<3333333333@qq.com> # 名字 COPY readme.txt /usr/local/readme.txt #复制文件 ADD jdk-8u311-linux-x64.tar.gz /usr/local/ #复制解压 ADD apache-tomcat-9.0.56-src.tar.gz /usr/local/ #复制解压 RUN apt-get update --fix-missing && apt-get install -y vim --fix-missing ENV MYPATH /usr/local #设置环境变量 WORKDIR $MYPATH #设置工作目录 ENV JAVA_HOME /usr/local/jdk1.8.0_311 #设置环境变量 ENV CLASSPATH $JAVA_HOME/bin/dt.jar:$JAVA_HOME/lib/tools.jar #设置环境变量 分隔符是: ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.56-src #设置环境变量 ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.56-src #设置环境变量 ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin EXPOSE 8080 #设置暴露的端口 CMD /usr/local/apache-tomcat-9.0.56/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.56//bin/logs/catalina.out # 设置默认命令
注意 这里的Dockerfile中不能进行注释否则编译会出错
- 编译
docker build -t diytomcat:1.0 .
安装完成后即可看到生成的镜像
- 问题
解决办法
# 原始命令 RUN apt-get install -y vim # 修改方法 RUN sed -i 's#http://archive.ubuntu.com/#http://mirrors.tuna.tsinghua.edu.cn/#' /etc/apt/sources.list; RUN apt-get update && apt-get install -y vim #或者这个都可以 RUN apt-get update --fix-missing && apt-get install -y vim --fix-missing
五、运行测试
- 启动Tomcat
docker run -d -p 8088:8080 --name diytomcat -v /home/tomcat/test:/usr/local/apache-tomcat-9.0.56/webapps/test -v /home/tomcat/tomcatlog/:/usr/local/apache-tomcat-9.0.56/logs/ diytomcat:1.0
-
测试是否启动成功
-
进入容器,查看设置是否成功
-
发布自己的应用
- 编写hello.html文件
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>菜鸟教程(runoob.com)</title> </head> <body> <h1>我的第一个标题</h1> <p>我的第一个段落。</p> </body> </html>
- 将文件放在webapps/test中
- 打开浏览器访问http://192.168.2.239:8088/test/hello.html
参考文献
Docker:https://www.cnblogs.com/j-chao/p/13212436.html
Docker Dockerfile:https://www.runoob.com/docker/docker-dockerfile.html
Docker build出现“The command :https://blog.csdn.net/weixin_41693877/article/details/108504527
Docker制作Tomcat镜像:https://blog.csdn.net/weixin_43397326/article/details/83306562
本文来自博客园,作者:浇筑菜鸟,转载请注明原文链接:https://www.cnblogs.com/jzcn/p/15720610.html
如本博客的内容侵犯了你的权益,请与以下地址联系,本人获知后,马上删除。同时本人深表歉意,并致以崇高的谢意! cn_jiaozhu@qq.com
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】