Docker 鏡像編排並部署SpringBoot應用

Docker-compose是一個基於Docker的編排工具,所謂編排我的理解就是將不一樣的鏡像經過配置,組成一個新的運行環境,官方定義是:Compose is a tool for defining and running multi-container Docker applications.java

很簡單的一句話,下面咱們看下怎麼部署一個JavaWeb項目.主要有幾大步驟:mysql

  • 安裝Dcoker 和Docker-compose
  • 編譯項目生成JAR包
  • 建立自定義的docker鏡像
  • 建立docker-compose的配置文件
  • 啓動服務

安裝

安裝docker 和 docker-compose 同樣都很是的簡單,這裏不在多贅述,官網都有很是詳細的教程. 至於docker_compose就是一個命令文件,將其所在的路徑配置PATH環境變量中便可,不配置也行,這樣的話就要打全路徑了,比較麻煩.linux

啓動Docker服務

我是用的是Manjaro的Linux發行版本,啓動docker服務的命令systemctl start docker,git

$ docker version
Client:
 Version:      18.05.0-ce
 API version:  1.37
 Go version:   go1.10.2
 Git commit:   f150324782
 Built:        Wed May 16 22:27:45 2018
 OS/Arch:      linux/amd64
 Experimental: false
 Orchestrator: swarm

Server:
 Engine:
  Version:      18.05.0-ce
  API version:  1.37 (minimum version 1.12)
  Go version:   go1.10.2
  Git commit:   f150324782
  Built:        Wed May 16 22:28:17 2018
  OS/Arch:      linux/amd64
  Experimental: false

查看Docker-compose

下載docker-compose完成以後,使用chmod +x docker-componse 來受權,不然會出現權限拒絕的報錯信息github

配置完成只有,在命令行中輸入docker-compose version查看是否安裝成功,輸出相似如下信息,則表明成功sql

$ docker-compose version
docker-compose version 1.22.0-rc2, build 6817b533
docker-py version: 3.4.1
CPython version: 3.6.6
OpenSSL version: OpenSSL 1.1.0f  25 May 2017

建立Docker鏡像

建立配置文件

此文件名位Dockerfiledocker

FROM hub.c.163.com/library/java:8
VOLUME /tmp
ADD dmc_user.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
  • 依賴網易雲的java:8鏡像
  • 拷貝jar文件到鏡像中
  • 執行命令運行

下面咱們將使用Shell腳本的方式來利用這個Docker文件來進行建立鏡像shell

編譯生成鏡像文件

因爲這裏使用SpringBoot建立的項目,我的使用Gradle構建項目,使用Maven或者其餘方式構建的都可,這裏寫了一個Shell腳本,以下所示:數據庫

#!/usr/bin/env bash

#配置相關的路徑地址
#配置項目名稱
project_name="DMC_USER"
# 配置源碼地址
project_dir="/home/yan/code/work/zhuxun/dmc_user"
#配置shell地址
shell_dir="/home/yan/code/shell/dmc/user"

echo "正在準備編譯項目${project_name}....."
#切換到項目目錄
cd ${project_dir}
echo "已經成功切換到${project_name}的工做目錄......"
#使用gradle編譯,跳過單元測試
./gradlew build -x test
if [ $? -eq 0 ]; then
    echo "正在拷貝JAR文件............"
#    編譯成功,則將JAR文件拷貝當前Shell目錄
    cp build/libs/dmc_user-0.0.1-SNAPSHOT.jar ${shell_dir}/dmc_user.jar
    cd ${shell_dir}
	echo "編譯成功,正在編譯爲Docker鏡像,請等待...."
#	使用docker build命令構建鏡像文件,此時會讀取Dockerfile文件
	docker build -t dmc_user:latest ${shell_dir}
	if [ $? -eq 0 ]; then
		echo "編譯鏡像成功,請使用docker images命令查看效果....."
	fi
fi

添加運行權限,運行之......api

因爲我這裏使用的多個項目進行同事運行,所以須要在次編譯另一個項目,方法相似,這裏不在贅述. 編譯完成以後,咱們在Dockerfile中查看一下鏡像

$ docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
dmc_user                      latest              a7ea7b79390f        3 hours ago         692MB
dmc_apim                      latest              56c7f37aee13        16 hours ago        704MB
hub.c.163.com/library/java    8                   a001fc27db5a        19 months ago       643MB

建立配置文件

到這裏,咱們的鏡像已經準備好了,下面咱們使用docker-compose來編排鏡像,組成新的服務.在shell的目錄下建立 文件名稱docker-compose.yml的配置文件,內容以下(刪除註釋)...

# 配置文件的版本
version: '2'
# 建立的服務,這裏我建立了3個服務,兩個jar項目做爲演示,一個mysql做爲服務器
services:
  dmc_api:
#    容器的名稱
    container_name: dmc_apim
#    容器的端口信息,這裏的SpringBoot項目的端口是9092,能夠在宿主機經過8082訪問
    ports:
      - "8082:9092"
#      依賴的docker images鏡像名稱,固然也有版本這裏是簡寫 dmc_api:latest
    image: dmc_apim
#    建立自服務的依賴項,此服務依賴屬於mysql,在咱們建立的三個服務中的最後一個
    depends_on:
      - dmc_dev_mysql

  dmc_user:
    container_name: dmc_user
    ports:
      - "8081:9091"
    image: dmc_user
    depends_on:
      - dmc_dev_mysql

  dmc_dev_mysql:
#  這個屬性很是重要,在SpringBoot的服務中,能夠經過這個名稱訪問,若是名稱衝突,docker_compose會自動的添加後綴致使SpringBoot項目找不到數據庫鏈接,
#  從而啓動失敗,所以須要配置容器的名稱
    container_name: dmc_dev_mysql
#    掛載目錄,其中 /docker-entrypoint-initdb.d/ 是比較重要的,他能夠進行mysql的初始化,在咱們的mysql服務的時候啓動初始化腳本
#    所以須要在掛載的目錄下建立init.sql腳本文件,用於初始化
    volumes:
      - ./data/:/var/lib/mysql/
      - ./mysql/init/:/docker-entrypoint-initdb.d/
#      配置映射端口,這裏mysql的端口默認是3306,咱們將其映射到宿主機的9936端口
    ports:
      - "9936:3306"
#      依賴的鏡像
    image: hub.c.163.com/library/mysql
#    鏡像運行須要的參數,能夠根據本身的須要來配置,這個請參考鏡像的說明文件
    environment:
      MYSQL_ALLOW_EMPTY_PASSWORD: yse

這裏和建立docker Image相似,都是使用配置文件,咱們來看下咱們的配置文件,配置文件名稱是固定的,所以要求名稱要寫對,不然會報一些錯誤:

$ docker-compose up
ERROR: 
        Can't find a suitable configuration file in this directory or any
        parent. Are you in the right directory?

        Supported filenames: docker-compose.yml, docker-compose.yaml

能夠看到,最後一句話中說明了配置的文件名稱 Supported filenames: docker-compose.yml, docker-compose.yaml

## 啓動Docker-compose

使用命令```docker-compose up```能夠啓動編排,要求運行此命令運行路徑下必須有docker-compose的配置文件,不然會報上面的找不到文件,
添加 *-d *    就能夠後臺運行,查看docker-compose的幫助文件咱們看下docker容器的情況:

```shell
$ docker ps -a
CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS                   PORTS                    NAMES
6c2b3823bd93        dmc_apim                      "java -Djava.securit…"   2 hours ago         Up 2 hours               0.0.0.0:8082->9092/tcp   dmc_apim
f1473486bbec        dmc_user                      "java -Djava.securit…"   2 hours ago         Up 2 hours               0.0.0.0:8081->9091/tcp   dmc_user
3c632926a642        hub.c.163.com/library/mysql   "docker-entrypoint.s…"   2 hours ago         Up 2 hours               0.0.0.0:9936->3306/tcp   dmc_dev_mysql

能夠看到兩個SpringBoot項目和一個MySql項目在docker中運行完成.....

附錄 docker-compose命令

命令名稱 說明
docker-compose build Build or rebuild services
docker-compose bundle Generate a Docker bundle from the Compose file
docker-compose config Validate and view the Compose file
docker-compose create Create services
docker-compose down Stop and remove containers, networks, images, and volumes
docker-compose events Receive real time events from containers
docker-compose exec Execute a command in a running container
docker-compose help Get help on a command
docker-compose images List images
docker-compose kill Kill containers
docker-compose logs View output from containers
docker-compose pause Pause services
docker-compose port Print the public port for a port binding
docker-compose ps List containers
docker-compose pull Pull service images
docker-compose push Push service images
docker-compose restart Restart services
docker-compose rm Remove stopped containers
docker-compose run Run a one-off command
docker-compose scale Set number of containers for a service
docker-compose start Start services
docker-compose stop Stop services
docker-compose top Display the running processes
docker-compose unpause Unpause services
docker-compose up Create and start containers
docker-compose version Show the Docker-Compose version information

更多內容請查看 Docker-componse官網教程

相關文章
相關標籤/搜索