使用docker,docker-compose發佈springboot服務

首先須要安裝docker和docker-compose

docker安裝再也不演示,此處演示如何安裝docker-composejava

sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version

一、建立Dockerfile

Dockerfile是一個文本文件。git

  • 登陸Linux系統,在根目錄建立一個文件夾。
[root@rainbow /]# mkdir web
[root@rainbow /]# cd web/
[root@rainbow web]#
  • 建立Dockerfile
[root@rainbow web]# vi Dockerfile
  • Dockerfile文件內容以下:
FROM java:8
ADD rainbow-api-user-0.0.1-SNAPSHOT.jar rainbow-api-user.jar
RUN bash -c 'touch /rainbow-api-user.jar'
EXPOSE 8085
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/rainbow-api-user.jar"]
  • 保存退出。
  • 關於Dockerfile文件命令請查看相關文檔

二、打包、上傳spring boot項目的jar文件

  • 打包
    點擊以下圖:

image.pnggithub

  • 而後輸入命令:

image.pngweb

  • 說明:關於數據庫鏈接的配置
  • 因爲個人mongodb數據庫是安裝在Linux中的,項目部署後,是去訪問Linux中的mongodb,雖然docker也是安裝在Linux上的,可是數據庫鏈接不能配置爲127.0.0.1,由於127.0.0.1是指向docker容器本身。由於Linux與物理機共用IP,因此查看一下宿主機的IP是多少,那就把數據庫配置鏈接中的IP寫成多少,如個人宿主機IP是192.168.31.88,那配置以下:

image.pngspring

  • 若是配置爲127.0.0.1,那從物理機能夠訪問到Linux中的mongodb,可是若是spring boot部署到docker容器中,就沒法訪問了,由於127.0.0.1指向的是容器自己。這點我也是踩了個坑。mongodb

  • 待項目打包完成後,在項目的target路徑下,會有兩個jar包,咱們須要以下的:docker

image.png數據庫

  • 上傳項目,使用sftp 工具,將jar文件上傳到Linux服務器。
    咱們在剛剛建立的web目錄下,再建立一個webapp文件夾,並把Dockerfile文件移動到webapp文件夾下:
[root@rainbow web]# mkdir webapp
[root@rainbow web]# mv Dockerfile webapp/

將jar文件上傳到webapp目錄下。此時,webpp下有以下兩個文件:centos

image.pngapi

如今,咱們可使用docker來構建項目了。因爲咱們本次的目的是使用docker-compose構建,因此只寫出構建命令
在webapp路徑下執行:

docker build -t spring .
  • 注意:命令最後的那個點,不能少,表示的是當前路徑,由於Dockerfile在當前路徑下。spring是構建的鏡像名,能夠本身取。

三、使用docker-compose構建

首先,新建一個docker-compose.yml文件。因爲這是個yaml文件,因此格式、縮進很重要。爲了避免出錯,因此在spring boot項目的resources目錄下新建一個docker-compose.yml文件,配置好相關項以後,再上傳到服務器。內容以下:

spring:
  build: ./webapp
  ports:
   - "80:8085"
  • 這個腳本表示,從當前路徑的webapp目錄中建立鏡像,並將鏡像命名爲:web,而後使用宿主的80端口映射容器的8085端口。固然,webapp中存放有項目的jar和Dockerfile腳本。

  • 說明:容器的8085端口,由於我本身的項目是跑在8085端口上的,因此要將容器的8085端口映射出來,才能訪問。

  • 將docker-compose.yml文件上傳到服務器的web目錄下:

  • 此時,web的目錄結構以下:

image.png

  • 最後,咱們就可使用docker-compose up -d 命令來構建運行了。-d表示在後臺運行。注意,要在web路徑下執行。

  • 構建成功以後,會與以下的提示:

[root@rainbow web]# docker-compose up -d
Building spring
Step 1 : FROM java:8
 ---> d23bdf5b1b1b
Step 2 : ADD rainbow-api-user-0.0.1-SNAPSHOT.jar rainbow-api-user.jar
 ---> e2d71b21b18d
Removing intermediate container a67714060589
Step 3 : RUN bash -c 'touch /rainbow-api-user.jar'
 ---> Running in 80373f7f206f
 ---> 00e9ab13963d
Removing intermediate container 80373f7f206f
Step 4 : EXPOSE 8085
 ---> Running in a161e595c79c
 ---> b77fe6b6f8e3
Removing intermediate container a161e595c79c
Step 5 : ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -jar /rainbow-api-user.jar
 ---> Running in e25617bae6a2
 ---> a5a04f6f82a1
Removing intermediate container e25617bae6a2
Successfully built a5a04f6f82a1
WARNING: Image for service spring was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating web_spring_1 ... 
Creating web_spring_1 ... done
[root@rainbow web]#
  • 到此,容器已經構建運行完成。spring boot項目已經完成發佈了。

  • 查看運行的容器

docker-compose ps
  • 能夠看到,咱們的容器已經正在運行了。
[root@rainbow web]# docker-compose ps
    Name                  Command               State          Ports         
web_spring_1   java -Djava.security.egd=f ...   Up      0.0.0.0:80->8085/tcp 
[root@rainbow web]#
  • 查看容器的日誌信息:
    docker-compose logs -f [容器名]
docker-compose logs -f spring

image.png

  • 中止容器
docker-compose stop spring
  • 啓動容器
docker-compose start spring
  • 訪問spring boot項目。如今,能夠訪問容器了。spring boot項目的端口號是8085,咱們把容器的8085端口映射到了宿主機的80端口,因此能夠直接使用80端口訪問項目。
相關文章
相關標籤/搜索