附帶實戰的Docker入門教程(簡簡單單)

1、如何簡單理解Docker

小編看來,docker至關於一臺虛擬機,咱們你們或多或少玩過vmware虛擬機,咱們通常都會在虛擬機上裝一些軟件,好比mysql,道理同樣,咱們也能夠在docker上面安裝一些軟件,redis或者mysql或者本身開發的應用程序。html

另外,咱們都知道maven,maven有本身的中央倉庫,道理同樣,docker也有本身的倉庫。那麼maven中央倉庫存儲什麼呢?答案是構建(Artifact),一樣的道理,docker也存放着本身的東西,只不過這些東西咱們不叫構建,咱們叫鏡像,docker倉庫也稱爲鏡像倉庫。java

上面提到的內容,咱們能夠總結出幾個知識點。mysql

  • 一、docker有本身的中央鏡像倉庫,也有相似maven倉庫地址可分爲第三方倉庫,甚至,咱們能夠搭建本身的docker鏡像倉庫地址,harbor能夠了解一下。
  • 二、docker就相似一臺虛擬機,咱們成爲容器,容器顧名思義就是裝東西,裝的東西咱們稱爲鏡像

2、Docker安裝

小編認爲,docker自己就是一個服務,要在linux上面搭建docker服務,咱們首先要作的無非就是下載並啓動docker。在centos、redhat上,咱們能夠經過下面命令安裝咱們的docker容器。linux

yum install dockergit

下載完成以後,咱們能夠經過下面命令查看下docker安裝的位置以及版本,輸出以下:web

whereis docker
docker --version
複製代碼

下載完成,咱們進行安裝,咱們能夠選擇將docker安裝成爲一個開機自啓動的服務,命令以下:redis

service docker start  # 啓動服務
chkconfig docker on   # 設置爲開機自啓動
複製代碼

3、在Docker上部署咱們的SpringBoot服務

咱們假設你的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表示鏡像在後臺運行

啓動完畢以後,咱們開下另一個端口,訪問咱們剛剛寫的接口。

4、Docker擴展

本文的對docker只是作了簡單的介紹,更多更高級的docker特性,期待咱們後面進一步學習掌握。docker的應用不少,在Web 應用的自動化打包和發佈、CI/CD中應用頗多。在自動化打包和發佈中,咱們通常能夠結合git,jenkins來完成這項工做。 咱們可能會問,微服務中某個服務咱們可能會提供集羣,固然docker也能夠;微服務中,咱們服務愈來愈多的時候會有服務治理,docker愈來愈多怎麼辦呢?答案是docker容器編排,咱們能夠繼續往下深刻了解K8S。

更多docker指令,請移步參考:docker指令大全

更多dockfile指令寫法,請移步:dockerfile指令官方文檔

相關文章
相關標籤/搜索