1. Docker实践
1.1. 场景
一个前后端分离的项目,需要redis、mysql5.7、Java8、nginx
生产环境下,数据库redis、mysql不建议使用docker
目录结构 docker-res下
├── docker-compose.yml
├── java-res
│ ├── dockerfile-java
│ └── exam-0.0.1-SNAPSHOT.jar
└── nginx-res
├── dist
│ ├── assets
│ │ ├── index-DEWksCs1.css
│ │ └── index-Dzzr74DO.js
│ ├── index.html
│ └── vite.svg
├── dockerfile-nginx
└── nginx.conf
1.2. 创建项目文件夹
cd /root
mkdir company-project
cd company-project
# project-nginx 目录下存放dockerfile-nginx、nginx.conf、前端编译后的文件夹dist
mkdir project-nginx
# 存放后端打包的jar、dockerfile-java
mkdir project-java
1.3. 定制nginx容器
dockerfile-nginx
FROM nginx:1.27.5-alpine
LABEL maintainer="yaoxiang"
LABEL description="A yaoxiang Dockerfile for nginx"
ENV TZ=Asia/Shanghai
EXPOSE 6688
WORKDIR /yaoxiang-nginx
COPY nginx.conf /etc/nginx/nginx.conf
# /yaoxiang-nginx/html
COPY dist ./html
CMD ["nginx", "-g", "daemon off;"]
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 6688;
server_name localhost;
location / {
root /yaoxiang-nginx/html;
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
}
}
1.4. 定制后端容器
dockerfile-java
FROM amazoncorretto:8
LABEL maintainer="yaoxiang"
LABEL description="A yaoxiang Dockerfile for java"
ENV TZ=Asia/Shanghai
EXPOSE 8080
WORKDIR /yaoxiang-java
# /yaoxiang-java/exam-0.0.1-SNAPSHOT.jar
COPY exam-0.0.1-SNAPSHOT.jar ./
CMD ["java", "-jar", "exam-0.0.1-SNAPSHOT.jar"]
2. DockerCompose实践
docker-compose.yml
name: yaoxiang-app
services:
# 前端服务 - Nginx
frontend:
container_name: yaoxiang-nginx
image: yaoxiang-nginx
ports:
- "6688:6688"
build:
context: ./nginx-res
dockerfile: dockerfile-nginx
restart: unless-stopped
# 后端服务 - Java 8 Spring Boot
backend:
container_name: yaoxiang-java
image: yaoxiang-java
build:
context: ./java-res
dockerfile: dockerfile-java
ports:
- "8080:8080"
restart: unless-stopped
2.1. 数据库连接
要让 Docker 容器中的后端服务(yaoxiang-java
)能够连接到 宿主机上的 Redis 和 MySQL ,需要在容器中通过宿主机的 IP 地址访问这些服务。
同时修改数据库服务的监听地址为0.0.0.0