Docker快速上手之部署SpringBoot項目

Docker是基於Go語言實現的雲開源項目。

Docker的主要目標是“Build,Ship and Run Any App,Anywhere”,也就是通過對應用組件的封裝、分發、部署、運行等生命週期的管理,使用戶的APP(可以是一個WEB應用或數據庫應用等等)及其運行環境能夠做到“一次封裝,到處運行”。

Linux 容器技術的出現就解決了這樣一個問題,而 Docker 就是在它的基礎上發展過來的。將應用運行在 Docker 容器上面,而 Docker 容器在任何操作系統上都是一致的,這就實現了跨平臺、跨服務器。只需要一次配置好環境,換到別的機子上就可以一鍵部署好,大大簡化了操作。

 一、我所理解的Docker

我喜歡將Docker比喻成"方便麪",爲什麼說是方便麪,之前部署項目環境的配置十分麻煩,換一臺機器,就要重來一次,費力費時。舉個栗子,我們部署一個SpringBoot項目,我們需要在服務器上面配置項目的運行環境,要安裝各種各樣的軟件JDK/MySQL/Redis/nginx,安裝和配置這些東西十分麻煩,下次需要換個服務器重新部署又得重新安裝一遍,簡直要命。而Docker能將項目連帶着運行環境一同部署過去,就好像泡麪,泡麪所需的調料包還有工具都附加在了裏面。一句話總結Docker的好處,Docker解決了運行環境和配置問題,方便做持續集成並有助於整體發佈的容器虛擬化技術。

 二、Docker與虛擬機的區別

  Docker容器 虛擬機(VM)
操作系統  與宿主機共享OS 宿主機OS上運行虛擬機OS
存儲大小 鏡像小,便於存儲與傳輸 鏡像龐大(vmdk、vdi等)
運行性能 幾乎無額外性能損失 操作系統額外的CPU、內存消耗
移植性 輕便、靈活,適用於Linux 笨重,與虛擬化技術耦合度高
硬件親和性 面向軟件開發者 面向硬件運維者

 

 三、Docker裏面三個重要的概念Dockerfile、鏡像(image)、容器(Container)
1.Dockerfile是用來構建Docker鏡像的構建文件,是由一系列命令和參數構成的腳本。

Dockerfile體系結構:

複製代碼
FROM  基礎鏡像,當前新鏡像是基於哪個鏡像的
MAINTAINER  鏡像維護者的姓名和郵箱地址
RUN  容器構建時需要運行的命令
EXPOSE  當前容器對外暴露出的端口
WORKDIR  指定在創建容器後,終端默認登錄進來的工作目錄,一個落腳點
ENV  用來在構建鏡像過程中設置環境變量
AD  將宿主機目錄下的文件拷貝進鏡像且ADD命令會自動處理URL和解壓tar壓縮包
COPY  類似ADD,拷貝文件和目錄到鏡像中。將從構建上下文目錄中<源路徑>的文件/目錄複製到新的一層的鏡像內的<目標路徑>位置
VOLUME  容器數據卷,用於數據保存和持久化工作
CMD  指定一個容器啓動時要運行的命令。Dockerfile中可以有多個CMD指令,但只要最後一個生效,CMD會被docker run之後的參數替換
ENTRYPOINT  指定一個容器啓動時要運行的命令。ENTRYPOINT的目的和CMD一樣,都是在指定容器啓動程序及參數
ONBUILD  當構建一個被繼承的Dockerfile時運行命令,父鏡像在被子繼承後父鏡像的onbuild被觸發
複製代碼

2.鏡像是一種輕量級、可執行的獨立軟件包,用來打包軟件運行環境和基於運行環境開發的軟件,它包含運行某個軟件所需的所有內容,包括代碼、運行時、庫、環境變量和配置文件。

3.容器是用鏡像創建的運行實例。它可以被啓動、開始、停止、刪除。每個容器都是相互隔離的、保證安全的平臺。可以把容器看做是一個簡易版的Linux環境(包括root用戶權限、用戶空間和網絡空間等)和運行在其中的應用程序。

四、安裝Docker

1.安裝Docker依賴包

yum install -y yum-utils device-mapper-persistent-data lvm2

2.設置阿里雲鏡像源

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3.安裝 Docker-CE

yum install docker-ce

4.查看是否安裝成功

docker version

五、使用Docker安裝MySQL

1.使用Docker拉取Mysql鏡像(這裏安裝的是MySQL5.6版本)

docker pull mysql:5.6

2.安裝mysql命令

docker run -d -p 3306:3306 --name mysql -v /ray/mysql/conf:/etc/mysql/conf.d -v /ray/mysql/logs:/logs -v /ray/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=admin -d mysql:5.6

命令說明:

複製代碼
-p 3306:3306  將主機的3306端口映射到docker容器的3306端口
--name mysql  運行服務器名字
-v /ray/mysql/conf:/etc/mysql/conf.d  將主機/ray/mysql目錄下的conf/my.cnf掛載到容器的/etc/mysql/conf.d
-v /ray/mysql/logs:/logs  將主機/ray/mysql目錄下的logs目錄掛載到容器的/logs
-v /ray/mysql/data:/var/lib/mysql  將主機/ray/mysql目錄下的data目錄掛載到容器的/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=admin  初始化root用戶的密碼
-d mysql:5.6  後臺程序運行mysql5.6
複製代碼

3.進入mysql

docker exec -it MySQL運行成功後的容器ID /bin/bash

然後即可登錄MySQL,創建數據庫,或者使用Navicat等工具創建數據庫。

六、使用Docker安裝Redis

1.使用Docker拉取Redis鏡像(這裏安裝的是Redis3.2版本)

docker pull redis:3.2

2.安裝redis命令(這裏不對命令做解釋)

docker run -p 6379:6379 -v /ray/redis/data:/data -v /ray/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf -d redis:3.2 redis-server /usr/local/etc/redis/redis.conf --appendonly yes

七、Docker部署SpringBoot項目

1.將項目打包成jar包(假設名字爲myblog.jar),並編寫一個Dockerfile文件,文件內容如下:

複製代碼
# Docker image for springboot file run
# VERSION 0.0.1
# Author: Ray
# 基礎鏡像使用java
FROM java:8
# 作者
MAINTAINER Ray <[email protected]>
# VOLUME 指定了臨時文件目錄爲/tmp。
# 其效果是在主機 /var/lib/docker 目錄下創建了一個臨時文件,並鏈接到容器的/tmp
VOLUME /tmp
# 將jar包添加到容器中並更名爲app.jar
ADD myblog.jar app.jar
# 運行jar包
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
#暴露8080端口
EXPOSE 80
複製代碼

2.將這兩個文件一併上傳至服務器中的同一個目錄下面,進入該文件夾後執行此命令構建鏡像:

docker build -t myblog.jar .

3.生成docker容器,並運行

docker run -d -p 80:80 myblog.jar

等一會兒,SpringBoot項目跑起來了後,就可以使用瀏覽器通過80端口進行訪問了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章