通过Maven、Docker实现工程构建和部署。
0. 常用命令
- 安装/启动RabbitMQ服务
1
| docker-compose -p market_system -f dev-ops/docker-compose-environment.yml up -d rabbitmq
|
参数含义:
-p: 指定项目名为 market_system-f: 指定yml文件所在的位置up -d: 后台启动rabbitmq: 只启动某一个service,可在命令最后加service名称,注意不是容器名称。
查看容器是否启动成功:docker ps
- 停止RabbitMQ服务
1
| docker-compose -f docker-compose-environment.yml stop rabbitmq
|
- 停止并删除RabbitMQ容器
1
| docker-compose -f docker-compose-environment.yml rm -f rabbitmq
|
1. Maven操作
处理项目版本问题,Maven编译使用的JDK也需要是JDK8,否则编译失败。其次,为了避免不必要的干扰,或者修改后端的任意代码/配置了之后,需要执行clean操作,随后install重新打成jar包到target目录下。
2. 工程构建
2.1 Docker脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| FROM openjdk:8-jre-slim
MAINTAINER jing
ENV PARAMS=""
ENV TZ=PRC RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
ADD target/s-pay-mall-mvc-app.jar /s-pay-mall-mvc-app.jar
ENTRYPOINT ["sh","-c","java -jar $JAVA_OPTS /s-pay-mall-mvc-app.jar $PARAMS"]
|
2.2 build.sh
1 2
| docker build -t tj/s-pay-mall-mvc-app:1.0 -f ./Dockerfile .
|
3. 环境部署
- 执行命令
docker-compose -f docker-compose-environment.yml up -d部署。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
|
version: '3.9' services: mysql: image: mysql:8.0.32 container_name: mysql command: --default-authentication-plugin=mysql_native_password restart: always environment: TZ: Asia/Shanghai MYSQL_ROOT_PASSWORD: 123456 ports: - "13306:3306" volumes: - ./sql:/docker-entrypoint-initdb.d healthcheck: test: [ "CMD", "mysqladmin" ,"ping", "-h", "localhost" ] interval: 5s timeout: 10s retries: 10 start_period: 15s networks: - my-network
phpmyadmin: image: phpmyadmin:5.2.1 container_name: phpmyadmin hostname: phpmyadmin ports: - 8899:80 environment: - PMA_HOST=mysql - PMA_PORT=3306 - MYSQL_ROOT_PASSWORD=123qwe!@#QWE depends_on: mysql: condition: service_healthy networks: - my-network
redis: image: redis:6.2 container_name: redis restart: always hostname: redis privileged: true ports: - 16379:6379 volumes: - ./redis/redis.conf:/usr/local/etc/redis/redis.conf command: redis-server /usr/local/etc/redis/redis.conf networks: - my-network healthcheck: test: [ "CMD", "redis-cli", "ping" ] interval: 10s timeout: 5s retries: 3
redis-admin: image: spryker/redis-commander:0.8.0 container_name: redis-admin hostname: redis-commander restart: always ports: - 8081:8081 environment: - REDIS_HOSTS=local:redis:6379 - HTTP_USER=admin - HTTP_PASSWORD=admin - LANG=C.UTF-8 - LANGUAGE=C.UTF-8 - LC_ALL=C.UTF-8 networks: - my-network depends_on: redis: condition: service_healthy
networks: my-network: driver: bridge
|
4. 项目部署
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| version: '3.8'
services: nginx: image: nginx:1.25.1 container_name: nginx restart: always ports: - '443:443' - '80:80' volumes: - ./nginx/html:/usr/share/nginx/html privileged: true s-pay-mall: image: tj/s-pay-mall-mvc-app:1.0 container_name: s-pay-mall restart: on-failure ports: - "8080:8080" environment: - TZ=PRC - SERVER_PORT=8080 volumes: - ./log:/data/log logging: driver: "json-file" options: max-size: "10m" max-file: "3" networks: - my-network
networks: my-network: driver: bridge
|
5. 如果修改前端html
因为是简单的静态页面,无需重新构建镜像和部署。
6. 如果修改后端的文件
需要重新走一遍流程
- 从Maven开始,
mvn clean install - 用build.sh重新构建镜像,用的是Maven打出来的新jar
- 用docker-compose重启后端容器,到 docs/dev-ops 目录,执行:
1
| docker-compose -f docker-compose-app.yml up -d s-pay-mall
|
这一步会让s-pay-mall服务的容器基于刚才新构建的镜像重新创建并启动。
7. Other