Dockerfile自定义镜像
一、镜像结构
镜像是将应用程序及其需要的系统函数库、环境、配置、依赖等打包而成
以MySQL为例:

如上图所示,镜像由多个层(Layer)构成,每个层包含不同的内容。
另外,某些层可以单独抽出,组成一个镜像,作为其他自定义镜像的基础镜像来使用。
而,每执行 Dockerfile 中一条命令,则会形成一个层(Layer)。
二、Dockerfile
1. 什么是 Dockerfile
它本质上是一个无扩展名的文本文件,其中包含构建镜像所需的指令,每个指令执行后都会形成一个层。
2. 基本指令

更新详细语法说明,请参考:官网文档
三、示例:基于 Ubuntu 构建自定义 Java 项目镜像
1. 在 Linux 系统中 创建一个目录,此处目录名以 docker-demo 为例
mkdir docker-demo
2. 将构建 Java 项目镜像所需的文件 copy 到 docker-demo 中
此处用到了:
- jdk8.tar.gz
- docker-demo.jar
- Dockerfile
其中,1 为 jdk 安装包,2 为一个 SpringBoot 项目编译成的 jar 包,3 为自定义的 Dockerfile。
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. 正式构建自定义镜像
docker build -t javaweb:1.0 .
-t:指定镜像 Tag,如上命令中的 javaweb:1.0 。再次强调,tag 由两部分组成,名称:版本
最后一个 “ . ” :表示当前目录,注意,与当前指定的 Tag 之间有个空格
四、基于 Java8 镜像构建 Java 项目
上个示例基于Ubuntu基础镜像构建自定义镜像,需要自己构建 JDK 相关内容,略显麻烦。所以大多数情况下,我们可以基于一个安装好 JDK 的镜像之上,来构建自定义镜像。
例如,java:8-alpine 镜像就是一个他人基于基础镜像(操作系统)构建好的JDK镜像,假如我们以此为基础镜像构建自定义镜像,则可以省略 JDK 安装步骤。
Dockerfile 将简化成这样:
# 指定基础镜像
FROM java:8-alpine # 拷贝java项目的包(为什么要考虑一下java包暂不理解,可能构建镜像后,使用的java包会被删除,或者说挪到构建的镜像中,待验证)
COPY ./docker-demo.jar /tmp/app.jar # 暴露端口
EXPOSE 8090 # 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar
接下来再次使用构建镜像的命令来构建镜像即可。
Dockerfile自定义镜像的更多相关文章
- 编写Dockerfile自定义镜像
要求 编写一个Dockerfile自定义centos镜像,要求在容器内部可以使用vim和ifconfig命令,并且登入落脚点为/usr/local 编写Dockerfile FROM centos M ...
- DOCKER 学习笔记2 认识dockerfile自定义镜像
Dockerfile 概念 Dockerfile 是一个文本文件,但包含所构建容器在运行时候的参数.库.资源配置.可以简单理解为我们现有的镜像,比如Centos/Nginx 但我们需要构建一个容器的时 ...
- 创建Python数据分析的Docker镜像+Docker自定义镜像commit,Dockerfile方式解析+pull,push,rmi操作
实例解析Docker如何通过commit,Dockerfile两种方式自定义Dcoker镜像,对自定义镜像的pull,push,rmi等常用操作,通过实例创建一个Python数据分析开发环境的Dock ...
- Docker学习(六)Dockerfile构建自定义镜像
Docker学习(六)Dockerfile构建自定义镜像 前言 通过前面一篇文章可以知道怎么去使用一个镜像搭建服务,但是,如何构造自己的一个镜像呢,docker提供了dockerfile可以让我们自己 ...
- Dockerfile详解,以及构建自定义镜像
Dockerfile使用 前面的操作我们一直下载下载官方已经构建好的镜像,直接下载后就可以run,如果我们想要在镜像中添加自己的应用,比如在tomcat中添加自己的app,构建一个自定义的镜像,那么我 ...
- 编写 Dockerfile 生成自定义镜像
一般情况下我们可以从公共渠道诸如 DockerHub 获取镜像上获取镜像,但是在实际生产过程中,往往需要定制化的镜像,例如修改一些配置文件,增加一些特殊的命令或软件等需求,这时就需要通过编写 Dock ...
- docker基本概念,创建、起动实例,保存自定义镜像等常用操作
14年docker火了一阵,当时自学整理了一份文档,后来冷落了. 现在发现很多同事还是想学习docker,但无从下手,所以重新整理了这篇分享,10分钟就可以带你彻底理解docker,并能够创建属于自己 ...
- docker 笔记(基本概念、快速运行、自定义镜像)
1.docker docker是一个打包应用的工具 非常强大,能把操作系统也打在包里,进行无差别部署和运行. 所以docker也被认为是建立在操作系统上的虚拟机. 2.基本概念 镜像(image) ...
- docker 14 dockerfile自定义mycentos
Base镜像(scratch) Docker Hub中99%的镜像是通过在base镜像中安装和配置需要的软件构建出来的.也就是说base镜像是所有其他镜像的鼻祖. hub默认centos镜像是什么情况 ...
- Docker入门3------手动编辑自定义镜像
手动编辑自定义镜像 查看本地现有镜像: 基于centos创建一个,会自动下载centos最新原始镜像 docker run -it --name=web centos /bin/bash 然后在容器内 ...
随机推荐
- Java用户交互方法——Scanner
Scanner用户交互 使用Next方法接收 Scanner scanner = new Scanner(System.in); if(scanner.hasNext()){//判断用户有无输入 St ...
- 根号分治简单笔记 | P3396 哈希冲突
简要题意 你需要维护一个长度为 \(n\) 的序列 \(v\),支持: A x y 求整个序列中,所有模 \(x\) 为 \(y\) 的下标的元素的值,即: \[\sum_{i=0}^{\lfloor ...
- YMOI 2019.6.22
题解 YMOI 2019.6.22 lia麦頔溜了,缺了lia麦頔的排名仅供参考 不过分数还是暴露无遗 T1 邪恶入侵 简易题干: 在三维空间内有一些点,点之间有双向边.每一次询问给出一个m,只有边权 ...
- 精华推荐 | 【JVM深层系列】「GC底层调优系列」一文带你彻底加强夯实底层原理之GC垃圾回收技术的分析指南(GC原理透析)
前提介绍 很多小伙伴,都跟我反馈,说自己总是对JVM这一块的学习和认识不够扎实也不够成熟,因为JVM的一些特性以及运作机制总是混淆以及不确定,导致面试和工作实战中出现了很多的纰漏和短板,解决广大小伙伴 ...
- Postgresql 使用Vscode开发指南
Postgresql 使用Vscode开发指南 depends libraries sudo apt install -y libsystemd-dev libxml2-dev libssl-dev ...
- ffmpeg拉取rtsp视频流
公司项目需要提供实时显示网络摄像头实时视频. void RTSPFFmpeg::rtsp_open(const char *url) { AVFormatContext* format_ctx = a ...
- 手把手教你将Eureka升级Nacos注册中心
由于原有SpringCloud体系版本比较老,最初的注册中心使用的Eureka后期官方无升级方案,配置中心无法在线管理配置,还有实时上下线的问题,因此需要将原有系统的Eureka服务升级Nacos注册 ...
- 如何注册chatgpt,如何使用chatgpt,以及chatgpt无法访问的原因。chatgpt问题总结。
chatgpt显示所在的国家地区不可用的原因. 1:chatgpt国内是不能访问的,是需要借助魔法. 一.注册过程中的问题. \1. OpenAI或ChatGPT官网打不开.这是由于ChatGPT目前 ...
- Vue33 使用nvm管理nodejs
1 nvm简介 NVM:Node Version Manage,即Node的版本管理工具.使用NVM,可以按照nodejs,可以进行版本切换,可以卸载nodejs等等. 由于项目开发当中,不同的项目可 ...
- Vue 03 VisualStudioCode 搭建一个Vue 框架 的详细流程
转:https://blog.csdn.net/A_awen/article/details/122345082 1 下载VisualStudioCode 1.1 官网下载地址 https://cod ...