栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

[Docker笔记-3] Dockerfile

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

[Docker笔记-3] Dockerfile

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

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

镜像结构

简单来说,镜像就是在系统函数库、运行环境基础上,添加应用程序文件、配置文件、依赖文件等组合,然后编写好启动脚本打包在一起形成的文件。

我们以MySQL为例,来看看镜像的组成结构:

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

Dockerfile语法

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

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

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

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

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

构建Java项目 基于Ubuntu/Centos构建Java项目

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

这个意思是在你的虚拟机/服务器上先创建一个ubuntu/centos镜像, 在基于这个镜像创建java镜像, 和你虚拟机本身是什么系统无关

  1. 新建一个空文件夹docker-demo

  2. 拷贝课前资料中的docker-demo.jar, jdk8.tar.gz, Dockerfile 三个文件到docker-demo目录下

    其中Dockerfile文件的内容如下:

    # 指定基础镜像
    FROM centos:7
    # 配置环境变量,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
    

    Dockerfile里设置的这些目录(如RUN, ENV)都是dokcer镜像里的目录, 不是我们虚拟机里的目录

    COPY的目录: 前一个目录是虚拟机的目录, 后一个是docker镜像里的目录

  3. 将准备好的docker-demo上传到虚拟机/服务器任意目录,然后进入docker-demo目录下

  4. 构建docker镜像"javaweb":

    docker build -t javaweb:1.0 .
    

    javaweb是镜像名称, 1.0是镜像版本(随便填), 后面是路径, 点’.'表示当前目录

    java项目的docker镜像就构建成功了(只是构建没有运行), 通过docker images可以查看

  1. 创建容器"mj"运行镜像"javaweb":

    docker run --name mj -p 8090:8090 -d javaweb
    

    通过docker -ps 查看正在运行的容器:

    通过 http://192.168.150.101:8090/hello/count可以访问到,其中的ip改成你的虚拟机ip

基于jdk构建Java项目

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

例如,构建java项目的镜像,可以在已经准备了JDK的基础镜像基础上构建, 这个基础镜像名叫java:8-alpine

实现思路如下:

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

  2. 拷贝课前资料提供的docker-demo.jar到这个目录中

  3. 编写Dockerfile文件, 内容有下面几点:

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

    • 将app.jar拷贝到镜像中

    • 暴露端口

    • 编写入口ENTRYPOINT

    最后Dockerfile内容如下(省略了前面配置jdk的步骤):

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

    docker build -t javaweb:1.0 .
    

  5. 使用docker run创建容器并运行

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/862165.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号