Dockerfile 介绍

什么是Dockerfile

Dockerfile是一个用来将你的应用构建为docker镜像的文本文件,文本中的内容是一条一条的指令,这些指令的集合在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

小伙伴们可以看到,镜像已经构建完成了,但是镜像的REPOSITORYTAG是空的,那么我们需要在执行一条命令来指定这个俩个属性

配置镜像

执行如下命令指定镜像的REPOSITORYTAG

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你值得拥有的更多相关文章

  1. Docker-compose实战

    Docker-compose实战 各位小伙伴们,我们前面的篇文章分享了.docker的基础知识点.如何编写一个Dockerfile.docker网络是怎么回事.如何编写docker-compose.y ...

  2. 如何用Dockerfile创建镜像

    本文原创,原文地址为:http://www.cnblogs.com/fengzheng/p/5181222.html 创建镜像的目的 首先说DockerHub或其它一些镜像仓库已经提供了够多的镜像,有 ...

  3. C#组件系列——又一款Excel处理神器Spire.XLS,你值得拥有(二)

    前言:上篇 C#组件系列——又一款Excel处理神器Spire.XLS,你值得拥有 介绍了下组件的两个功能,说不上特色,但确实能解决我们项目中的一些实际问题,这两天继续研究了下这个组件,觉得有些功能用 ...

  4. C#组件系列——又一款Excel处理神器Spire.XLS,你值得拥有

    前言:最近项目里面有一些对Excel操作的需求,博主想都没想,NPOI呗,简单.开源.免费,大家都喜欢!确实,对于一些简单的Excel导入.导出.合并单元格等,它都没啥太大的问题,但是这次的需求有两点 ...

  5. Dockerfile初探

    git上的asp.net samples工程已经写好了docker file,内容是如下   //任何dockersfile都要以FORM开头,约定是用大写. FROM microsoft/aspne ...

  6. ubuntu 16.04 Dockerfile 安装mysql

    默认上MariaDB的包并没有在Ubuntu仓库中.要安装MariaDB,我们首先要设置MariaDB仓库. 配置MariaDB 仓库 # apt-get install software-prope ...

  7. 分析Mysql 5.6的Dockerfile

    Docker官方的Mysql镜像的Dockerfile托管在Github上,地址如下: https://github.com/docker-library/mysql/tree/5836bc9af9d ...

  8. 利用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 ...

  9. Docker dockerfile创建Eclipse镜像初试

    抽空初步阅读了Docker技术入门与实战 [Kindle电子书] http://www.cnblogs.com/2018/p/4600116.html 现在想首先在开发环境下引入统一的环境,由于开发中 ...

随机推荐

  1. Let's GO(一)

    近来开始学Go,留此博客以记录学习过程,顺便鞭策自己更加努力. 人生苦短,Let's GO! Let's GO(一) Let's GO(二) Let's GO(三) Let's GO(四) 简单介绍 ...

  2. 递归实现DropDownList层级

    .NET下拉框DropDownList层级实现 这也算是第一篇博客吧,技术比较菜,写得不好,希望各位博友见谅哈,多多提提意见. 今天做电商网站新闻添加的时候,下拉框选择新闻类别觉得太长,又无法定位其准 ...

  3. Zabbix 4.0 API 实践,主机/主机群组 批量添加模板和删除模板

    场景 我们日常在管理Zabbix 的时候,经常会需要批量添加模板和批量删除模板,Zabbix页面是提供的批量链接的功能,但是它链接的也只是当前页的主机,我们想扩展这个功能,在链接的时候,可以批量链接整 ...

  4. Vue中token的实现

    在学习vue的过程中,正好项目中做的web系统对安全性有要求 转载自https://www.jianshu.com/p/d1a3fb71eb99 总:通过axios,vuex,及自定义的方法实现.以下 ...

  5. Docker 基础知识 - 使用卷(volume)管理应用程序数据

    卷(volumes)是 Docker 容器生产和使用持久化数据的首选机制.绑定挂载(bind mounts)依赖于主机的目录结构,卷(volumes)完全由 Docker 管理.卷与绑定挂载相比有几个 ...

  6. js 对象数组根据某个名称删除数组中的对象

    delArrayItem: function (array,item) { const index = array.findIndex(text => text.name === item.na ...

  7. Qt-数据库操作SQLite

    1  简介 参考视频:https://www.bilibili.com/video/BV1XW411x7NU?p=88 说明:本文对在Qt中操作SQLite做简要说明. SQLite:SQLite 是 ...

  8. SQL数据单条转多条(Lateral View)

    Lateral View和split,explode等UDTF一起使用,它能够将一行数据拆成多行数据,并在此基础上对拆分后的数据进行聚合. 单个Lateral View语句语法定义如下:lateral ...

  9. 网易邮箱如何使用二次验证码/谷歌身份验证器/两步验证/虚拟MFA?

    登陆后点邮箱名——安全设置——开通两步验证,用二次验证码微信小程序绑定即可 具体步骤见链接  网易邮箱如何使用二次验证码/谷歌身份验证器/两步验证/虚拟MFA? 二次验证码小程序于谷歌身份验证器APP ...

  10. Java应用服务器之tomcat会话复制集群配置

    会话是识别用户,跟踪用户访问行为的一个手段,通过cookie(存在客户端)或session(存在服务端)来判断本次请求是那个客户端发送过来:常用的会话保持有绑定会话,就是前边我们聊的在代理上通过算法或 ...