Docker与Nginx的容器化部署及配置
容器运行与管理基础
通过Docker命令可实现容器的快速启动与交互。例如,使用docker run -it ubuntu /bin/bash以交互模式启动一个Ubuntu容器,并进入其终端。若需后台运行,应确保容器内有前台进程,否则会立即退出。可通过docker run -d redis:6.0.8在守护模式下运行Redis服务。
镜像构建与仓库操作
利用Dockerfile定义构建过程。例如,基于CentOS 7构建自定义镜像:
FROM centos:7
WORKDIR /app
COPY . /app
CMD ["./start.sh"]
构建后,通过docker build -t myapp:v1 .生成镜像。推送至私有仓库前,需配置客户端信任地址,如修改/etc/docker/daemon.json添加"insecure-registries": ["192.168.1.100:5000"],再执行docker push 192.168.1.100:5000/myapp:v1。
数据持久化与挂载策略
容器数据可通过两种方式持久化:绑定挂载(bind mount)和数据卷(volume)。使用-v /host/path:/container/path将宿主机目录映射至容器,适用于配置文件或日志。而VOLUME /data在Dockerfile中声明的数据卷由Docker管理,独立于宿主机路径,更安全且便于备份。
示例:启动MySQL容器并挂载数据目录:
docker run -d \
--name mysql-dev \
-e MYSQL_ROOT_PASSWORD=secret \
-v /data/mysql:/var/lib/mysql \
-v /data/conf:/etc/mysql/conf.d \
mysql:5.7
Nginx反向代理与负载均衡配置
通过Nginx实现前后端分离部署。以下配置支持静态资源访问、API转发与WebSocket代理:
server {
listen 80;
server_name example.com;
location / {
root /usr/share/nginx/html;
index index.html;
try_files $uri $uri/ =404;
}
location ^~/api/ {
proxy_pass http://backend:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /ws/ {
proxy_pass http://backend:8080/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_read_timeout 36000s;
}
}
Docker Compose多服务编排
使用docker-compose.yml统一管理多个服务。例如,部署Spring Boot应用、MySQL与Redis:
version: '3.8'
services:
app:
build: .
ports:
- "8080:8080"
depends_on:
- mysql
- redis
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: rootpass
volumes:
- mysql_data:/var/lib/mysql
redis:
image: redis:6.0.8
ports:
- "6379:6379"
volumes:
mysql_data:
通过docker-compose up -d一键启动所有服务,docker-compose down停止并清理资源。
SSL/TLS与安全通信
为网站启用HTTPS,需配置证书。使用OpenSSL生成自签名证书:
openssl req -newkey rsa:2048 -nodes -keyout key.pem -out cert.pem
在Nginx配置中引用:
ssl_certificate_file /path/to/cert.pem;
ssl_certificate_key_file /path/to/key.pem;
配合rewrite ^(.*)$ https://$host$1 permanent;实现HTTP自动跳转至HTTPS。