docker-compose部署Java應(yīng)用和相關(guān)依賴(lài)方式
docker-compose部署Java應(yīng)用和相關(guān)依賴(lài)
上次用了docker遠(yuǎn)程部署之后,發(fā)現(xiàn)還是有點(diǎn)不方便的地方。2357上傳了鏡像之后,不會(huì)自動(dòng)啟動(dòng)成容器,而且許多啟動(dòng)時(shí)的命令還要重新打。
換臺(tái)機(jī)器還要從偷裝mysql和minio等等。網(wǎng)上看到能通過(guò)docker-compose進(jìn)行一鍵部署。
docker-compose部署分為以下幾步:
- 下載docker-compose
- 編寫(xiě)build鏡像相關(guān)的dockerfile
- 編寫(xiě)docker-compose啟動(dòng)的yml文件
以本Java應(yīng)用為例,dockerfile已經(jīng)本地通過(guò)IDEA的docker-maven-plugin插件打好了,可以忽略第二步。直接進(jìn)行1、3。
1. 下載docker-compose
curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
修改權(quán)限為可執(zhí)行的
chmod +x /usr/local/bin/docker-compose
查看是否安裝成功
docker-compose --version
3. 編寫(xiě)docker-compose啟動(dòng)的yml文件
本地IDEA中編寫(xiě)docker-compose.yml,用于啟動(dòng)web應(yīng)用啟動(dòng)所需要的依賴(lài):
version: '3' services: # 指定服務(wù)名稱(chēng) mysql: # 指定服務(wù)使用的鏡像 image: mysql:5.7 # 指定容器名稱(chēng) container_name: mysql restart: always command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci # 指定服務(wù)運(yùn)行的端口 ports: - 3306:3306 # 指定容器中需要掛載的文件 volumes: - /mydata/mysql/data/db:/var/lib/mysql #數(shù)據(jù)文件掛載 - /mydata/mysql/data/conf:/etc/mysql/conf.d #配置文件掛載 - /mydata/mysql/log:/var/log/mysql #日志文件掛載 # 指定容器的環(huán)境變量 environment: - MYSQL_ROOT_PASSWORD=root # 指定服務(wù)名稱(chēng) minio: # 指定服務(wù)使用的鏡像 image: minio/minio # 指定容器名稱(chēng) container_name: minio restart: always # 指定服務(wù)運(yùn)行的端口 ports: - 9000:9000 # api 端口 - 9090:9090 # 控制臺(tái)端口 # 指定容器中需要掛載的文件 volumes: - /mydata/minio/data:/data #映射當(dāng)前目錄下的data目錄至容器內(nèi)/data目錄 - /mydata/minio/config:/root/.minio/ #映射配置目錄 - /etc/localtime:/etc/localtime # 指定容器的環(huán)境變量 environment: MINIO_ACCESS_KEY: minioadmin #管理后臺(tái)用戶(hù)名 MINIO_SECRET_KEY: minioadmin #管理后臺(tái)密碼,最小8個(gè)字符 command: server -console-address ":9000" --address ":9090" /data #指定容器中的目錄 /data nginx: image: nginx:1.10 restart: always container_name: nginx volumes: - /mydata/nginx/nginx.conf:/etc/nginx/nginx.conf #配置文件掛載 - /mydata/nginx/html:/usr/share/nginx/html #靜態(tài)資源根目錄掛載 - /mydata/nginx/log:/var/log/nginx #日志文件掛載 - #若用到ssl,可以引入 - /mydata/nginx/ssl:/etc/nginx/ssl ports: - 80:80 - 443:443
啟動(dòng)Java應(yīng)用的yml:
version: '3' services: # 指定服務(wù)名稱(chēng) mall-tiny-docker-compose: # 指定服務(wù)使用的鏡像 image: mall-tiny/mall-tiny:1.0.0-SNAPSHOT # 指定容器名稱(chēng) container_name: mall depends_on: - minio - mysql # 指定服務(wù)運(yùn)行的端口 ports: - 8080:8080 # 指定容器中需要掛載的文件 volumes: - /etc/localtime:/etc/localtime - /mydata/app/mall-tiny-docker-compose/logs:/var/logs external_links: - minio:minio #可以用redis這個(gè)域名訪問(wèn)redis服務(wù) - mysql:mysql #可以用mongo這個(gè)域名訪問(wèn)mongo服務(wù)
之所以分開(kāi)寫(xiě)是因?yàn)椋瑔?dòng)完mysql還要手動(dòng)輸入sql文件生成數(shù)據(jù)庫(kù),再去跑web應(yīng)用的Java應(yīng)用的ym,不然會(huì)起不來(lái),報(bào)數(shù)據(jù)庫(kù)表找不到的error。
先啟動(dòng)依賴(lài):
docker-compose -f docker-compose.yml up -d
然后本地連上mysql導(dǎo)入相關(guān)的數(shù)據(jù)表后,啟動(dòng)web:
docker-compose -f docker-compose-app.yml up -d
此時(shí)均已按相關(guān)參數(shù)啟動(dòng),可通過(guò)docker ps查看,也可能調(diào)服務(wù)驗(yàn)證。
另外有幾個(gè)命令參考:
#停止所有相關(guān)容器 docker-compose stop #列出所有容器信息 docker-compose ps
后續(xù)要想辦法把數(shù)據(jù)庫(kù)初始化也干了,絕對(duì)有方法的,不然一堆集群的話要怎么搞呢??吹揭环N方法是加啟動(dòng)指令,在但是也要再掛載的目錄里把sql提前復(fù)制過(guò)去。
這也不是一種很好的方法。也有是直接寫(xiě)腳本,把要打的sql都先放腳本里,到時(shí)候一鍵啟動(dòng)腳本創(chuàng)建目錄和sql,再自動(dòng)運(yùn)行docker-compose的yml。
這確實(shí)是一種方法,后面機(jī)器多了可以試試。
command: --init-file /docker-entrypoint-initdb.d/init.sql
4. 停止docker-compose啟動(dòng)程序
- docker-compose stop:這個(gè)命令只會(huì)停止docker-compose運(yùn)行的容器,不會(huì)刪除容器。
- docker-compose down:推薦,在停止docker-compose運(yùn)行容器的同時(shí),刪除容器
不過(guò)鏡像還是都在的,想要?jiǎng)h除鏡像只能通過(guò)docker image rm的方式
2022.11.19更新
看到一種創(chuàng)建數(shù)據(jù)庫(kù)容器的時(shí)候,也把sql初始化的方法。當(dāng)Mysql容器首次啟動(dòng)時(shí),會(huì)在 /docker-entrypoint-initdb.d目錄下掃描 .sh,.sql,.sql.gz類(lèi)型的文件。
如果這些類(lèi)型的文件存在,將執(zhí)行它們來(lái)初始化一個(gè)數(shù)據(jù)庫(kù)。這些文件會(huì)按照字母的順序執(zhí)行。
那么,數(shù)據(jù)庫(kù)的docker-compose的部分就能寫(xiě)成這樣:
mysql: image: mysql:8.0.30 restart: always container_name: mysql volumes: - ../volumes/data/mysqldata:/var/lib/mysql - ./config/my.cnf:/etc/mysql/conf.d/my.cnf # 數(shù)據(jù)庫(kù)還原目錄 可將需要還原的sql文件放在這里 - ./init/mysql:/docker-entrypoint-initdb.d environment: - "MYSQL_ROOT_PASSWORD=lilishop" - "MYSQL_DATABASE=lilishop" - "TZ=Asia/Shanghai" ports: - 3306:3306
初始化就是這句:
- ./init/mysql:/docker-entrypoint-initdb.d
上傳服務(wù)器的時(shí)候,把整個(gè)文件夾傳上去,結(jié)構(gòu)類(lèi)似這種:
在當(dāng)前文件夾運(yùn)行docker-compose啟動(dòng)指令,即可創(chuàng)建數(shù)據(jù)庫(kù)容器的時(shí)候,初始化數(shù)據(jù)庫(kù)。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Docker-Compose創(chuàng)建mysql容器詳解
這篇文章主要介紹了Docker-Compose創(chuàng)建mysql容器詳解的相關(guān)資料,需要的朋友可以參考下2022-11-11docker容器中crontab無(wú)法正常運(yùn)行解決方案
相信很多人看完docker容器, 需要加crontab, 加完卻發(fā)現(xiàn)不能執(zhí)行,什么原因造成的呢?下面小編給大家分享docker容器中crontab無(wú)法正常運(yùn)行的解決方案,需要的朋友參考下吧2017-01-01使用docker-compose搭建mysql主從詳細(xì)過(guò)程
這篇文章主要給大家介紹了關(guān)于使用docker-compose搭建mysql主從的相關(guān)資料,Docker-Compose項(xiàng)目是Docker官方的開(kāi)源項(xiàng)目,負(fù)責(zé)實(shí)現(xiàn)對(duì)Docker容器集群的快速編排,需要的朋友可以參考下2024-01-01vscode中啟用docker擴(kuò)展顯示無(wú)權(quán)限的問(wèn)題解決
這篇文章主要介紹了如何解決vscode中啟用docker擴(kuò)展顯示無(wú)權(quán)限的問(wèn)題,并介紹允許VSCode進(jìn)入Docker內(nèi)部進(jìn)行調(diào)試的插件,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-03-03docker配置openGauss數(shù)據(jù)庫(kù)的方法詳解
這篇文章主要介紹了docker配置openGauss數(shù)據(jù)庫(kù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03Docker不能綁定靜態(tài)的外網(wǎng)固定ip的問(wèn)題及解決辦法
這篇文章主要介紹了Docker不能綁定靜態(tài)的外網(wǎng)固定ip的問(wèn)題及解決辦法,需要的朋友可以參考下2017-01-01關(guān)于Dockerfile鏡像制作完整實(shí)例
本文詳細(xì)介紹了如何使用Docker制作鏡像,并通過(guò)實(shí)際應(yīng)用發(fā)版展示了制作過(guò)程,主要內(nèi)容包括創(chuàng)建和啟動(dòng)Docker容器的腳本(init.sh、start.sh、stop.sh、restart.sh),以及配置目錄,文章還討論了Docker容器IP地址的作用,并總結(jié)了制作新鏡像的基本步驟2024-11-11docker使用registry搭建本地鏡像倉(cāng)庫(kù)實(shí)例詳解
這篇文章主要介紹了docker使用registry搭建本地鏡像倉(cāng)庫(kù)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09