Docker使用Dockerfile自定义镜像方式

 更新时间:2024年08月08日 09:42:33   作者:温柔哥`  
这篇文章主要介绍了Docker使用Dockerfile自定义镜像方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

什么是Dockerfile

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

每一个指令都会形成一层Layer。  

常见指令

注意:第一行必须是 FROM 指令才行

看实例

需求:

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

1.下载资料

将本文最上面的资源下载到本地

2.查看Dockerfile

等会我们直接使用这个文件就可以依次执行这些指令帮助我们构建好自己的镜像(每个指令都会分一层)

# 指定基础镜像
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

3.新建目录

mkdir docker-demo
cd docker-demo

4.上传资料

直接借助 FinalShell 拖动上传即可:

5.构建镜像

docker build -t javaweb:1.0 .

最后空格后面要加一个点,代表的是Dockerfile所在的目录(也就是我们现在所在的 docker-demo 目录)

可以看到镜像构建完成了

6.启动容器

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

启动成功

7.浏览器访问

http://自己的服务器地址:8090/hello/count

四、实例升级

1.为什么升级

其实之前的实例中我们的 Dockerfile 还可以简化一些不需要我们写的东西,当然并不是不用写了,而是别人帮我们写好了

2.如何升级

Ⅰ.更改 Dockerfile

我们可以直接基于已经安装好 jdk 的镜像 openjdk:8-alpine 来构建我们的镜像,只需要将 Dockerfile 更改为如下:

# 指定基础镜像
FROM openjdk:8-alpine

COPY ./docker-demo.jar /tmp/app.jar

# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

Ⅱ.构建镜像并运行容器

docker build -t javaweb:2.0 . # 构建镜像
docker run --name my-javaweb-2.0 -p 8091:8090 -d javaweb:2.0 # 启动容器

3.再次测试

http://自己的服务器地址:8091/hello/count

总结

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

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

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 基于SpringBoot+vue实现前后端数据加解密

    基于SpringBoot+vue实现前后端数据加解密

    这篇文章主要给大家介绍了基于SpringBoot+vue实现前后端数据加解密,文中有详细的示例代码,具有一定的参考价值,感兴趣的小伙伴可以自己动手试一试
    2023-08-08
  • Java中的lambda和stream实现排序

    Java中的lambda和stream实现排序

    这篇文章主要介绍了Java中的lambda和stream实现排序,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • Java中的IP地址和InetAddress类使用详解

    Java中的IP地址和InetAddress类使用详解

    这篇文章主要介绍了Java中的IP地址和InetAddress类使用详解,是Java入门学习中的基础知识,需要的朋友可以参考下
    2015-10-10
  • 在mybatis 中使用if else 进行判断的操作

    在mybatis 中使用if else 进行判断的操作

    这篇文章主要介绍了在mybatis 中使用if else 进行判断的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • 浅谈IDEA实用的Servlet模板

    浅谈IDEA实用的Servlet模板

    今天给大家分享一下IDEA实用的Servlet模板,文中有非常详细的图文介绍及代码示例,对小伙伴们很有帮助哦,需要的朋友可以参考下
    2021-05-05
  • Spring Boot面试题总结

    Spring Boot面试题总结

    这篇文章主要介绍了Spring Boot面试题总结,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • 详解slf4j+logback在java工程中的配置

    详解slf4j+logback在java工程中的配置

    这篇文章主要介绍了slf4j+logback在java工程中的配置,对日志组件logback也进行了简单介绍,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2015-08-08
  • JSON反序列化Long变Integer或Double的问题及解决

    JSON反序列化Long变Integer或Double的问题及解决

    这篇文章主要介绍了JSON反序列化Long变Integer或Double的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • Java开发学习 Java数组操作工具

    Java开发学习 Java数组操作工具

    这篇文章主要为大家详细介绍了自己编写的Java数组操作工具,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • Java设计模式之迭代模式(Iterator模式)介绍

    Java设计模式之迭代模式(Iterator模式)介绍

    这篇文章主要介绍了Java设计模式之迭代模式(Iterator模式)介绍,本文用一个老师点名的现象描述了迭代模式的使用,需要的朋友可以参考下
    2015-03-03

最新评论