Docker部署spring boot項目

  • 2020 年 11 月 18 日
  • 筆記

1.打包

將項目打jar包並傳到伺服器的一個文件夾中,我的是/opt/docker,注意項目中的mysql配置的IP是伺服器公網的ip地址

#數據源設置
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.url=jdbc:mysql://121.199.74.249:1008/blog?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

server.port=8888

2.在同一文件夾中編寫Dockerfile

touch Dockerfile
# 基礎鏡像使用java
FROM java:8
EXPOSE 8888
# 作者
MAINTAINER tyy<[email protected]>
# VOLUME 指定了臨時文件目錄為/tmp。
# 其效果是在主機 /var/lib/docker 目錄下創建了一個臨時文件,並鏈接到容器的/tmp
#在容器中創建掛載點,可以多個
VOLUME /tmp
# 就是配置文件中的日誌文件夾
VOLUME /logfile  
# 將jar包添加到容器
ADD tyyblog.jar blog.jar
# 運行jar包
RUN sh -c 'touch /blog.jar '
ENTRYPOINT ["sh","-c","java -jar /blog.jar "]

3.build鏡像

docker build -t blog .

現在就有名字為blog的鏡像

4.需要在倉庫拉一個mysql的鏡像

docker pull mysql:8.0

5.先創建啟動mysql的容器

docker run -p 3306:3306 --name mysql1 -v /opt/mysqldata/conf:/etc/mysql/conf.d -v /opt/docker/mysqldata/logs:/logs -v /var/lib/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=*** -d -it mysql:8.0

修改埠號

命令說明
mysql-test: 容器名
/etc/mysql/my.cnf:容器中 my.cnf路徑
/root:my.cnf在宿主機保存路徑

docker cp mysql-test:/etc/mysql/my.cnf /opt/mysql
粘回去
docker cp /opt/mysql/my.cnf mysql:/etc/mysql/ 

docker exec -it mysql /bin/bash

意思為

#--restart=always    當docker重啟時,容器也重啟
# 容器終止運行後自動刪除容器文件
# --rm
# 主機埠映射到容器埠
#-p 3306:3306 
# 給容器起別名(非常重要,項目中的資料庫地址需要和別名一致)
#--name mysql1 
# 把主機的配置文件映射到容器的配置文件
#-v /opt/docker/mysqldata/conf:/etc/mysql/conf.d 
# 把主機的日誌映射到容器的日誌
#-v /opt/docker/mysqldata/logs:/logs 
# 把主機的數據映射到容器(每次重啟容器不用擔心數據被清空了)
#-v /var/lib/mysql:/var/lib/mysql 
# 資料庫密碼
#-e MYSQL_ROOT_PASSWORD=root 
# 後台啟動

6.創建blog的鏡像

docker run -itd --name blog1 -p 8888:8888 --link mysql1:blog blog

意思是

# 容器終止運行後自動刪除容器文件
#--rm
# 後台啟動
#-itd 
# 主機埠映射到容器埠
#-p 8888:8888 
# 為容器起別名
#--name blog1
# 連接提供mysql服務的容器,冒號後面是別名,別名應該和程式碼中的資料庫地址一致(這點真的很重要)
#--link mysql1:blog
# 由哪個鏡像生成的
#blog

7.就可以訪問了

//121.199.74.249:8888/