小編看來,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指令官方文檔