docker項目部署的教程(Vue+Spingboot)
1.docker安裝(Ubuntu)
卸載原有的docker引擎和舊版本軟件包(第一次使用跳過)
# 卸載 Docker Engine、CLI、containerd 和 Docker Compose 軟件包: sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras # 主機上的映像、容器、卷或自定義配置文件 不會自動刪除。要刪除所有鏡像、容器和卷,請執(zhí)行以下操作: sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd # 刪除源列表和密鑰環(huán) sudo rm /etc/apt/sources.list.d/docker.list sudo rm /etc/apt/keyrings/docker.asc # 卸載舊版本 for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
使用存儲庫安裝apt
#1.設(shè)置 Docker 的存儲庫(一行一行執(zhí)行) sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update # 2.安裝 Docker 軟件包 sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin # 3.啟動docker systemctl start docker # 4.查看是否運行,該命令為查看鏡像 docker images
2.安裝nginx并運行
# 拉取nginx鏡像 docker pull nginx # 創(chuàng)建nginx容器并且運行, # -p 做宿主機與容器端口的映射 # -v 做數(shù)據(jù)掛載 # 注意(-v)后面(:)前面的html目錄和nginx.conf文件需要自己創(chuàng)建 # (:)后面是固定的docker nginx容器目錄 docker run -d\ --name nginxR\ -p 18080:18080\ -p 18081:18081\ -v /root/nginx/html:/usr/share/nginx/html\ -v /root/nginx/nginx.conf:/etc/nginx/nginx.conf\ nginx
注:
nginx.conf配置文件指定的前端目錄所在位置要與容器內(nèi)的位置相對于,不要直接寫相對于宿主機的位置,否則服務(wù)器訪問不到
3.安裝Mysql
# 拉取mysql鏡像 docker pull mysql # 創(chuàng)建mysql容器并且運行,這里同樣也要做數(shù)據(jù)掛載 # -v 做數(shù)據(jù)目錄、初始化腳本(自己在該目錄放置sql)、和配置文件(字符格式等配置)的掛載, # 同樣也要自己創(chuàng)建文件目錄 docker run -d\ --name mysql1.0\ -p 3306:3306\ -e TZ=Asia/Shanghai\ -e MYSQL_ROOT_PASSWORD=root1234\ -v /root/mysql/data:/var/lib/mysql\ -v /root/mysql/init:/docker-entrypoint-initdb.d\ -v /root/mysql/conf:/etc/mysql/conf.d\ mysql
之所以做數(shù)據(jù)掛載就是防止容器出現(xiàn)問題掛掉,那么數(shù)據(jù)也隨之消失,掛載到宿主機,即使容器掛掉,在創(chuàng)建新容器也能保持原有的數(shù)據(jù)
注意:實際開發(fā)環(huán)境中3306端口不對外暴露,容器內(nèi)自定義網(wǎng)絡(luò)互相訪問
4.構(gòu)建jdk鏡像
準備條件(3樣?xùn)|西)
- 一份 jdk.tar.gz 包
- 一份自己的 java項目jar 包
- 一份編寫好的 Dockerfile 文件
拉取ubuntu鏡像
docker pull ubuntu:24.04
Dockerfile
# 指定基礎(chǔ)鏡像 FROM ubuntu:24.04 #配置環(huán)境變量指定到容器內(nèi)的目錄(通過通過這個環(huán)境變量來引用/usr/local這個路徑) ENV JAVA_URL=/usr/local # 拷貝jdk到容器內(nèi) COPY ./jdk17.tar.gz $JAVA_URL #拷貝自己的項目的jar包到容器內(nèi) COPY musicservice-0.0.1-SNAPSHOT.jar /app.jar #進入到下載了jdk的目錄把他解壓縮重命名java17 RUN cd $JAVA_URL && tar -zxf ./jdk17.tar.gz #配置jdk環(huán)境變量,何在本地配置環(huán)境變量是一致的 ENV JAVA_HOME=$JAVA_URL/jdk17 #添加到系統(tǒng)搜索路徑 ENV PATH=$PATH:$JAVA_HOME/bin # 入口,java項目的啟動命令 ENTRYPOINT ["java","-jar","/app.jar"]
注意:
16行的jdk17一定要與jdk17.tar.gz解壓出來的文件名一致
不然報錯:
executable file not found in $PATH: unknown.
Dockerfile簡潔版
ubuntu、jdk、jar 三者構(gòu)成springboot基本運行環(huán)境
FROM ubuntu:24.04 COPY jdk17.tar.gz /usr/local COPY my.jar /app.jar RUN cd /usr/local && tar -xf jdk17.tar.gz && rm jdk17.tar.gz && apt-get update && apt-get install -y iputils-ping ENV PATH=/usr/local/jdk-17.0.12/bin:$PATH ENTRYPOINT ["java","-jar","/app.jar"]
這里RUN多加了一個ping工具
構(gòu)建java鏡像
# 構(gòu)建java鏡像 docker build -t javajar . # 注意:末尾的點不要忽略了,javajar是自定義鏡像名
創(chuàng)建并運行java容器
docker run -d --name javajar1.0 -p 8888:8888 javajar
5.網(wǎng)絡(luò)配置
docker容器都是相互隔離的,要將三部分加入同一個網(wǎng)絡(luò),就能互相訪問了
自定義網(wǎng)絡(luò)
docker network create mynet
加入網(wǎng)絡(luò)
docker network connect mynet nginx1.0 docker network connect mynet mysql1.0 docker network connect mynet javajar1.0
ping命令
# 如果需要進入到容器內(nèi)部檢查連通性,就需要ping docker exec -it javajar1.0 bash # docker中是沒有ping命令的,需要自己安裝 apt-get update apt-get install iputils-ping
6.注意事項
由于通過自定義網(wǎng)絡(luò)后就可以通過容器名訪問
我們springboot后端訪問數(shù)據(jù)庫直接用容器名訪問即可
**解決:**
為了解決mysql容器ip發(fā)生變化而訪問不了的問題,javajar是容器名。
nginx代理訪問后端也用容器名訪問即可
示例:
proxy_pass http://javajar:8888
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Docker安裝wordpress并配置數(shù)據(jù)庫超詳細介紹版
安裝WordPress是一項常見的任務(wù),使用Docker可以使這個過程更加簡單和可靠,下面這篇文章主要給大家介紹了關(guān)于Docker安裝wordpress并配置數(shù)據(jù)庫的相關(guān)資料,需要的朋友可以參考下2023-11-11Docker搭建代碼檢測平臺SonarQube并檢測maven項目的流程
這篇文章主要介紹了Docker搭建代碼檢測平臺SonarQube并檢測maven項目,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-05-05cgroup?blkio子系統(tǒng)對容器的讀寫限速詳解
這篇文章主要為大家介紹了cgroup?blkio子系統(tǒng)對容器的讀寫限速詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-08-08Docker?環(huán)境?Nacos2?MySQL8的詳細操作
本文介紹?docker?環(huán)境下安裝并單機運行?Nacos2,使用?docker?環(huán)境下的?MySQL?8?存儲數(shù)據(jù)?,對Docker?環(huán)境?Nacos2?MySQL8相關(guān)知識感興趣的朋友跟隨小編一起看看吧2022-09-09