MySQL 8.0
Cấu hình Dockerfile
FROM mysql:8.0.33
# Thiết lập múi giờ
ENV TZ=Asia/Ho_Chi_Minh
RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# Cấu hình cơ sở dữ liệu
ENV MYSQL_DATABASE=quanly_doanhthu \
MYSQL_ROOT_PASSWORD=docker_secure2024 \
MYSQL_ROOT_HOST=%
# Sao chép file khởi tạo
COPY init_db.sql /docker-entrypoint-initdb.d/
EXPOSE 3306
Thiết lập hệ thống
Tạo cấu trúc thư mục cần thiết:
mkdir -p /app/mysql/{data,conf}
touch /app/mysql/conf/my.cnf
Nội dung my.cnf tối giản:
[mysqld]
skip-name-resolve
default-authentication-plugin=mysql_native_password
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
Lệnh khởi chạy
docker build -t db-mysql:latest . && \
docker run -d -p 3307:3306 \
-v /app/mysql/data:/var/lib/mysql \
-v /app/mysql/conf:/etc/mysql/conf.d \
--name mysql-service db-mysql:latest
Nginx với SSL
Dockerfile cơ bản
FROM nginx:1.25.1
# Thiết lập môi trường
ENV TZ=Asia/Ho_Chi_Minh
RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime
# Sao chép cấu hình
COPY nginx.conf /etc/nginx/nginx.conf
COPY sites-enabled/ /etc/nginx/conf.d/
Cấu trúc thư mục
/app/nginx/
├── html
├── logs
├── certs
└── conf
└── sites-enabled
Cấu hình SSL (sites-enabled/default.conf)
server {
listen 443 ssl;
server_name api.example.com;
ssl_certificate /etc/nginx/certs/example.pem;
ssl_certificate_key /etc/nginx/certs/example.key;
ssl_protocols TLSv1.2 TLSv1.3;
location / {
root /usr/share/nginx/html;
try_files $uri $uri/ /index.html;
}
}
server {
listen 80;
server_name api.example.com;
return 301 https://$host$request_uri;
}
Lệnh triển khai
docker run -d -p 80:80 -p 443:443 \
-v /app/nginx/html:/usr/share/nginx/html \
-v /app/nginx/logs:/var/log/nginx \
-v /app/nginx/certs:/etc/nginx/certs \
-v /app/nginx/conf:/etc/nginx/conf.d \
--name web-server nginx:latest
Redis 7.0
Dockerfile tối ưu
FROM redis:7.0
# Cấu hình bảo mật
ENV REDIS_PASSWORD=redis_docker@2024
# Sao chép file cấu hình
COPY redis.conf /usr/local/etc/redis/redis.conf
CMD ["redis-server", "/usr/local/etc/redis/redis.conf"]
redis.conf tối giản
bind 0.0.0.0
protected-mode yes
port 6379
requirepass "${REDIS_PASSWORD}"
maxmemory 512mb
maxmemory-policy allkeys-lru
Triển khai không trạng thái
docker run -d -p 6379:6379 \
-e REDIS_PASSWORD=redis_docker@2024 \
--name cache-service \
redis:7.0 --save 900 1 --loglevel warning
MinIO Object Storage
Lệnh chạy trực tiếp
docker run -d -p 9000:9000 -p 9001:9001 \
-e MINIO_ROOT_USER=minio_admin \
-e MINIO_ROOT_PASSWORD=minio_strong!2024 \
-v /app/minio/data:/data \
--name object-storage \
minio/minio server /data --console-address :9001
Triển khai Ứng dụng Java
Thư mục làm việc
/app/java/
├── app.jar
└── config/application.yml
Dockerfile cho Spring Boot
FROM eclipse-temurin:17-jre
WORKDIR /app
COPY app.jar /app/
COPY config /app/config
EXPOSE 8080
ENTRYPOINT ["java","-jar","app.jar"]
Chạy ứng dụng
docker build -t java-app:1.2 . && \
docker run -d -p 8080:8080 \
-v /app/java/config:/app/config \
--name app-service java-app:1.2