首先,我們將看看在容器中運行數(shù)據(jù)庫,以及我們?nèi)绾问褂镁砗途W(wǎng)絡(luò)來持久化我們的數(shù)據(jù)并允許我們的應(yīng)用程序與數(shù)據(jù)庫對話。然后我們將把所有東西放在一個 Compose 文件中,它允許我們用一個命令設(shè)置和運行本地開發(fā)環(huán)境。最后,我們將看看將調(diào)試器連接到我們在容器內(nèi)運行的應(yīng)用程序。

無需下載 MySQL、安裝、配置,然后將 MySQL 數(shù)據(jù)庫作為服務(wù)運行,我們可以使用 MySQL 的 Docker 官方鏡像并在容器中運行它。
在容器中運行 MySQL 之前,我們將創(chuàng)建幾個卷,Docker 可以管理這些卷來存儲我們的持久數(shù)據(jù)和配置。讓我們使用 Docker 提供的托管卷功能,而不是使用綁定掛載。您可以在我們的文檔中閱讀有關(guān)使用卷的所有信息。
現(xiàn)在讓我們創(chuàng)建我們的卷。我們將為數(shù)據(jù)創(chuàng)建一個,為 MySQL 的配置創(chuàng)建一個。
$ docker volume create mysql_data
$ docker volume create mysql_config
現(xiàn)在我們將創(chuàng)建一個網(wǎng)絡(luò),我們的應(yīng)用程序和數(shù)據(jù)庫將使用該網(wǎng)絡(luò)相互通信。該網(wǎng)絡(luò)稱為用戶定義的橋接網(wǎng)絡(luò),它為我們提供了一個很好的 DNS 查找服務(wù),我們可以在創(chuàng)建連接字符串時使用它。
$ docker network create mysqlnet
現(xiàn)在,讓我們在容器中運行 MySQL 并附加到我們上面創(chuàng)建的卷和網(wǎng)絡(luò)。Docker 從 Hub 拉取鏡像并在本地運行。
$ docker run -it --rm -d -v mysql_data:/var/lib/mysql \\
-v mysql_config:/etc/mysql/conf.d \\
--network mysqlnet \\
--name mysqlserver \\
-e MYSQL_USER=petclinic -e MYSQL_PASSWORD=petclinic \\
-e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=petclinic \\
-p 3306:3306 mysql:8.0.23
好的,現(xiàn)在我們有一個正在運行的 MySQL,讓我們更新我們的 Dockerfile 以激活應(yīng)用程序中定義的 MySQL Spring 配置文件,并從內(nèi)存中的 H2 數(shù)據(jù)庫切換到我們剛剛創(chuàng)建的 MySQL 服務(wù)器。
我們只需要添加 MySQL 配置文件作為CMD定義的參數(shù)。
CMD [./mvnw, spring-boot:run, -Dspring-boot.run.profiles=mysql]
讓我們建立我們的形象
$ docker build --tag java-docker .
現(xiàn)在,讓我們運行我們的容器。這一次,我們需要設(shè)置MYSQL_URL環(huán)境變量,以便我們的應(yīng)用程序知道使用什么連接字符串來訪問數(shù)據(jù)庫。我們將使用該docker run命令執(zhí)行此操作。
$ docker run --rm -d \\
--name springboot-server \\
--network mysqlnet \\
-e MYSQL_URL=jdbc:mysql://mysqlserver/petclinic \\
-p 8080:8080 java-docker
讓我們測試一下我們的應(yīng)用程序是否已連接到數(shù)據(jù)庫并能夠列出 Veterinarians。
$ curl --request GET \\
--url http://localhost:8080/vets \\
--header \'content-type: application/json\'
您應(yīng)該會從我們的服務(wù)中收到以下 json。
{vetList:[{id:1,firstName:James,lastName:Carter,specialties:[],nrOfSpecialties:0,new:false},{id:2,firstName:Helen,lastName:Leary,specialties:[{id:1,name:radiology,new:false}],nrOfSpecialties:1,new:false},{id:3,firstName:Linda,lastName:Douglas,specialties:[{id:3,name:dentistry,new:false},{id:2,name:surgery,new:false}],nrOfSpecialties:2,new:false},{id:4,firstName:Rafael,lastName:Ortega,specialties:[{id:2,name:surgery,new:false}],nrOfSpecialties:1,new:false},{id:5,firstName:Henry,lastName:Stevens,specialties:[{id:1,name:radiology,new:false}],nrOfSpecialties:1,new:false},{id:6,firstName:Sharon,lastName:Jenkins,specialties:[],nrOfSpecialties:0,new:false}]}
網(wǎng)站名稱:云計算核心技術(shù)Docker教程:Java鏡像在容器中運行數(shù)據(jù)庫
分享鏈接:http://www.chinadenli.net/article44/cggche.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、網(wǎng)頁設(shè)計公司、外貿(mào)建站、網(wǎng)站營銷、Google、App開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)