不搞虛的!快速把你拉入Docker 的門裏

在這裏插入圖片描述

前言

學習一門東西你要先搞懂怎麼使用它。以及使用它的一些操作用語。就好比你去駕校學車,教練首先給你講這個是方向盤、這個是油門、這個是剎車一定要記住,關鍵時刻可以保命。然後開始教你怎麼讓車啓動並慢慢跑起來。本文通過 Docker 部署 SpringBoot 帶你快速瞭解 Docker 簡單使用 Demo 級別操作。謹以此文獻給剛入門的小白,大牛勿噴。

通過本文你將瞭解到如下內容:

  1. Docker 是什麼以及 Docker專用名詞
  2. Docker 安裝
  3. 快速創建SprngBoot項目
  4. SprngBoot項目 Docker化

瞭解 Docker 以及相關的專有名詞

Docker 是將程序隔離打包的一種容器技術,也被稱爲“輕量級”虛擬化技術。關於容器技術與物理機和虛擬機的區別,可以參考下面2篇講的不錯博文介紹:

說到 Docker 就不得不提三個知識點:鏡像、容器、倉庫 Docker 必學的三要素,那它們具體代碼什麼意思呢?聽我給你慢慢道來。

鏡像:就相當於是一個 root 文件系統。比如官方鏡像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系統的 root 文件系統。可以理解成啓動容器的模板

容器:容器,其實是一種特殊的進程而已。Docker 爲該進程劃分一個獨立空間

倉庫:是用來存儲鏡像的,可以理解成專門存儲鏡像的倉庫。

鏡像(Image)和容器(Container)的關係,就像是面向對象程序設計中的類和實例一樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器可以被創建、啓動、停止、刪除、暫停等。

Dockerfile:可以通過構建文件創建自定義鏡像。

實戰操作

安裝Docker

可以直接去 https://hub.docker.com/ 下載安裝包進行下載安裝,前提是需要註冊一個賬號。也可以直接參考菜鳥的安裝教程:

windows 安裝教程

win7、win8 系統 和 win10 系統安裝配置不同具體請參考菜鳥安裝教程

MacOS Docker 安裝

需要注意的是 菜鳥教程 Mac 安裝教程提供了2個安裝包連接分別爲:edge 和 stable,這2個安裝包區別如下:
edge:嚐鮮版 每個月發佈一次 可能存在一定問題
stable:穩定版 每個季度更新一次 相對穩定的版本
初學者建議下載stable進行安裝。

配置Docker鏡像加速

點擊任務欄中docker圖標然後點擊 Settings 後如下圖所示配置鏡像加速地址

image.png

其他系統配置方式請菜鳥教程參考:

https://www.runoob.com/docker/docker-mirror-acceleration.html

可選的鏡像加速地址如下:

  • Docker官方提供的中國鏡像庫地址:https://registry.docker-cn.com
  • 七牛雲加速器地址:https://reg-mirror.qiniu.com
  • 網易的鏡像地址:http://hub-mirror.c.163.com
  • 阿里雲鏡像地址:每個阿里雲賬號提供一個唯一的地址

關於阿里雲鏡像操作請參考:Docker(二)使用阿里雲docker鏡像加速 By 路西法_Lucifer

搭建SpringBoot 項目並將其 Docker化

第一步:創建 maven 項目然後引入 SpringBoot的 Parent 依賴。

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.0.RELEASE</version>
        <relativePath/> 
    </parent>

第二步:引入 SpringBoot web stater 依賴。

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

第三步:在 build 標籤內添加 finalName標籤配置SpringBoot項目可執行jar包的名稱。具體代碼如下:

 <finalName>demo</finalName>

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.1.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>org.example</groupId>
    <artifactId>demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <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>
        <finalName>demo</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!-- 5、添加插件指定jdk -->
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <fork>true</fork>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

第四步:創建 SpringBoot的啓動類 在src/main/java 目錄下,具體代碼如下:

package cn.zhuoqianmingyue.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}

}

第五步:創建用於測試的Controller,具體代碼如下:

package cn.zhuoqianmingyue.demo.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloDockerController {
    @GetMapping("/hello")
    public String hello(){
        return "hello docker";
    }
}

第六步:在demo項目中創建 Dockerfile,具體內容如下:

# FROM 自定義的鏡像基於 java:8鏡像創建。
FROM java:8
# MAINTAINER 作者的信息
MAINTAINER zhuoqianmingyue [email protected]

# COPY 拷貝target目錄下的demo.jar 到自定義鏡像中。
COPY target/demo.jar /demo.jar

# 運行程序執行的命令,相當於在命令窗口中執行 java -jar demo.jar
ENTRYPOINT ["java", "-jar", "/demo.jar"]

第七步:在 demo項目中創建構建鏡像的腳本 build.sh,具體內容如下:

#!/usr/bin/env bash
# 將SpringBoot 項目打包
mvn package

# 根據當前目錄下Dockerfile配置文件創建鏡像
docker build -t demo:latest .

demo:latest :demo 表示鏡像的名稱,latest 表示版本號。

項目的目錄結構如下圖所示:

image.png

第八步:選中 build.sh 然後右擊選擇Run build.sh 執行腳本。

image.png

執行完畢後可以通過 docker images 查看生成的鏡像。

image.png

通過 demo:latest 鏡像啓動一個容器執行的命令如下:

docker run -idt -p 8080:8080 demo:latest

docker run 依靠鏡像運行容器

  • -i 以交互模式運行容器,通常與 -t 同時使用。
  • -t 爲容器重新分配一個僞輸入終端,通常與 -i 同時使用。
  • -d 後臺運行容器,並返回容器ID。
  • -p 指定端口映射,格式爲:主機(宿主)端口:容器端口。
  • demo:latest 鏡像名稱:鏡像版本號。

image.png

docker ps 查看正在運行的鏡像

image.png

  • CONTAINER_ID:容器ID
  • IMAGE:具體的鏡像
  • COMMOND:運行程序執行的命令
  • STATUS:容器的狀態
  • PORTS:容器映射的端口
  • NAMES:容器的名稱

通過 docker log -f 容器ID 查看 SpringBoot 項目啓動日誌,具體操作如下圖。

image.png

Windows通過 Docker 啓動一個容器可以理解成創建了一個Linux的虛擬機,並在該虛擬機中運行我們的程序。可以通過 docker exec -it 容器ID /bin/bash 進入容器(也可以理解成進入Linux的虛擬機)。執行 curl localhost:8080/hello 在虛擬機本地訪問運行SpringBoot 項目,具體操作如下:

image.png
image.png

因爲Docker 相當於創建了一個Linux的虛擬機,所以直接通過遊覽器執行 localhost是訪問不了的。因爲這個問題各種百度大部分介紹都是通過執行docker-machine ip default 查看虛擬機的 ip 但是我執行後是這樣的

image.png

命令建議我們通過 docker-machine ls 查看,具體操作如下:

image.png

自己對 docker-machine 操作不是很熟,希望有解決了的小夥伴私信我。

雖然通過 docker-machine 沒有獲取到虛擬機的 ip ,但是我通過另外的方式獲取到了,具體操作如下:

執行ipconfig 查看Docker 虛擬主機的 ip,具體操作如下:

image.png

然後通過ip 訪問以SpringBoot 搭建的 Demo 項目。

image.png

需要說明的是我的機器是 win10 64位操作系統。

到這裏所有操作執行完畢!接下來開始做一個簡單的總結。

小結

將一個 SpringBoot Docker 化的具體操作步驟如下:

  1. 創建SpringBoot項目
  2. 定義Dockerfile 文件來創建自定義鏡像
  3. 通過自定義鏡像啓動容器。
  4. 查看容器中應用程序的日誌以及訪問運行中的程序

關於鏡像、容器、Dockerfile 常用的操作命令如下:

命令 用途 示例
docker images 查看主機上的鏡像列表 docker images
docker pull 下載鏡像到本地主機 docker pull redis:latest
docker search 查找鏡像 docker search redis
docker rmi 鏡像名稱 刪除鏡像 docker rmi demo
docker tag 鏡像ID 用戶名稱/鏡像源名(repository name):新的標籤名(tag) 爲鏡像打標籤 docker tag 860c279d2fec zqmy/demo:5.3
docker ps 查看啓動中的容器 docker ps
docker ps -a 查看啓動容器歷史記錄 docker ps -a
docker run 啓動容器 docker run -itd --name redis-test -p 6379:6379 redis
docker stop <容器 ID> 停止容器 docker stop a750ccbcad88
docker restart <容器 ID> 重啓容器 docker restart a750ccbcad88
docker exec -it <容器 ID> /bin/bash 進入容器 docker exec -it a750ccbcad88 /bin/bash
docker rm -f <容器 ID> 刪除容器 docker rm -f a750ccbcad88
docker log -f <容器 ID> 查看容器日誌輸出 docker log -f a750ccbcad88

在這裏感謝以下免費學習 Docker 教程,本文教程大部分參照以下內容進行編寫

發佈了138 篇原創文章 · 獲贊 525 · 訪問量 28萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章