Docker应用-项目部署
1. 项目部署-后端
1.1 修改设置
修改yml文件,将mysql设置改为动态获取:
application.yml
- Spring:
- datasource:
- url: jdbc:mysql://${db.host}:3306/hmall?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
- driver-class-name: com.mysql.cj.jdbc.Driver
- username: root
- password: ${db.pw}
复制代码 application-dev.yml
- db:
- host: mysql #容器名
- pw: 123
复制代码 1.2 项目打包
项目打包:idea-maven-package:
跳过单元测试,直接打成jar包,部署到docker服务器;
1.3 编写Dockerfile
将Dockerfile文件部署到daocker服务器(与应用jar包在同一级目录)
- # 基础镜像
- FROM openjdk:11.0-jre-buster
- # 设定时区
- ENV TZ=Asia/Shanghai
- RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
- # 拷贝jar包
- COPY hm-service.jar /app.jar
- # 入口
- ENTRYPOINT ["java", "-jar", "/app.jar"]
复制代码 1.4 创建镜像
- # 1.构建项目镜像,不指定tag,则默认为latest
- docker build -t hmall .
- # 2.查看镜像
- docker images
复制代码 1.5 创建并运行容器
- # 3.创建并运行容器,并通过--network将其加入自定义网络ff,这样才能通过容器名访问mysql
- docker run -d --name hmall --network ff -p 8080:8080 hmall
复制代码 1.6 测试
通过浏览器访问:http://你的虚拟机地址:8080/
2. 项目部署-前端
2.1 html前端静态目录
将前端代码(hmall-portal和hmall-admin),复制到前端静态目录html文件中
2.2 nginx.config编写
对静态资源目录做代理设置
- 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;
- proxy_pass http://hmall: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://hmall:8080;
- }
- }
- }
复制代码 2.3 部署宿主机服务器
将代码和设置文件,部署至宿主机服务中,包管同一级目录。
2.4 创建容器并挂载
- 将/root/nginx/nginx.conf挂载到/etc/nginx/ng``inx.conf
- 将/root/nginx/html挂载到/usr/share/nginx/html
由于必要让nginx同时代理hmall-portal和hmall-admin两套前端资源,因此我们必要袒露两个端口:
- 18080:对应hmall-portal
- 18081:对应hmall-admin
并参加自界说网络,可以访问后台和数据库
- docker run -d \
- --name nginx \
- -p 18080:18080 \
- -p 18081:18081 \
- -v /root/nginx/html:/usr/share/nginx/html \
- -v /root/nginx/nginx.conf:/etc/nginx/nginx.conf \
- --network ff \
- nginx
复制代码 2.5 测试
通过浏览器访问:http://你的虚拟机ip:18080
3. DockerCompose
Docker Compose就可以资助我们实现多个相互关联的Docker容器的快速部署。它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来界说一组相关联的应用容器。
3.1 根本语法
docker-compose.yml文件的根本语法可以参考官方文档:
https://docs.docker.com/compose/compose-file/compose-file-v3/
docker-compose文件中可以界说多个相互关联的应用容器,每一个应用容器被称为一个服务(service)。由于service就是在界说某个应用的运行时参数,因此与docker run参数非常相似。
举例来说,用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 hmall
- mysql
复制代码 如果用docker-compose.yml文件来界说,就是如许:
- version: "3.8"
- services:
- mysql:
- image: mysql
- container_name: mysql
- ports:
- - "3306:3306"
- environment:
- TZ: Asia/Shanghai
- MYSQL_ROOT_PASSWORD: 123
- volumes:
- - "./mysql/conf:/etc/mysql/conf.d"
- - "./mysql/data:/var/lib/mysql"
- networks:
- - new
- networks:
- new:
- name: hmall
复制代码 对比如下:
docker run 参数docker compose 指令阐明–namecontainer_name容器名称-pports端口映射-eenvironment情况变量-vvolumes数据卷设置–networknetworks网络 示例
- version: "3.8"
- services:
- mysql:
- image: mysql
- container_name: mysql
- ports:
- - "3306:3306"
- environment:
- TZ: Asia/Shanghai
- MYSQL_ROOT_PASSWORD: 123
- volumes:
- - "./mysql/conf:/etc/mysql/conf.d"
- - "./mysql/data:/var/lib/mysql"
- - "./mysql/init:/docker-entrypoint-initdb.d"
- networks:
- - hm-net
- hmall:
- build:
- context: .
- dockerfile: Dockerfile
- container_name: hmall
- ports:
- - "8080:8080"
- networks:
- - hm-net
- depends_on:
- - mysql
- nginx:
- image: nginx
- container_name: nginx
- ports:
- - "18080:18080"
- - "18081:18081"
- volumes:
- - "./nginx/nginx.conf:/etc/nginx/nginx.conf"
- - "./nginx/html:/usr/share/nginx/html"
- depends_on:
- - hmall
- networks:
- - hm-net
- networks:
- hm-net:
- name: hmall
复制代码 3.2 底子命令
编写好docker-compose.yml文件,就可以部署项目了。常见的命令:
https://docs.docker.com/compose/reference/
根本语法如下:
- docker compose [OPTIONS] [COMMAND]
复制代码 其中,OPTIONS和COMMAND都是可选参数,比较常见的有:
类型参数或指令阐明Options-f指定compose文件的路径和名称-p指定project名称。project就是当前compose文件中设置的多个service的聚集,是逻辑概念Commandsup创建并启动所有service容器down停止并移除所有容器、网络ps列出所有启动的容器logs查看指定容器的日记stop停止容器start启动容器restart重启容器top查看运行的进程exec在指定的运行中容器中实行命令 示例
- # 1.进入root目录
- cd /root
- # 2.删除旧容器
- docker rm -f $(docker ps -qa)
- # 3.删除hmall镜像
- docker rmi hmall
- # 4.清空MySQL数据
- rm -rf mysql/data
- # 5.启动所有, -d 参数是后台启动
- docker compose up -d
- # 结果:
- [+] 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
- # 结果
- 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
- # 结果
- 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
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |