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. web常用的unicode字符集

    也不知道出处

  2. 一篇夯实一个知识点系列--python生成

    写在前面 本系列目的:一篇文章,不求鞭辟入里,但使得心应手. 迭代是数据处理的基石,在扫描内存无法装载的数据集时,我们需要一种惰性获取数据的能力(即一次获取一部分数据到内存).在Python中,具有这 ...

  3. Mysql基础(十):MYSQL中使用事务的案例

    https://www.cnblogs.com/lsqbk/p/10145306.html 基本介绍 事务用于保证数据的一致性,它由一组相关的dml语句组成,该组的dml语句要么全部成功,要么全部失败 ...

  4. web 部署专题(二):gunicore 并发部署(用gunicorn+gevent启动Flask项目)

    转自:https://blog.csdn.net/dutsoft/article/details/51452598 Flask,webpy,Django都带着 WSGI server,当然性能都不好, ...

  5. BFC 生成 特性 解决的问题

    BFC( 块级格式化上下文 ) 块级格式化上下文,它是指一个独立的块级渲染区域, 只有 Block­level BOX 参与,该区域拥有一套 渲染规则来约束块级盒子的布局,且与区域外部无关. 如何生成 ...

  6. html 转义和反转义

    public static void main(String[] args) {// String html = "<img style=\"width: 100%; hei ...

  7. Go Pentester - HTTP CLIENTS(1)

    Building HTTP Clients that interact with a variety of security tools and resources. Basic Preparatio ...

  8. 使用Java带你打造一款简单的外卖系统

    [一.项目背景] 随着互联网时代的快速发展,便捷人民的生活,提高生活质量,外卖系统应运而生. 人们也喜欢享受着"足不出户,美食到家"的待遇,促使网上订餐行业快速发展. [二.项目目 ...

  9. Qt-数据库操作SQLite

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

  10. Linux常用命令归类总结

    文件相关 创建文件 touch: touch README.md ">"重定向: echo 'study and share' > README.md vi & ...