Dockerfile
Dockerfile
介绍
dockerfile是用来构建docker镜像的文件!命令参数脚本!
构建步骤:
- 编写dockerfile文件
- docker build 构建成一个镜像
- docker run 启动镜像
- docker push 发布镜像(dockerhub,阿里云镜像仓库)
很多官方镜像都是基础包,很多功能没有,我们就需要搭建自己的镜像
构建过程
基础知识
- 每个保留关键字必须大写
- 从上到下顺序执行
-
表示注释
- 每个指令都会创建提交一个新的镜像层
dockerfile是面向开发的,我们发布项目,做镜像,就需要编写dockerfile文件
步骤:开发,部署,运维,缺一不可
Dockerfile:构建文件,定义了一切的步骤,源代码
DockerImages:通过Dockerfile构建生产的 镜像,最终发布和运行的产品,原来是jar war
Docker容器:容器就是镜像运行起来提供服务器
指令
FROM # 基础镜像
MAINTAINER # 镜像作者
RUN # 镜像构建是需要运行的命令
ADD # 添加内容
WORKDIR # 镜像的工作目录
VOLUME # 挂载的目录
EXPOSE # 暴露的端口
CMD # 指定这个容器启动时要运行的命令,只有最后一个生效,可被替代
ENTRYPOINT # 指定这个容器启动时要运行的命令,可以追加命令
ONBUILD # 当构建一个被继承Dockerfile 这个时候就会运行ONBUILD 的指令,触发指令
COPY # 类似ADD,将我们的文件拷贝到镜像中
ENV # 构建的时候设置环境变量
实战centos
创建自己的centos
# 1.编写dockerfile文件
FROM centos
MAINTAINER jpy<812110275@qq.com>
ENV MYPATH /user/local
WORKDIR $MYPATH
RUN yum -y install vim # 安装vim命令
RUN yum -y install net-tools # 安装网络相关命令
EXPOSE 80
CMD echo $MYPATH
CMD echo "----end-----"
CMD /bin/bash
# 2.构建
docker build -f mycentos -t mycentos:1.0 .
# 3.启动
docker run -it mycentos:1.0
查看镜像构建历史
docker history 镜像id
CMD和ENTRYPOINT区别
- CMD 会被替代,run时加了其他命令就会替代镜像里的CMD命令
- ENTRYPOINT run时命令会追加到ENTRYPOINT后
实战tomcat
-
准吧tomcat和jdk压缩包
-
编写dockerfile文件,官方命名
Dockerfile
,build时就不要-f指定dockerfile文件 -
FROM centos MAINTAINER jpy<812110275@qq.com> COPY readme.txt /usr/loal/readme.txt ADD apache-tomcat-9.0.55.tar.gz /usr/local/ ADD jdk-8u311-linux-x64.tar.gz /usr/local RUN yum -y install vim ENV MYPATH /usr/local WORKDIE $MYPATH ENV JAVA_HOME /usr/local/jdk1.8.0_311 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.55 ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.55 ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/lib EXPOSE 8080 CMD /usr/local/apache-tomcat-9.0.55/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.55/bin/logs/catalina.out
-
构建镜像
docker build -t diytomcat .
-
启动
dcoker run -d -p 9090:8080 --name jpytomcat -v /home/tomcat/test:/usr/local/apache-tomcat-9.0.55/webapps/test -v /home/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.55/logs diytomcat
-
访问tomcat主页,查看是否启动成功 ip:9090
-
部署项目
- 在容器外挂载的目录
/home/tomcat/test
下创建WEB_INF文件夹,在WEB_INF下创建web.xml并编写代码 - 在
/home/tomcat/test
下创建一个jsp文件,写入代码
- 在容器外挂载的目录
-
测试项目 ip:9090/test
我们以后开发步骤:需要掌握Dockerfile的编写!之后的一切都是用docker镜像来发布运行
发布自己的镜像
到DockerHub
-
命令登陆
[root@jinpengyong tomcatlogs]# docker login -u jpy521tt Password: WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded
-
提交
[root@jinpengyong tomcatlogs]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE diytomcat latest 4fa25e0664b8 48 minutes ago 676MB [root@jinpengyong tomcatlogs]# docker push diytomcat Using default tag: latest The push refers to repository [docker.io/library/diytomcat] 894845cda3bb: Preparing 8e6fbad3d2fa: Preparing 58274d2645c4: Preparing 80c9037750dd: Preparing 74ddd0ec08fa: Preparing denied: requested access to the resource is denied # 发现,报错,解决:镜像名前加上自己DockerHub的账号 账号/镜像名,这里jpy521tt就是我的dockerHub账号 [root@jinpengyong tomcatlogs]# docker tag 4fa25e0664b8 jpy521tt/tomcat:1.0 [root@jinpengyong tomcatlogs]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE jpy521tt/tomcat 1.0 4fa25e0664b8 59 minutes ago 676MB diytomcat latest 4fa25e0664b8 59 minutes ago 676MB # 发想多了一个新镜像id跟diytomcat一样 # 提交 [root@jinpengyong tomcatlogs]# docker push jpy521tt/tomcat:1.0
到阿里云
- 登陆阿里云,到容器镜像服务
- 创建个人实例
- 进入个人实例,创建命名空间
- 创建镜像仓库,选择之前创建好的命名空间
- 点开镜像仓库,会看到docker 阿里云的相关命令
注意:右上角,仓库公网地址,就是我们命令里的REPOSITORY
,
仓库地址组成:xxxx.com/命名空间/仓库名
假设仓库公网地址为 xxxx.com/123/ab,那就需要如下命令
# 退出之前DockerHub的登陆
docker logout
# 登陆阿里云镜像仓库
$ docker login --username=靳py812110275 registry.cn-shanghai.aliyuncs.com
然后输入密码
# tag
docker tag 镜像id xxxx.com/123/ab:[镜像版本号]
# push
docker push xxxx.com/123/ab:[镜像版本号]
小结
# save保存镜像 docker save -o 要保存的目标 镜像名:[版本]或者镜像id
[root@jinpengyong home]# docker save -o /home/nginx.tar nginx
# load加载镜像
docker load -i nginx.tar
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY