zoukankan      html  css  js  c++  java
  • Dockerfile自定义镜像

    镜像结构

    BaseImage层:包含基本的系统函数库、环境变量、文件系统

    Entrypoint:入口,是镜像中应用启动的命令

    其它:在BaseImage基础上添加依赖、安装程序、完成整个应用的安装和配置

    Dockerfile语法

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

    指令

    说明

    示例

    FROM

    指定基础镜像

    FROM centos:6

    ENV

    设置环境变量,可在后面指令使用

    ENV key value

    COPY

    拷贝本地文件到镜像的指定目录

    COPY ./mysql-5.7.rpm /tmp

    RUN

    执行Linux的shell命令,一般是安装过程的命令

    RUN yum install gcc

    EXPOSE

    指定容器运行时监听的端口,是给镜像使用者看的

    EXPOSE 8080

    ENTRYPOINT

    镜像中应用的启动命令,容器运行时调用

    ENTRYPOINT java -jar xx.jar

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

    将Java项目构建镜像,并运行

    Java项目的jar包:

    链接:https://pan.baidu.com/s/1Gc7sP9YrCbtSdViTwrw0aA
    提取码:j8g7

    JDK8

    链接:https://pan.baidu.com/s/1IMSpGyiH7Cdu2kvgAmlDdw
    提取码:fr8l

    构建镜像思想

    通过Dockerfile来构建,Dockerfile是指令集合,首先要知道如何编写Dockerfile

    Dockerfile要做些什么:

    • 基于Linux内核
    • 配置环境,Java运行需要jdk
    • Java项目的jar包
    • 项目启动脚本

    将jdk和Java项目上传到指定目录(新建目录:docker-demo),然后编写Dockerfile文件也上传到Docker-demo目录下

    编写Dockerfile

    # 指定基础镜像
    From ubuntu:16.04
    # 配置环境变量,JDK的安装目录
    ENV JAVA_DIR=/usr/local
    
    # 拷贝jdk到指定目录
    COPY ./jdk8.tar.gz $JAVA_DIR
    
    # 安装JDK
    #进入JDK所在目录
    #执行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
    
    # 拷贝Java项目jar包到指定目录
    COPY ./docker-demo.jar /tmp/app.jar
    # 暴露端口(容器内部使用端口)
    EXPOSE 8090
    
    # Java项目的启动命令
    ENTRYPOINT java -jar /tmp/app.jar

    上传Dockerfile

    进入docker-demo目录,运行Dockerfile

    docker build -t javaweb:1.0 .
    # docker build 构建
    # -t tag
    # javaweb:1.0 镜像名:版本号
    # . Dockerfile文件所在目录( 点:代表当前位置)

    Get https://registry-1.docker.io/v2/: net/http: TLS handshake timeout(Docker镜像拉取错误)

    修改或新建/ect/docker/daemon.json文件

    sudo vim daemon.json

    编辑阿里云的镜像地址:

    {
     "registry-mirrors":["https://6kx4zyno.mirror.aliyuncs.com"]
    }

    再次执行

    通过docker images查看镜像

    启动镜像,创建容器

    docker run -p 8090:8090 -d javaweb:1.0

    通过浏览器访问 http://192.168.223.128:8090/hello/count

    现在如果有多个Java项目依赖都时JDK8的话,是不是Dockerfile就都要写红色框中的指令

    可以将红色框中的指令单独构建成镜像(java:8-alpine),使用方式:

    FROM java:8-alpine
    COPY ./docker-demo.jar /tmp/app.jar
    ENTRYPOINT java -jar /tmp/app.jar
  • 相关阅读:
    四、MYSQL的数据类型
    一、InnoDB引擎
    Spring源码分析(一)
    ActiveMQ 的安装与使用(springboot版本)
    12、JAVA内存模型与线程
    9、虚拟机字节码执行引擎
    8、类加载机制
    7、Class文件的格式
    6、使用jconsole+VisualVM分析JVM
    5、JVM的监控与分析工具
  • 原文地址:https://www.cnblogs.com/WarBlog/p/15457555.html
Copyright © 2011-2022 走看看