Dockerfile

Dockerfile

介绍

dockerfile是用来构建docker镜像的文件!命令参数脚本!

构建步骤:

  1. 编写dockerfile文件
  2. docker build 构建成一个镜像
  3. docker run 启动镜像
  4. docker push 发布镜像(dockerhub,阿里云镜像仓库)

很多官方镜像都是基础包,很多功能没有,我们就需要搭建自己的镜像

构建过程

基础知识

  1. 每个保留关键字必须大写
  2. 从上到下顺序执行
  3. 表示注释

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

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
  1. 准吧tomcat和jdk压缩包

  2. 编写dockerfile文件,官方命名Dockerfile,build时就不要-f指定dockerfile文件

  3. 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
    
  4. 构建镜像

    docker build -t diytomcat .
    
  5. 启动

    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
    
  6. 访问tomcat主页,查看是否启动成功 ip:9090

  7. 部署项目

    1. 在容器外挂载的目录 /home/tomcat/test下创建WEB_INF文件夹,在WEB_INF下创建web.xml并编写代码
    2. /home/tomcat/test下创建一个jsp文件,写入代码
  8. 测试项目 ip:9090/test

我们以后开发步骤:需要掌握Dockerfile的编写!之后的一切都是用docker镜像来发布运行

发布自己的镜像

到DockerHub

  1. 注册 https://registry.hub.docker.com/

  2. 命令登陆

    [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
    
  3. 提交

    [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
    
    

到阿里云

  1. 登陆阿里云,到容器镜像服务
  2. 创建个人实例
  3. 进入个人实例,创建命名空间
  4. 创建镜像仓库,选择之前创建好的命名空间
  5. 点开镜像仓库,会看到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
posted @   jpy  阅读(49)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· 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
点击右上角即可分享
微信分享提示