当前位置: 首页 > article >正文

Dockerfile自定义镜像以及案例分析

文章目录

    • 一、Dockerfile自定义镜像
      • 1.1 镜像结构
      • 1.2 Dockerfile语法
    • 二、构建Java项目
    • 三、基于java8构建java
    • 四、小结

一、Dockerfile自定义镜像

常见的镜像在DockerHub就能找到,但是我们自己写的项目就必须自己构建镜像了。

而要自定义镜像,就必须先了解镜像的结构才行。

1.1 镜像结构

镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成。

例如mysql镜像的组成结构如下图所示:在这里插入图片描述
简单来说,镜像就是在系统函数库、运行环境基础上,添加应用程序文件、配置文件、依赖文件等组合,然后编写好启动脚本打包在一起形成的文件。

我们要构建镜像,其实就是实现上述打包的过程。

1.2 Dockerfile语法

构建自定义的镜像时,并不需要一个个文件去拷贝,打包。

我们只需要告诉Docker,我们的镜像的组成,需要哪些BaseImage、需要拷贝什么文件、需要安装什么依赖、启动脚本是什么,将来Docker会帮助我们构建镜像。

而描述上述信息的文件就是Dockerfile文件。

Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。每一个指令都会形成一层Layer。

在这里插入图片描述
在这里插入图片描述

更新详细语法说明,可以参考官网文档: https://docs.docker.com/engine/reference/builder

二、构建Java项目

需求:基于Ubuntu镜像构建一个新镜像,运行一个java项目

  • 步骤1:新建一个空文件夹docker-demo
  • 步骤2:拷贝我们打包好的java项目docker-demo.jar文件到docker-demo这个目录
  • 步骤3:拷贝课前资料中的jdk8.tar.gz文件到docker-demo这个目录
  • 步骤4:拷贝课前资料提供的Dockerfile到docker-demo这个目录,其中的内容如下:
# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local

# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar

# 安装JDK
RUN cd $JAVA_DIR \
 && tar -xf ./jdk8.tar.gz \
 && mv ./jdk1.8.0_144 ./java8

# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin

# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar
  • 步骤5:进入docker-demo
    将准备好的docker-demo上传到虚拟机任意目录,然后进入docker-demo目录下。(这里使用的finalshell远程连接Centos7虚拟机)
    在这里插入图片描述

  • 步骤6:运行命令:

docker build -t javaweb:1.0 .   
# 一定不要忘记了最后有个.,表示从当前目录开始构建

最后访问 http://192.168.207.129:8090/hello/count,其中的ip改成自己的虚拟机ip,具体的端口后面的路径地址也和自己的java项目有关。

三、基于java8构建java

虽然我们可以基于Ubuntu基础镜像,添加任意自己需要的安装包,构建镜像,但是却比较麻烦。所以大多数情况下,我们都可以在一些安装了部分软件的基础镜像上做改造。

例如,构建java项目的镜像,可以在已经准备了JDK的基础镜像基础上构建。

需求:基于java:8-alpine镜像,将一个Java项目构建为镜像

实现思路如下:

  • ① 新建一个空的目录,然后在目录中新建一个文件,命名为Dockerfile

  • ② 将自己打包好的Java项目docker-demo.jar拷贝到这个目录中

  • ③ 编写Dockerfile文件:

    • a )基于java:8-alpine作为基础镜像

    • b )将app.jar拷贝到镜像中

    • c )暴露端口

    • d )编写入口ENTRYPOINT

      内容如下:

FROM java:8-alpine
COPY ./app.jar /tmp/app.jar
EXPOSE 8090
ENTRYPOINT java -jar /tmp/app.jar
  • ④ 使用docker build命令构建镜像

  • ⑤ 使用docker run创建容器并运行

四、小结

  1. Dockerfile的本质是一个文件,通过指令描述镜像的构建过程

  2. Dockerfile的第一行必须是FROM,从一个基础镜像来构建

  3. 基础镜像可以是基本操作系统,如Ubuntu。也可以是其他人制作好的镜像,例如:java:8-alpine


http://www.kler.cn/a/134280.html

相关文章:

  • AtomicInteger 和 AtomicIntegerFieldUpdater的区别
  • 6.2 对角化矩阵(2)
  • 【Python】爬虫通过验证码
  • pgsql和mysql的自增主键差异
  • MySQL如何利用索引优化ORDER BY排序语句
  • 从0开始学docker (每日更新 24-11-7)
  • C++二分查找算法:找到 Alice 和 Bob 可以相遇的建筑
  • Python PyQt 程序设置图标
  • JS-项目实战-鼠标悬浮变手势(鼠标放单价上生效)
  • 【Linux】安全审计-audit
  • SpringBoot静态资源配置
  • Linux socket编程(4):服务端fork之僵尸进程的处理
  • ClickHouse UDF 运行速度慢问题
  • docker容器内访问主机端口服务
  • Visual Studio Code 从英文界面切换中文
  • 鸿蒙:实现两个Page页面跳转
  • 多线程概述
  • RTMP协议和源码解析
  • MFC/QT 一些快要遗忘的细节:
  • 本地Git项目同时推送至GitHub和Gitee
  • 蓝桥杯每日一题2023.11.18
  • Appium自动化测试:通过appium的inspector功能无法启动app的原因
  • Golang起步篇(Windows、Linux、mac三种系统安装配置go环境以及IDE推荐以及入门语法详细释义)
  • 学霸教你自学人工智能
  • 设计模式(二)-创建者模式(2)-工厂模式
  • 程序员告诉你:人工智能是什么?