自定义镜像-Dockerfile
Dockerfile语法
构建自定义的镜像时,并不需要一个个文件去拷贝,打包。
我们只需要告诉Docker,我们的镜像的组成,需要哪些BaseImage、需要拷贝什么文件、需要安装什么依赖、启动脚本是什么,将来Docker会帮助我们构建镜像。
而描述上述信息的文件就是Dockerfile文件。
Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。每一个指令都会形成一层Layer。
更新详细语法说明,请参考官网文档: Dockerfile reference | Docker Documentation
基于Ubuntu构建Java项目
需求:基于Ubuntu镜像构建一个新镜像,运行一个java项目
步骤1:新建一个空文件夹docker-demo
- 步骤2:拷贝课前资料中的docker-demo.jar文件到docker-demo这个目录
- 步骤3:拷贝课前资料中的jdk8.tar.gz文件到docker-demo这个目录
- 步骤4:拷贝课前资料提供的Dockerfile到docker-demo这个目录
其中的内容如下:
# 指定基础镜像
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
步骤5:进入docker-demo
将准备好的docker-demo上传到虚拟机任意目录,然后进入docker-demo目录下
步骤6:运行命令:
docker build -t javaweb:1.0 .
最后访问 http://192.168.150.101:8090/hello/count,其中的ip改成你的虚拟机ip
基于java8构建Java项目
虽然我们可以基于Ubuntu基础镜像,添加任意自己需要的安装包,构建镜像,但是却比较麻烦。所以大多数情况下,我们都可以在一些安装了部分软件的基础镜像上做改造。
例如,构建java项目的镜像,可以在已经准备了JDK的基础镜像基础上构建。
需求:基于java:8-alpine镜像,将一个Java项目构建为镜像
实现思路如下:
① 新建一个空的目录,然后在目录中新建一个文件,命名为Dockerfile
② 拷贝课前资料提供的docker-demo.jar到这个目录中
③ 编写Dockerfile文件:
a )基于java:8-alpine作为基础镜像
b )将app.jar拷贝到镜像中
c )暴露端口
d )编写入口ENTRYPOINT
内容如下:
FROM java:8-alpine
COPY ./app.jar /tmp/app.jar
EXPOSE 8090
ENTRYPOINT java -jar /tmp/app.jar
④ 使用docker build命令构建镜像
⑤ 使用docker run创建容器并运行
小结
小结:
Dockerfile的本质是一个文件,通过指令描述镜像的构建过程
Dockerfile的第一行必须是FROM,从一个基础镜像来构建
基础镜像可以是基本操作系统,如Ubuntu。也可以是其他人制作好的镜像,例如:java:8-alpine
自定义镜像-Dockerfile相关推荐
- 创建Python数据分析的Docker镜像+Docker自定义镜像commit,Dockerfile方式解析+pull,push,rmi操作...
实例解析Docker如何通过commit,Dockerfile两种方式自定义Dcoker镜像,对自定义镜像的pull,push,rmi等常用操作,通过实例创建一个Python数据分析开发环境的Dock ...
- 【DockerFile构建自定义镜像实操出现问题解决方案Failed to download metadata for repo ‘appstream‘: IPv4 forwarding disa】
一.知识回顾 之前的内容都帮你整理好了,在这里哟! [0.Docker相关目录文章整理,可自行查看,包含多节内容] [1.Docker详细安装部署&阿里镜像地址配置] [2.Docker架构& ...
- 客快物流大数据项目(十七):自定义镜像mycentos
目录 自定义镜像mycentos 一.编写Dockerfile 二.构建镜像 三.运行镜像
- 自定义镜像-镜像结构
Dockerfile自定义镜像 常见的镜像在DockerHub就能找到,但是我们自己写的项目就必须自己构建镜像了. 而要自定义镜像,就必须先了解镜像的结构才行. 镜像结构 镜像是将应用程序及其需要的系 ...
- Web 函数自定义镜像实战:构建图象处理函数
Web 函数自定义镜像实战:构建图象处理函数 本篇文章写作于 2021.07.23 前言 作为一名前端工程师,我们经常会在 H5, 或者小程序中,使用 Canvas 来处理或生成图片. 不过在有些禁用 ...
- 初识Docker:(5)Docker自定义镜像
初识Docker:(5)Docker自定义镜像 镜像结构 Dockerfile语法 什么是Dockerfile 构建Java项目 案例1:基于ubuntu镜像构建一个新镜像,运行一个java项目 案例 ...
- 华为ModelArts自定义镜像(PyTorch镜像)
一.重要说明 自定义镜像是基于基础镜像制作的,其中根据基础镜像类型的不同,可提供"基础镜像为非ModelArts提供"."基础镜像为ModelArts提供"两种 ...
- 自定义镜像上传阿里云(图文教程 附带思维导图)
自定义镜像上传阿里云 alpine Linux简介 思维导图 使用Dockerfile基于alpine制作JDK8镜像 使用Dockerfile基于alpine制作最小JRE基础镜像 将Docker镜 ...
- day2021-11-26(spring docker数据卷,自定义镜像)
2.3.数据卷(容器数据管理) 在之前的nginx案例中,修改nginx的html页面时,需要进入nginx内部.并且因为没有编辑器,修改文件也很麻烦. 这就是因为容器与数据(容器内文件)耦合带来的后 ...
最新文章
- out与ref的区别
- jvm性能调优实战 - 36XX:SoftRefLRUPolicyMSPerMB配置引起的Metaspace频繁FullGC
- ddr4服务器内存和普通内存_DDR4内存可以在普通电脑上使用吗?有影响吗?
- Two Merged Sequences(CF 1144 G)
- Python打包分发工具setuptools简介
- 一个简单的Makefile模板
- Atitit.提升软件稳定性---基于数据库实现的持久化 循环队列 环形队列
- 计算机专业英语词汇1500词
- 我解决了net framework 4安装失败,提示找不到指定文件的问题
- Ubuntu20软件商店无法正确加载,解决办法
- 现在进行时和一般现在时的区分_38
- shell遍历ip执行特定功能
- Flex TLF 相关知识
- 搜狗浏览器屏蔽广告插件_搜狗浏览器屏蔽芒果TV视频广告:被判不正当竞争,赔了12万...
- Unity SteamVR锁定头盔位置旋转
- Win8系统mscomctl.ocx缺失的解决方法 run-time error 339
- 也许有一天,你发觉日子特别的艰难,那可能是这次的收获将特别的巨大
- 达芬奇发明计算机读后感200,三年级读后感:读《达芬奇》有感200字
- Python基础知识学习(六)——包与模块:指令、包加载步骤、搜索范围
- 现代密码学导论-2-古典密码及其密码分析
热门文章
- 【转】jmeter响应结果乱码问题
- django models中批量导入数据
- 解决react-native 运行报错:Entry, :CFBundleIdentifier, Does Not Exist
- 通过lseek产生空洞文件
- 牛客网Java刷题知识点之什么是代码块、普通代码块、静态代码块、同步代码块、构造代码块以及执行顺序...
- POPTEST老李分享修改dns ip的vbs代码
- 委托、Lambda表达式和事件
- 【Java线程】多线程实现简单的一对一聊天
- hotmail在outlook2007中的设置
- 罗杰斯:做你喜欢的工作,你会变成个有钱人