一帮匾、背景
在本地虛擬機中部署的項目DOCKER 分步部署VUE3_Django_Celery項目 - 簡書 (jianshu.com)
几莽,要遷移到服務器生產(chǎn)環(huán)境中理逊。
目標是棚唆,項目遷移后旱函,訪問項目主頁资厉,可以正常運轉所有功能王污。
二罢吃、方法
網(wǎng)絡上搜索,比較多的遷移方式介紹基本同這片文章:介紹Docker容器遷移到其他服務器的5種方法 | 《Linux就該這么學》 (linuxprobe.com)昭齐。此處尿招,以本地虛擬機中的項目遷移到本地WSL子系統(tǒng)進行模擬。
結合自己的項目,因為涉及到①數(shù)據(jù)卷文件目錄變化泊业,②容器服務端口變化把沼,故不適用直接遷移容器的方式,而采用分別遷移鏡像與數(shù)據(jù)卷吁伺,然后重新運行容器掛載數(shù)據(jù)卷的方式饮睬。
三、步驟
1.遷移數(shù)據(jù)卷
a.打包數(shù)據(jù)卷
Docker 容器中的數(shù)據(jù)卷篮奄,存放在虛擬機文件夾下捆愁。因為我一開始就在一個文件夾下,建立目錄樹窟却,把前端網(wǎng)頁文件昼丑、后端數(shù)據(jù)庫放到其中了,因此直接壓縮這個根目錄就可以了夸赫。
cd /home/haben #切換到文件夾所在目錄
chmod -R 777 mtms #給與文件夾及子文件讀寫權限
zip -r mtms.zip mtms #遞歸壓縮整個文件夾
b.數(shù)據(jù)卷遷移到WSL系統(tǒng)
使用xftp復制壓縮文件到wsl系統(tǒng)菩帝。首先把數(shù)據(jù)卷壓縮文件從虛擬機拷貝到WINDOWS,再從WINDOWS拷貝到WSL茬腿。XFTP操作請自行搜索呼奢。
c.解壓縮數(shù)據(jù)卷
進入wsl,解壓縮文件到想存放項目數(shù)據(jù)卷的文件夾下切平。
unzip archive_name.zip -d /home/haben
2.遷移鏡像
a.保存鏡像
依次保存項目用到的鏡像到文件夾下握础。
cd /directory #控制臺進入文件夾下,后續(xù)保存的鏡像都會存放到此文件夾下
docker save nginx > nginx.tar
docker save django_celery > django_celery.tar
docker save truck_info > truck_info.tar
docker save redis > redis.tar
docker save pgrouting/pgrouting > pgrouting.tar
docker save rabbitmq > rabbitmq.tar
docker save nats > nats.tar
b.遷移鏡像文件
使用xftp復制鏡像壓縮文件到wsl系統(tǒng)悴品。同上面數(shù)據(jù)卷的操作方式禀综。
c.加載鏡像
WSL下已經(jīng)預先安裝好了docker,使用load命令裝載鏡像
cat nginx.tar | docker load
cat django_celery.tar | docker load
cat truck_info.tar | docker load
cat redis.tar | docker load
cat pgrouting.tar | docker load
cat rabbitmq.tar | docker load
cat nats.tar | docker load
3.運行容器
此處運行容器的方式跟之前分步驟部署幾乎一樣苔严,只要注意替換①網(wǎng)絡名稱定枷、②數(shù)據(jù)卷地址即可
- 設置容器網(wǎng)絡
$ docker network create -d bridge my-net
- 運行前端容器,并掛載數(shù)據(jù)卷,
這里端口我設置了8081届氢,避免主機其他服務端口占用
docker run -itd --name frontend \
--restart always --network my-net -p 8081:80 \
-v /home/haben/mtms/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /home/haben/mtms/nginx/dist:/usr/share/nginx/html \
nginx
- 運行后端服務
docker run -d -p 8000:8000 --name backend --network my-net --restart unless-stopped django_celery
- 運行數(shù)據(jù)庫欠窒,并掛載數(shù)據(jù)卷
docker run --name postgis --restart always -e POSTGRES_PASSWORD='password' \
-v /home/haben/mtms/postgis:/var/lib/postgresql/data --privileged=true -p 5433:5432 -d \
--network my-net pgrouting/pgrouting
- 運行中間件
####運行redis
docker pull redis #拉取鏡像
docker run --name redis -p 6379:6379 \
--network my-net \
--restart unless-stopped \
-v /home/haben/mtms/redis/data:/data \
-v /home/haben/mtms/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis:latest \
####運行nats
docker run --name nats -run -p 4222:4222 \
-ti --name nats --restart unless-stopped --network my-net nats:latest #啟動容器
####運行rabbitmq
docker run -itd --restart always --name rabbitmq \
--network my-net -p 5672:5672 -p 15672:15672 rabbitmq:3.13-man
rabbitmq運行容器后,需要進入容器設置賬戶悼沈。
- 運行車端程序
docker run -itd --name truck --network my-net --restart unless-stopped truck_info
4.訪問項目
以上容器全部運行完成贱迟,查看容器列表姐扮。
本地windows訪問項目網(wǎng)頁
可通過localhost,也可以通過wsl地址訪問網(wǎng)頁
wsl地址訪問:172.30.63.31:8081 ( 在wsl中通過ifconfig絮供,可查看eth0的ip地址)
本地地址訪問:127.0.0.1:8081
局域網(wǎng)內(nèi)機器訪問
使用 WSL 訪問網(wǎng)絡應用程序 | Microsoft Learn
四、備注
在遷移時茶敏,遇到一個問題壤靶,啟動nginx容器后,嘗試訪問網(wǎng)頁一直不通惊搏,docker logs frontend查看日志贮乳,發(fā)現(xiàn)是找不到后端服務忧换。
原因是nginx.conf配置文件中,配置了接口代理向拆,指向了backend的容器亚茬。再接著啟動backend容器后,問題解決浓恳。