Dockerfile你值得拥有
Dockerfile 介绍
什么是Dockerfile
Dockerfile
是一个用来将你的应用构建为docker
镜像的文本文件,文本中的内容是一条一条的指令,这些指令的集合在docker
引擎中执行,最终构建出你的应用的docker
镜像。
准备
需要小伙伴们先在本地或者服务器上安装docker
命令介绍
先来看一个简单的Dockerfile
文件
FROM hub.c.163.com/library/java:8
VOLUME /tmp
ADD target/springboot-docker-0.0.1-SNAPSHOT.jar docker.jar
RUN bash -c 'touch /docker.jar'
ENTRYPOINT ["java","-jar","/docker.jar"]
FROM
:需要构建镜像的项目所需要依赖的基础镜像
,SpringBoot
项目是跑在JDK
之上的
VOLUME
:定义匿名数据卷,容器在运行的时候,会将数据写入到这个数据卷中,这里设置为一个临时目录
ADD
:将target目录下的springboot-docker-0.0.1-SNAPSHOT.jar
包添加到docker
容器中,并将名称进行修改为docker.jar
RUN
:执行后其后面的命令
ENTRYPOINT
;在容器启动之前的预定义执行脚本命令
创建项目
下面我们,创建一个简单的SpringBoot
项目来验证一下我们上文所说的。
加入依赖
打开的你的idea
创建一个SpringBoot
项目,我们只需要在pom.xml
中加上如下依赖即可
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
编写测试接口
在项目目录项创建一个controller
包,创建一个DockerFileController
类,编写如下接口
/**
* @author:triumphxx
* @Date:2020/8/1
* @Time:4:53 下午
* @微信公众号:北漂码农有话说
* @网站:http://blog.triumphxx.com.cn
* @GitHub https://github.com/triumphxx
**/
@RestController
public class DockerFileController {
@RequestMapping("/docker")
public String dockerFileRun(){
System.out.println("dockerfile测试");
return "DockerFile";
}
}
打包项目
在你的项目下使用maven
将项目打成一个jar
包,这时项目的target
目录下就会有一个springboot-docker-0.0.1-SNAPSHOT.jar
包。
编写Dockerfile文件
在你的项目根目录创建Dockerfile
文件,下面的文件内容也就是我们文章开头的那个文件。
FROM hub.c.163.com/library/java:8
VOLUME /tmp
ADD target/springboot-docker-0.0.1-SNAPSHOT.jar docker.jar
RUN bash -c 'touch /docker.jar'
ENTRYPOINT ["java","-jar","/docker.jar"]
构建镜像
以上工作完成后,需要将项目打包为docker
镜像。
执行命令
docker build -f /路径/Dockerfile .
# 我的具体路径
# docker build -f /Users/wangyupeng/IdeaProjects/springboot-docker/Dockerfile .
细心的小伙伴可能发现这一行的命令后面有一个
.
,那么这个点是什么呢?它是上下文路径,是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包。所有我们在构建镜像的时候上下文路径不要放其他无用的文件。
执行完构建命令后,控制台输出如下日志表示构建成功,并且docker
会给镜像分配一个ID
查看镜像
这时执行如下命令查看是否有我们的镜像产生
docker images
小伙伴们可以看到,镜像已经构建完成了,但是镜像的
REPOSITORY
和TAG
是空的,那么我们需要在执行一条命令来指定这个俩个属性
配置镜像
执行如下命令指定镜像的REPOSITORY
和TAG
docker build -t springboot-docker/springboot-docker:1.0 .
再次执行docker images
,可以看到这时的镜像已经完整的呈现在你的面前
运行镜像
执行命令
镜像已经构建完成了,我们需要将它运行起来,验证正确性,执行如下命令,命令中的具体参数,作者就不一一介绍了 这篇文章有介绍
docker run -d -p8080:8080 springboot-docker/springboot-docker:1.0
# 或者
docker run -d -p8080:8080 8bf227f4fed9
查看运行日志
首先执行如下命令,查看执行的docker
容器
docker ps
这是我们就能够看到docker
容器的ID
,执行如下命令,查看执行日志
docker logs
访问接口
在浏览器输入http://localhost:8080/docker
,如果浏览器页面返回的内容是DockerFile``,表示项目的镜像运行正常
小结
好啦,小伙伴们,我们介绍了,什么是Dockerfile
以及如何将自己的项目构建为docker
镜像,希望对你有所帮助。案例已分享到本人的GitHub
GitHub
Dockerfile你值得拥有的更多相关文章
- Docker-compose实战
Docker-compose实战 各位小伙伴们,我们前面的篇文章分享了.docker的基础知识点.如何编写一个Dockerfile.docker网络是怎么回事.如何编写docker-compose.y ...
- 如何用Dockerfile创建镜像
本文原创,原文地址为:http://www.cnblogs.com/fengzheng/p/5181222.html 创建镜像的目的 首先说DockerHub或其它一些镜像仓库已经提供了够多的镜像,有 ...
- C#组件系列——又一款Excel处理神器Spire.XLS,你值得拥有(二)
前言:上篇 C#组件系列——又一款Excel处理神器Spire.XLS,你值得拥有 介绍了下组件的两个功能,说不上特色,但确实能解决我们项目中的一些实际问题,这两天继续研究了下这个组件,觉得有些功能用 ...
- C#组件系列——又一款Excel处理神器Spire.XLS,你值得拥有
前言:最近项目里面有一些对Excel操作的需求,博主想都没想,NPOI呗,简单.开源.免费,大家都喜欢!确实,对于一些简单的Excel导入.导出.合并单元格等,它都没啥太大的问题,但是这次的需求有两点 ...
- Dockerfile初探
git上的asp.net samples工程已经写好了docker file,内容是如下 //任何dockersfile都要以FORM开头,约定是用大写. FROM microsoft/aspne ...
- ubuntu 16.04 Dockerfile 安装mysql
默认上MariaDB的包并没有在Ubuntu仓库中.要安装MariaDB,我们首先要设置MariaDB仓库. 配置MariaDB 仓库 # apt-get install software-prope ...
- 分析Mysql 5.6的Dockerfile
Docker官方的Mysql镜像的Dockerfile托管在Github上,地址如下: https://github.com/docker-library/mysql/tree/5836bc9af9d ...
- 利用Dockerfile构建一个基于centos 7,包括java 8, tomcat 7,php ,mysql+mycat的镜像
Dockerfile内容如下: FROM centos MAINTAINER Victor ivictor@foxmail.com WORKDIR /root RUN rm -f /etc/yum.r ...
- Docker dockerfile创建Eclipse镜像初试
抽空初步阅读了Docker技术入门与实战 [Kindle电子书] http://www.cnblogs.com/2018/p/4600116.html 现在想首先在开发环境下引入统一的环境,由于开发中 ...
随机推荐
- sql语句replace函数的使用
SQL中的替换函数replace()使用 语法 REPLACE ( string_expression , string_pattern , string_replacement ) 参数 strin ...
- BERT源码分析及使用方法
本文原作者:梁源 BERT (Bidirectional Encoder Representations from Transformers) 官方代码库 包含了BERT的实现代码与使用BERT进行文 ...
- JVM 专题十六:StringTable
1. String的基本特性 String:字符串,使用一对""引起来表示. String声明为final的,不可被继承. String实现了Serializable接口:表示字符 ...
- java 基本语法(三) 运算符
1-算术运算符 1.算术运算符: + - + - * / % (前)++ (后)++ (前)-- (后)-- + [典型代码] //除号:/ int num1 = 12; int num2 = 5; ...
- 数据可视化之DAX篇(二十三)ALLEXCEPT应用示例:更灵活的累计求和
https://zhuanlan.zhihu.com/p/67441847 累计求和问题,之前已经介绍过(有了这几个公式,你也可以快速搞定累计求和),主要是基于比较简单的情形,针对所有的数据进行累计求 ...
- 信不信?各种红包App最后都会整合游戏!App+游戏的变现模式分析
最近两个月「晓衡在线猿码微服」商城上出现了一类需求特别的客户: 我们有个 App,日活用户达到 XXX万,计划在 App 中嵌入游戏增加用户留存和利用流量变现,还有... 看你们这里游戏不少,想了解一 ...
- python监控服务器应用日志,推送钉钉机器人,实时关注日志异常
生产环境多台服务器上部署了多个应用,日志出现报错时,无法及时反馈到开发人员.部署一个大型的运维监控应用,不但耗资源,而且配置也不简单. 简简单单写个python脚本来监控服务器日志就简单多了,废话不多 ...
- ES6面试
未完持续 概念 ECMAScript6(以下简称ES6)是 JavaScript 语言的下一代标准,前者是后者的规格,后者是前者的一种实现. ES6(新增的)一些特性 1.变.常量:let声明变量,c ...
- 题解 洛谷 P5465 【[PKUSC2018]星际穿越】
首先考虑题目的性质,发现点向区间连的边为双向边,所以也就可以从一个点向右跳到区间包含该点的点,如图所示: 但事实上向后跳其实是不优的,可以有更好的方法来节省花费: 因此我们发现一个点跳到其前一个区间的 ...
- DPDK之什么是imissed、ierrors、rx_nombuf
DPDK之什么是imissed.ierrors.rx_nombuf 在采用DPDK进行网络抓包时常常会通过rte_eth_stats_get函数获取当前网卡的丢包状态,首先看一下该函数的声明: // ...