目錄
- 前言
- 一、安裝Docker和docker Compose
- 二、準(zhǔn)備工作
- 1. 新建工作目錄
- 2. 工作目錄結(jié)構(gòu)
- 3. 后臺打包
- 4. 前臺打包
- 5. 數(shù)據(jù)庫文件上傳
- 6. 編寫Dockerfile
- 7. 編寫 docker-compose.yml 文件
- 8. 構(gòu)建并啟動
- 補充:YAML文件格式及編寫注意事項
- 總結(jié)
前言
前面的博客介紹了使用 Docker 部署前后端分離項目:使用Docker部署前后端分離項目
接下來介紹如何使用 Docker Compose部署前后端分離項目,依舊以若依項目為例。
一、安裝Docker和docker Compose
(1)Docker安裝
[root@zy-host /]# yum install -y yum-utils device-mapper-persistent-data lvm2 [root@zy-host /]# yum install docker-ce docker-ce-cli containerd.io
(2)Docker Compose安裝
[root@zy-host home]# curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose [root@zy-host home]# chmod +x /usr/local/bin/docker-compose
(3)查看版本信息
[root@zy-host home]# docker --version Docker version 20.10.22, build 3a2c30b [root@zy-host home]# docker-compose --version docker-compose version 1.25.1, build a82fef07
二、準(zhǔn)備工作
這里可以參考若依官方文檔:集成docker實現(xiàn)一鍵部署| RuoYi
1. 新建工作目錄
在 /home 目錄下新建目錄 ruoyi2,作為工作目錄。
[root@zy-host home]# mkdir ruoyi2
2. 工作目錄結(jié)構(gòu)
- 其中db目錄存放ruoyi數(shù)據(jù)庫腳本
- 其中jar目錄存放打包好的jar應(yīng)用文件
- 其中conf目錄存放redis.conf和nginx.conf配置
- 其中html\dist目錄存放打包好的靜態(tài)頁面文件
- 數(shù)據(jù)庫mysql地址需要修改成ruoyi-mysql
- 緩存redis地址需要修改成ruoyi-redis
- 數(shù)據(jù)庫腳本頭部需要添加SET NAMES 'utf8';(防止亂碼)
[root@zy-host ruoyi2]# tree ./ ./ ├── conf │ ├── nginx.conf │ └── redis.conf ├── db ├── docker-compose.yml ├── html │ └── dist ├── jar ├── mysql-dockerfile ├── nginx-dockerfile ├── redis-dockerfile └── ruoyi-dockerfile
nginx.conf文件內(nèi)容:
[root@zy-host conf]# cat nginx.conf worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; location / { root /home/ruoyi/projects/ruoyi-ui; try_files $uri $uri/ /index.html; index index.html index.htm; } location /prod-api/{ proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://ruoyi-server:8080/; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
redis.conf文件內(nèi)容:
# requirepass 123456
3. 后臺打包
修改后臺配置文件,修改MySQL地址為和Redis地址為 云服務(wù)器IP
package 打包,將打好的jar包上傳至工作目錄下的 jar 目錄中:
4. 前臺打包
前臺打 dist 包,上傳至工作目錄的 html 目錄下:
# 構(gòu)建生產(chǎn)環(huán)境 npm run build:prod
5. 數(shù)據(jù)庫文件上傳
在sql文件頭部添加:SET NAMES 'utf8'; 防止亂碼,然后將sql文件上傳至工作目錄的 db 目錄下:
6. 編寫Dockerfile
(1)mysql-dockerfile
mysql-dockerfile 文件內(nèi)容如下:
# 基礎(chǔ)鏡像 FROM mysql:5.7 # author MAINTAINER ruoyi # 執(zhí)行sql腳本 ADD ./db/*.sql /docker-entrypoint-initdb.d/
(2)nginx-dockerfile
nginx-dockerfile 文件內(nèi)容如下:
在容器內(nèi)創(chuàng)建 /home/ruoyi/projects/ruoyi-ui目錄,并將該目錄與宿主機掛載。
# 基礎(chǔ)鏡像 FROM nginx # author MAINTAINER ruoyi # 掛載目錄 VOLUME /home/ruoyi/projects/ruoyi-ui # 創(chuàng)建目錄 RUN mkdir -p /home/ruoyi/projects/ruoyi-ui # 指定路徑 WORKDIR /home/ruoyi/projects/ruoyi-ui # 復(fù)制conf文件到路徑 COPY ./conf/nginx.conf /etc/nginx/nginx.conf # 復(fù)制html文件到路徑 COPY ./html/dist /home/ruoyi/projects/ruoyi-ui
(3)redis-dockerfile
redis-dockerfile文件內(nèi)容如下:
# 基礎(chǔ)鏡像 FROM redis # author MAINTAINER ruoyi # 掛載目錄 VOLUME /home/ruoyi/redis # 創(chuàng)建目錄 RUN mkdir -p /home/ruoyi/redis # 指定路徑 WORKDIR /home/ruoyi/redis # 復(fù)制conf文件到路徑 COPY ./conf/redis.conf /home/ruoyi/redis/redis.conf
(4)ruoyi-dockerfile
ruoyi-dockerfile文件內(nèi)容如下:
# 基礎(chǔ)鏡像 FROM java:8 # author MAINTAINER ruoyi # 掛載目錄 VOLUME /home/ruoyi # 創(chuàng)建目錄 RUN mkdir -p /home/ruoyi # 指定路徑 WORKDIR /home/ruoyi # 復(fù)制jar文件到路徑 COPY ./jar/*.jar /home/ruoyi/ruoyi.jar # 啟動應(yīng)用 ENTRYPOINT ["java","-jar","ruoyi.jar"]
7. 編寫 docker-compose.yml 文件
docker-compose.yml 文件內(nèi)容如下:
version : '3' services: ruoyi-mysql: container_name: ruoyi-mysql image: mysql:5.7 build: context: . dockerfile: mysql-dockerfile ports: - "3306:3306" volumes: - ./mysql/conf:/etc/mysql/conf.d - ./mysql/logs:/logs - ./mysql/data:/var/lib/mysql command: [ 'mysqld', '--innodb-buffer-pool-size=80M', '--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci', '--default-time-zone=+8:00', '--lower-case-table-names=1' ] environment: MYSQL_DATABASE: 'ry-vue' MYSQL_ROOT_PASSWORD: zhangyin #數(shù)據(jù)庫root用戶密碼 ruoyi-redis: container_name: ruoyi-redis image: redis build: context: . dockerfile: redis-dockerfile ports: - "6379:6379" volumes: - ./conf/redis.conf:/home/ruoyi/redis/redis.conf - ./redis/data:/data command: redis-server /home/ruoyi/redis/redis.conf ruoyi-nginx: container_name: ruoyi-nginx image: nginx build: context: . dockerfile: nginx-dockerfile ports: - "80:80" volumes: - ./html/dist:/home/ruoyi/projects/ruoyi-ui - ./conf/nginx.conf:/etc/nginx/nginx.conf - ./nginx/logs:/var/log/nginx - ./nginx/conf.d:/etc/nginx/conf.d depends_on: - ruoyi-server links: - ruoyi-server ruoyi-server: container_name: ruoyi-server build: context: . dockerfile: ruoyi-dockerfile ports: - "8080:8080" volumes: - ./ruoyi/logs:/home/ruoyi/logs - ./ruoyi/uploadPath:/home/ruoyi/uploadPath depends_on: - ruoyi-mysql - ruoyi-redis links: - ruoyi-mysql - ruoyi-redis
8. 構(gòu)建并啟動
(1)構(gòu)建docker服務(wù)
[root@zy-host ruoyi2]# docker-compose build
(2)啟動docker容器
[root@zy-host ruoyi2]# docker-compose up -d
(3)查看容器
[root@zy-host ruoyi2]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c61cd8b2b476 nginx "/docker-entrypoint.…" 47 seconds ago Up 45 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp ruoyi-nginx c39f8deda702 ruoyi2_ruoyi-server "java -jar ruoyi.jar" 48 seconds ago Up 46 seconds 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp ruoyi-server 3d5daf878fbb redis "docker-entrypoint.s…" 49 seconds ago Up 48 seconds 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp ruoyi-redis 58568121a480 mysql:5.7 "docker-entrypoint.s…" 49 seconds ago Up 48 seconds 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp ruoyi-mysql
(4)瀏覽器訪問測試
可以正常顯示頁面,表名環(huán)境搭建成功。
補充:YAML文件格式及編寫注意事項
注:docker-compose使用yaml文件對容器進行描述
YAML是一種標(biāo)記語言很直觀的數(shù)據(jù)序列化格式,可讀性高。類似于XML數(shù)據(jù)描述語言,語法比XML簡單的很多。
YAML數(shù)據(jù)結(jié)構(gòu)通過縮進來表示,連續(xù)的項目通過減號來表示,鍵值對用冒號分隔,數(shù)組用中括號括起來,hash用花括號括起來。
YAML文件格式注意事項:
1.不支持制表符tab鍵縮進,需要使用空格縮進
2.通常開頭縮進2個空格
3.字符后縮進1個空格,如冒號、逗號、橫桿
4.用井號注釋
5.如果包含特殊字符用單引號引起來
6.布爾值(true、false、yes、no、on、off)必須用引號括起來,這樣分 析器會將他們解釋為字符串。