0基礎(chǔ)學(xué)習(xí)網(wǎng)站開發(fā)網(wǎng)站模板購買
目錄
一、前端項目部署
1、上傳文件
2、開啟容器
3、測試
二、后端項目部署
1、打包java項目
2、將jar包和Dockerfile文件長傳到Linux系統(tǒng)
3、構(gòu)建鏡像
4、開啟容器
?5、測試
三、DockerCompose快速部署
基本語法
一、前端項目部署
1、上傳文件
?里面包括頁面和配置文件
worker_processes 1;events {worker_connections 1024;
}http {include mime.types;default_type application/json;sendfile on;keepalive_timeout 65;server {listen 18080;# 指定前端項目所在的位置location / {root /usr/share/nginx/html/hmall-portal;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}location /api {rewrite /api/(.*) /$1 break;# hhjava應(yīng)用容器名proxy_pass http://hh:8080;}}server {listen 18081;# 指定前端項目所在的位置location / {root /usr/share/nginx/html/hmall-admin;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}location /api {rewrite /api/(.*) /$1 break;proxy_pass http://hh:8080;}}
}
2、開啟容器
?docker run -d \
? --name nginx \? ?#容器名稱
? -p 18080:18080 \? #映射端口
? -p 18081:18081 \
? -v /root/nginx/html:/etc/nginx/html \? #自定義掛載數(shù)據(jù)卷
? -v /root/nginx/nginx.conf:/etc/nginx/nginx.conf \? #掛載配置文件
? --network demo \? #網(wǎng)絡(luò)這里用的自定義網(wǎng)絡(luò)
? nginx #鏡像
3、測試
二、后端項目部署
1、打包java項目
2、將jar包和Dockerfile文件長傳到Linux系統(tǒng)
3、構(gòu)建鏡像
docker build -t test .
?
4、開啟容器
docker run -d --name hh -p 8080:8080 --network demo test
docker run -d 后臺啟動并運(yùn)行?
--name hh 名稱
-p 8080:8080 端口
--network demo 網(wǎng)絡(luò)
test 鏡像
?查看日志,成功運(yùn)行
注意:要確保mysql的ip和程序設(shè)置的ip在一個頻段
mysql的ip:docker inspect mysql
?程序設(shè)置的ip:docker inspect hh
?5、測試
三、DockerCompose快速部署
手動部署項目太麻煩了,而Docker Compose就可以幫助我們實(shí)現(xiàn)多個相互關(guān)聯(lián)的Docker容器的快速部署。它允許用戶通過一個單獨(dú)的 docker-compose.yml 模板文件(YAML 格式)來定義一組相關(guān)聯(lián)的應(yīng)用容器。
docker-compose.yml文件的基本語法可以參考官方文檔:
Compose file version 3 reference | Docker Docs
docker-compose文件中可以定義多個相互關(guān)聯(lián)的應(yīng)用容器,每一個應(yīng)用容器被稱為一個服務(wù)(service)。由于service就是在定義某個應(yīng)用的運(yùn)行時參數(shù),因此與docker run
參數(shù)非常相似。
舉例來說,用docker run部署MySQL的命令如下:
docker run -d \--name mysql \-p 3306:3306 \-e TZ=Asia/Shanghai \-e MYSQL_ROOT_PASSWORD=123 \-v ./mysql/data:/var/lib/mysql \-v ./mysql/conf:/etc/mysql/conf.d \-v ./mysql/init:/docker-entrypoint-initdb.d \--network hmallmysql
如果用docker-compose.yml
文件來定義,就是這樣:
version: "3.8"services:mysql:image: mysqlcontainer_name: mysqlports:- "3306:3306"environment:TZ: Asia/ShanghaiMYSQL_ROOT_PASSWORD: 123volumes:- "./mysql/conf:/etc/mysql/conf.d"- "./mysql/data:/var/lib/mysql"networks:- new
networks:new:name: hmall
?參數(shù)說明:
docker run 參數(shù) | docker compose 指令 | 說明 |
---|---|---|
--name | container_name | 容器名稱 |
-p | ports | 端口映射 |
-e | environment | 環(huán)境變量 |
-v | volumes | 數(shù)據(jù)卷配置 |
--network | networks | 網(wǎng)絡(luò) |
?如圖所示:
編寫好docker-compose.yml文件,就可以部署項目了。常見的命令:
Overview of docker compose CLI | Docker Docs
基本語法
docker compose [OPTIONS] [COMMAND]
類型 | 參數(shù)或指令 | 說明 |
---|---|---|
Options | -f | 指定compose文件的路徑和名稱 |
-p | 指定project名稱。project就是當(dāng)前compose文件中設(shè)置的多個service的集合,是邏輯概念 | |
Commands | up | 創(chuàng)建并啟動所有service容器 |
down | 停止并移除所有容器、網(wǎng)絡(luò) | |
ps | 列出所有啟動的容器 | |
logs | 查看指定容器的日志 | |
stop | 停止容器 | |
start | 啟動容器 | |
restart | 重啟容器 | |
top | 查看運(yùn)行的進(jìn)程 | |
exec | 在指定的運(yùn)行中容器中執(zhí)行命令 |
?docker-compose.yml文件示例:
version: "3.8"services:mysql:image: mysqlcontainer_name: mysqlports:- "3306:3306"environment:TZ: Asia/ShanghaiMYSQL_ROOT_PASSWORD: 123volumes:- "./mysql/conf:/etc/mysql/conf.d"- "./mysql/data:/var/lib/mysql"- "./mysql/init:/docker-entrypoint-initdb.d"networks:- hm-nethmall:build: context: .dockerfile: Dockerfilecontainer_name: hmallports:- "8080:8080"networks:- hm-netdepends_on:- mysqlnginx:image: nginxcontainer_name: nginxports:- "18080:18080"- "18081:18081"volumes:- "./nginx/nginx.conf:/etc/nginx/nginx.conf"- "./nginx/html:/usr/share/nginx/html"depends_on:- hmallnetworks:- hm-net
networks:hm-net:name: hmall
?示例:
# 1.進(jìn)入root目錄
cd /root# 2.刪除舊容器
docker rm -f $(docker ps -qa)# 3.刪除hmall鏡像
docker rmi hmall# 4.清空MySQL數(shù)據(jù)
rm -rf mysql/data# 5.啟動所有, -d 參數(shù)是后臺啟動
docker compose up -d
# 結(jié)果:
[+] Building 15.5s (8/8) FINISHED=> [internal] load build definition from Dockerfile 0.0s=> => transferring dockerfile: 358B 0.0s=> [internal] load .dockerignore 0.0s=> => transferring context: 2B 0.0s=> [internal] load metadata for docker.io/library/openjdk:11.0-jre-buster 15.4s=> [1/3] FROM docker.io/library/openjdk:11.0-jre-buster@sha256:3546a17e6fb4ff4fa681c3 0.0s=> [internal] load build context 0.0s=> => transferring context: 98B 0.0s=> CACHED [2/3] RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 0.0s=> CACHED [3/3] COPY hm-service.jar /app.jar 0.0s=> exporting to image 0.0s=> => exporting layers 0.0s=> => writing image sha256:32eebee16acde22550232f2eb80c69d2ce813ed099640e4cfed2193f71 0.0s=> => naming to docker.io/library/root-hmall 0.0s
[+] Running 4/4? Network hmall Created 0.2s? Container mysql Started 0.5s? Container hmall Started 0.9s? Container nginx Started 1.5s# 6.查看鏡像
docker compose images
# 結(jié)果
CONTAINER REPOSITORY TAG IMAGE ID SIZE
hmall root-hmall latest 32eebee16acd 362MB
mysql mysql latest 3218b38490ce 516MB
nginx nginx latest 605c77e624dd 141MB# 7.查看容器
docker compose ps
# 結(jié)果
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
hmall root-hmall "java -jar /app.jar" hmall 54 seconds ago Up 52 seconds 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp
mysql mysql "docker-entrypoint.s…" mysql 54 seconds ago Up 53 seconds 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp
nginx nginx "/docker-entrypoint.…" nginx 54 seconds ago Up 52 seconds 80/tcp, 0.0.0.0:18080-18081->18080-18081/tcp, :::18080-18081->18080-18081/tcp