小编看来,docker至关于一台虚拟机,咱们你们或多或少玩过vmware虚拟机,咱们通常都会在虚拟机上装一些软件,好比mysql,道理同样,咱们也能够在docker上面安装一些软件,redis或者mysql或者本身开发的应用程序。html
另外,咱们都知道maven,maven有本身的中央仓库,道理同样,docker也有本身的仓库。那么maven中央仓库存储什么呢?答案是构建(Artifact),一样的道理,docker也存放着本身的东西,只不过这些东西咱们不叫构建,咱们叫镜像,docker仓库也称为镜像仓库。java
上面提到的内容,咱们能够总结出几个知识点。mysql
小编认为,docker自己就是一个服务,要在linux上面搭建docker服务,咱们首先要作的无非就是下载并启动docker。在centos、redhat上,咱们能够经过下面命令安装咱们的docker容器。linux
yum install docker
git
下载完成以后,咱们能够经过下面命令查看下docker安装的位置以及版本,输出以下:web
whereis docker
docker --version
复制代码
下载完成,咱们进行安装,咱们能够选择将docker安装成为一个开机自启动的服务,命令以下:redis
service docker start # 启动服务
chkconfig docker on # 设置为开机自启动
复制代码
咱们假设你的linux机器上已经安装了jdk8和maven。spring
咱们首先在[start.spring.io/]网站上建立一个springboot web Demo程序,大体的目录结构以下:sql
其中application.properties
文件没有任何内容,咱们在resources目录下新建一个Dockerfile
文件,内容以下:docker
FROM openjdk:8-jdk-alpine
MAINTAINER "hjw"<lifvalue>
ADD demo-1.0.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
复制代码
注意,Dockerfile是从指令FROM
开始的,并且每一个指令首字母要大写。 FROM
表示该镜像的源镜像是哪里,咱们使用openjdk8的镜像做为源镜像,更多源镜像,咱们可使用docker search xxx
来搜索,xxx是具体镜像名称。 MAINTAINER
告诉咱们镜像维护者是谁 ADD
指令表示将咱们的demo-1.0.jar
这个文件添加进来,而且从新命名成app.jar
EXPOSE
表示该镜像启动的时候,所使用的的端口是什么,注意,这里有一个坑,咱们最开始说docker就像是虚拟机,因此此处的端口并非你宿主机器的物理端口,而是只docker这个容器内部的地址。咱们可使用-P -p intenelport:outport
进行映射。 ENTRYPOINT
为了缩短 Tomcat 的启动时间,添加java.security.egd的系统属性指向/dev/urandom做为 ENTRYPOINT
再贴一下pom.xml
文件,以下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>1.0</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<docker.image.prefix>springboot</docker.image.prefix>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<!-- 镜像名称 -->
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<!-- 这里填写咱们Dockerfile文件的地址 -->
<dockerDirectory>src/main/resources</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
<!-- Docker maven plugin -->
</plugins>
</build>
</project>
复制代码
MyController.java
@RestController
public class MyController {
@RequestMapping("/sayhello")
private void sayhello() {
System.err.println("hello docker!");
}
}
复制代码
使用fstp工具,将咱们的demo代码拷贝到咱们的linux机器上,使用下面命令进行打包: mvn package
若是没有报错,咱们使用docker来构建咱们的应用成为一个标准的镜像,命令以下: mvn package docker:build
到这里就表示构建镜像成功了。如何查看咱们的镜像仓库都有哪些镜像呢?使用以下命令便可~ docker images
好了,镜像有了,也就至关于咱们的虚拟机有了mysql了,接下来咱们就来运行咱们刚刚构建的springboot镜像文件,命令以下:
docker run -P -d -p 8080:8080 springboot/demo
复制代码
-P
表示开启docker虚拟端口-物理端口的映射关系 -p
表示具体指定映射到哪一个端口 -d
表示镜像在后台运行
启动完毕以后,咱们开下另一个端口,访问咱们刚刚写的接口。
本文的对docker只是作了简单的介绍,更多更高级的docker特性,期待咱们后面进一步学习掌握。docker的应用不少,在Web 应用的自动化打包和发布、CI/CD中应用颇多。在自动化打包和发布中,咱们通常能够结合git,jenkins来完成这项工做。 咱们可能会问,微服务中某个服务咱们可能会提供集群,固然docker也能够;微服务中,咱们服务愈来愈多的时候会有服务治理,docker愈来愈多怎么办呢?答案是docker容器编排,咱们能够继续往下深刻了解K8S。
更多docker指令,请移步参考:docker指令大全
更多dockfile指令写法,请移步:dockerfile指令官方文档