一、为什么选择 Docker 部署应用程序?
- 一致性和可移植性
- 一致的环境:应用及其依赖项都在容器内,确保开发、测试和生产环境一致。
- 跨平台运行:容器可以在任何支持 Docker 的系统上运行。
- 轻量级和高效
- 资源高效:容器共享主机操作系统内核,比虚拟机更轻量级。
- 快速启动:容器启动速度比虚拟机快,通常在几秒内完成。
- 简化依赖管理
- 依赖隔离:每个容器独立运行,避免依赖冲突。
- 配置简化:通过 Dockerfile 定义环境,配置管理更简单。
- 可扩展性和自动化
- 扩展管理:与 Kubernetes 等编排工具集成,可以轻松扩展和管理容器。
- 自动化部署:与 CI/CD 工具集成,实现自动化构建和部署。
- 安全性和隔离
- 进程隔离:容器隔离进程,提高安全性。
- 多层安全机制:支持命名空间、控制组等安全特性。
- 活跃的生态系统
- 丰富的工具和插件:支持监控、日志管理等多种需求。
- 社区支持:有广泛的资源和支持。
二、在Centos上安装Docker
- 更新现有的包
sudo yum update -y
- 安装依赖包,并设置 Docker 仓库
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 官方镜像源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 国内镜像源(阿里)
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 安装 Docker CE
sudo yum install -y docker-ce
- 设置开机自启动
sudo systemctl start docker
sudo systemctl enable docker
- 验证是否安装成功
docker --version
显示docker的版本,到这里 docker 已经安装完成
三、部署目录及过程
1. 文件目录,包含所有需要的文件
docker/
├── docker-compose.yml // docker compose
├── nacos/ // nacos Docker file
│ ├── conf/
| | └── application.propertise
│ └── Dockerfile
├── web/ // web
│ ├── conf/
| | └── nginx.conf
│ ├── dist/ // web build file
│ ├── logs/ // nginx log
│ ├── ssl/ // ssl 证书
│ └── Dockerfile
├── redis/ // redis docker
│ ├── conf/
| | └── redis.conf
│ └── Dockerfile
├── server/ // server 后端
│ ├── app1.jar // app1.jar
│ ├── app2.jar // app2.jar
│ ├── app3.jar // app3.jar
│ ├── Dockerfile
| └── start.sh // server 启动脚本
~~~
2. docker-compose.yaml
docker-compose.yaml 文件是 Docker Compose 工具的核心配置文件,通过它可以定义和管理多个 Docker 容器的配置,简化了多容器应用程序的部署和管理。
# 版本号
version: '1.0'
services:
nacos:
image: nacos
container_name: nacos
build:
context: nacos
dockerfile: Dockerfile
environment:
- MODE=standalone
- TZ=Asia/Shanghai
volumes:
# 挂载 nacos 日志
- ./nacos/logs:/home/nacos/logs
ports:
- "8848:8848"
- "9848:9848"
- "9849:9849"
restart: always
redis:
container_name: redis
image: redis
ports:
- "6379:6379"
build:
context: redis
dockerfile: Dockerfile
volumes:
# redis data
- ./redis/data:/data
environment:
TZ: Asia/Shanghai
command: redis-server /home/redis/redis.conf
restart: always
server:
image: server
container_name: server
build:
context: server
dockerfile: Dockerfile
volumes:
# server file
- ./server:/home/app
ports:
- "18080:18080"
environment:
TZ: Asia/Shanghai
restart: always
depends_on:
- nacos
- redis
web:
image: web
container_name: web
build:
context: web
dockerfile: Dockerfile
volumes:
# 前端包
- ./web/dist/:/usr/share/nginx/html/
# 证书
- ./web/ssl:/etc/nginx/ssl
# nginx 日志
- ./web/logs:/etc/nginx/logs
restart: always
ports:
- "443:443"
depends_on:
- server
3. Nacos 模块
- application.properties 存放着 Nacos 启动配置,略过
- Dockerfile 详情如下
# 基础镜像
FROM nacos/nacos-server:v2.2.0
# author
MAINTAINER 123@123.com
# 创建目录
RUN mkdir -p /home/nacos/
# 工作目录
WORKDIR /home/nacos
# 复制配置文件
COPY ./conf/application.properties /home/nacos/conf/application.properties
4. Redis 模块
- redis.conf 存放 Redis的配置,略过
- Dockerfile 详情如下
# 基础镜像
FROM redis:6.2.4-alpine
# author
MAINTAINER 123@123.com
# 创建目录
RUN mkdir -p /home/redis
# 工作目录
WORKDIR /home/redis
# 复制配置文件
COPY ./conf/redis.conf /home/redis/redis.conf
5. Server 模块
- Dockerfile 详情如下
# 基础镜像
FROM openjdk:11-jdk
# author
MAINTAINER 123@123.com
# 创建目录
RUN mkdir -p /home/app/
# 工作目录
WORKDIR /home/app
# 启动命令
ENTRYPOINT ["sh", "-c", "/home/app/start.sh"]
- start.sh 详情如下
#!/bin/sh
startTime=$(date "+%Y-%m-%d %H:%M:%S")
echo "Starting lbs-server..."
echo "startTime $startTime"
java -Xms256m -Xmx1024m -jar ./app1.jar
java -Xms256m -Xmx512m -jar ./app2.jar
java -Xms256m -Xmx512m -jar ./app3.jar
wait
注: start.sh 上传至目标服务器之后,需要赋给 start.sh 可执行权限 chmod o+x start.sh,最后执行wait为了保持 Docker 容器运行、确保所有后台进程正常运行、提供正确的进程退出状态,便于调试和错误处理。
6. Web 模块
- Dockerfile 详情如下
FROM nginx:1.24
MAINTAINER 123@123.com
COPY ./conf/nginx.conf /etc/nginx/nginx.conf
ENV TZ=Asia/Shanghai
CMD ["nginx", "-g", "daemon off;"] # 让 Nginx 以守护进程模式(daemon off)运行
- nginx.conf 详情如下
worker_processes 4;
error_log /etc/nginx/logs/error.log;
events {
worker_connections 2048;
multi_accept on;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /etc/nginx/logs/access.log main;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
return 301 https://$host/;
}
}
server {
listen 443 ssl;
server_name localhost;
ssl_certificate /etc/nginx/ssl/your_ip_ssl.crt; # ssl证书存储路径
ssl_certificate_key /etc/nginx/ssl/your_ip.private; # 秘钥存储路径
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #开启TLS协议
# 前端前台访问地址映射
location / {
root /usr/share/nginx/html/;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
# 请求后端接口转发
location /api/ {
add_header Access-Control-Allow-Origin '*' always;
add_header Access-Control-Allow-Headers '*';
add_header Access-Control-Allow-Methods '*';
add_header Access-Control-Allow-Credentials 'true';
if ($request_method = 'OPTIONS') {
return 204;
}
proxy_pass http://ip:18080/;
}
# 压缩
gzip on;
gzip_comp_level 4;
gzip_min_length 256;
gzip_types text/plain text/css text/javascript application/json application/javascript application/x-protobuf;
}
}
7. 启动
启动命令,解释如下
# 切换至 docker 目录
# 命令
docker compose -f ./docker-compose.yaml up -d --build images-name
# docker compose: 这是 Docker Compose 工具的命令,用于执行与 Docker Compose 相关的操作。
# -f ./docker-compose.yaml: -f 参数用于指定要使用的 Docker Compose 配置文件的路径。
# up: up 是 Docker Compose 命令的一个子命令,用于启动容器组。
# -d: up 命令的一个选项,表示以后台模式运行容器。
# --build: 这个选项告诉 Docker Compose 在启动容器之前构建镜像。如果容器的镜像已经存在,则会先删除现有镜像,然后重新构建。
# images-name: 在 Docker Compose 配置文件中,可以定义多个服务,而这里的 images 参数指定了要构建的服务名称。
若直接执行docker compose -f ./docker-compose.yaml up -d --build会将docker-compose.yaml中定义的所有 service 根据 depends_on 依赖先后启动,这里建议新手分步启动
- 启动 Nacos
docker compose -f ./docker-compose.yaml up -d --build nacos - 启动 Redis
docker compose -f ./docker-compose.yaml up -d --build redis - 启动 server
docker compose -f ./docker-compose.yaml up -d --build server - 启动 web
docker compose -f ./docker-compose.yaml up -d --build web
若启动失败,可以使用docker logs images-name查看启动日志
可以通过docker ps查看镜像执行状态
到这里本篇文章的分享结束,希望能帮助到大家,点赞+收藏不迷路~~