Dockerfile自定义镜像 - 基于 java:8-alpine 镜像,将一个Java项目构建为镜像

 

目录

 

一、前置知识

1.镜像结构

2.Dockerfile是什么

二、自定义一个 java 项目镜像

1.创建一个空目录,在这个空目录中创建一个文件,命名为 DockerFile,最后将 java 项目打包成 jar 包,放到这个目录中

2.编写 Dockerfile 文件

3.使用 docker build 构建为一个镜像

4.使用 docker run 运行镜像


一、前置知识


1.镜像结构

我们知道镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成,那么它的层次结构是怎么的呢?

镜像是分层结构,每一层称为一个Layer

  1. BaseImage层:包含基本的系统函数库、环境变量、文件系统
  2. Entrypoint:入口,是镜像中应用启动的命令
  3. 其它层:在BaseImage基础上添加依赖、安装程序、完成整个应用的安装和配置

2.Dockerfile是什么

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

以下参考官网文档(只是列举了一些常用的)

 Dockerfile reference | Docker DocumentationFind all the available commands you can use in a Dockerfile and learn how to use them, including COPY, ARG, ENTRYPOINT, and more.https://docs.docker.com/engine/reference/builder

指令

说明

示例

FROM

指定基础镜像(Dockerfile 第一行必须是 FROM,从基础镜像来构建,基础镜像可以是基本操作系统,如Ubuntu。也可以是其他人制作好的镜像,例如:java:8-alpine

FROM centos:7

ENV

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

ENV key value

COPY

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

COPY ./mysql-5.7.rpm /tmp

RUN

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

RUN yum install gcc

EXPOSE

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

EXPOSE 8080

ENTRYPOINT

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

ENTRYPOINT java -jar xx.jar

二、自定义一个 java 项目镜像


1.创建一个空目录,在这个空目录中创建一个文件,命名为 DockerFile,最后将 java 项目打包成 jar 包,放到这个目录中

 

2.编写 Dockerfile 文件

主要编写以下信息:

  1. 基于 java:8-alpine 作为基础镜像
  2. 将 app.jar 拷贝到镜像中
  3. 暴露端口
  4. 编写入口 ENTRYPOINT

Ps:Dockerfile的第一行必须是FROM;从一个基础镜像来构建基础镜像可以是基本操作系统,如Ubuntu。也可以是其他人制作好的镜像,例如:java:8-alpine

# 指定基础镜像
FROM java:8-alpine# 拷贝 java 项目包
COPY ./docker-demo.jar /tmp/app.jar# 暴露端口
EXPOSE 8090# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

3.使用 docker build 构建为一个镜像

参数说明:

  • -t 表示设置镜像名和版本号(自定义)
  • . 表示 Dockerfile 所在目录,因为刚刚我是将 Dockerfile 放在了当前文件目录下,所以就用 . 来表示当前目录

通过 docker images 就可以看到刚刚构建好的镜像

4.使用 docker run 运行镜像

这时候你就可以根据服务器 IP 和自己配置的镜像映射端口号以及项目地址就可以访问了~

注意:如果需要访问,别忘了开放云服务器的端口号的防火墙哦~

Ps:最后也可以使用 docker push 发布镜像(DockerHub、阿里云镜像仓库)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/14580.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

K8S-概述

k8s是什么? go语言开发的开源的跨主机的容器编排工具;全称是kubernetes; k8s的组件: master: ①kube-apiserver 所有服务统一的访问入口,无论对内还是对外; ②kube-controller-manager 资源…

Visual studio 2015下载安装以及缺包提示的处理方法

最近要加入的比赛团队需要用到Visual studio 2015,百度后找到很多资源,自己也转到了百度网盘。中英文都有,需要的可以下载。 链接:https://pan.baidu.com/s/12gpVwXfQxfdkXub-IwhWFw?pwds325 提取码:s325 --来自百…

Docker 私有仓库 harbor 搭建

🎈 作者:Linux猿 🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊! &…

有哪些做的问卷调查的工具?

想要洞察市场变化、了解某个特定群体的喜好等情况,使用问卷调查是常见的方法。而互联网的发展,越来越多的人转战网络问卷,而功能各异的问卷工具却让人挑花眼。今天,我们精准针对大家的需求和常见的一些问题,为大家聊一…

C#一个开源跨平台的 HTTP 客户端库——RestSharp

一、RestSharp简介 GitHub - restsharp/RestSharp: Simple REST and HTTP API Client for .NETSimple REST and HTTP API Client for .NET. Contribute to restsharp/RestSharp development by creating an account on GitHub.https://github.com/restsharp/RestSharp …

Kafka的保姆级简易安装启动、关闭注意事项、简单使用

一.安装: 1.1Windows本机tar包安装 1.下载tar包 地址:Apache Download Mirrors,点击下面的连接先将tar包下载下来 2.解压到任意地址但自己要记得位置 3.进入到config文件找到server.properties更改信息 搜索,然后找到下面的地…

uniapp打包app,对接华为厂商,实现unipush离线消息推送

今天终于可以抽出点时间,来记录一下这几天心塞的心情。上周公司派过来一个活,说是使用uniapp制作一个app,同时要实现在线消息推送和离线消息推送,啥话没说就揽了下来。不过说实在的,从来没有开发过app,好歹…

SpringMVC原理分析 | 数据处理:ModelAndView

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! 重定向和转发 ModelAndView 设置ModelAndView对象,根据view的名称、视图解析器跳转到指定的页面 页面:{视图解析器前缀} viewName {视图解析器…

基于matlab对于未校准立体图像校正(附源码)

一、前言 此示例说明如何计算两个未校准图像的校正,其中相机内禀函数未知。 立体图像校正将图像投影到公共图像平面上,以使相应的点具有相同的行坐标。此过程对于立体视觉很有用,因为 2-D 立体对应问题被简化为 1-D 问题。例如,…

网络应用基础ENSP环境的安装(NETBASE第三课)

网络应用基础ENSP环境的安装(NETBASE第三课) eNSP(Enterprise Network Simulation Platform)是一款由华为提供的、可扩展的、图形化操作的网络仿真工具平台,主要对企业网络路由器、交换机进行软件仿真,完美呈现真实设备实景,支持大型网络模拟…

vue3+pinia用户信息持久缓存(token)的问题

vue3pinia用户信息持久缓存(token)的问题 对博主来说,这是个相当复杂的问题。 当初在使用vue2vuex进行用户信息持久登录时,写了不下3篇博客,确实是解决了问题,博客链接如下 vue存储和使用后端传递过来的tokenvue中对…

抖音短视频矩阵管理系统源码开发部署(开源定制)

一、什么是短视频矩阵管理系统? 短视频矩阵管理系统是专门为企业号商家、普通号商家提供帐号运营从流量 到转化成交的一站式服务方案,具体包含:点赞关注评论主动私信 ,评论区回复,自动潜客户挖掘,矩阵号营销…