目標是:將本地運行的spring項目,部署到服務器上
為什么使用docker?
- 環境隔離 服務器上,各種環境交雜,使用docker,能清楚的把各個項目進行隔離,不單維護的人員方便,也會省去很多維護這些項目交雜的時間。
- 真的是太輕量 每個docker是構建於一層一層的結構之上的,變化的只是這一層一層的變化的部分,docker的大小也非常之小
- 下載方便,想要獲得一個鏡像,只要pull一下就好了,和git的使用差不多哦
部署前提:
mysql文件,mysql關聯文件,war包,傳到服務器上,我傳入的地址為/var/supplychain/ 別問我為什么要傳到這里,我領導讓的。
我的部署流程
docker mysql部署
- 建立docker 數據庫:
docker run -di --name scf_mysql -p 33306:3306 \
-v /var/supplychain/image:/var/supplychain/image -e MYSQL_ROOT_PASSWORD=123456 mysql \
--lower_case_table_names=1 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
參數說明:
-d
后台執行
-i
開控制台交互
--name
為這個開啟的容器,命名
-p
進行端口映射,將宿主機的33306端口映射到容器的3306
-v
掛載宿主機/var/supplychain/image/這個目錄到容器的/var/supplychain/image/目錄
-e
指定容器的環境變量,這里是指定的mysql容器中mysql的密碼為123456
--lower_case_table_names=1
忽略數據表名的大小寫,這是個深坑哦,踩了2天
--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
設置中文編碼格式為utf8
- 刷入表數據
docker cp /var/supplychain/j.sql 容器ID:/ #將j.sql拷貝到容器的根目錄下
docker exec -it scf_mysql /bin/bash/ #進入容器的交互環境
mysql -uroot -p #進入mysql
create database julonglian;
use julonglian;
source /j.sql
- 對表用戶進行授權
對於mysql5來說:
grant all privileges on julonglian.* to 'why'@'%' identified by '123456';
flush privileges;
對於mysql8來說:
創建賬戶:create user 'why'@'%' identified by '123456';
賦予權限:grant all on *.* to 'why'@'%' with grant option;(修改權限時在后面加with grant option)
flush privileges;
docker tomcat部署
docker run -d -p 7608:8080 --name supplychain -v /var/supplychain/image:/var/supplychain/image -v /var/supplychain/server.xml:/usr/local/tomcat/conf/server.xml tomcat
-
為解決的事是:不知道為什么server.xml 掛載不上去,只要掛載這個,就啟動不了,看來只能拷貝了
為什么要改這個呢?有時候,需要項目的上下文根路徑修改為/,所以就需要動這個配置文件
tomcat8是在這個文件中,加入
server.xml : -
修改上下文根路徑
拷貝過去:
sudo docker cp /var/supplychain/server.xml 容器ID:/usr/local/tomcat/conf/server.xml 不同版本可能server.xml放的位置不一樣,具體去容器里面看看
進入容器
cd webapps/ROOT/
rm -rf *
cd ..
mv 項目war包和解壓的文件 ROOT/
代碼中需要變動的地方
- 數據庫url地址修改為docker內網ip地址訪問地址,比如:使用docker inspect mysql的docker內網ip,進行查看其ip
- 數據庫驅動的版本要對應上,比如:本地跑的時候使用的是mysql5,驅動啊,url等要進行變更。
- mybatis的一些數據庫url配置也需要相應修改(我這里沒有)
參考
Docker實現運行tomcat並部署項目war包,並實現掛載目錄
Docker部署MySql應用
docker中mysql數據庫的數據導入和導出
linux命令行打包、壓縮及解壓縮
通過容器提交鏡像(docker commit)以及推送鏡像(docker push)
進一步的呢:如果本地直接打包成一個鏡像push到庫中,在遠程pull下來就又會快很多,這就又是另一篇文章了