可直接部署的 Docker 项目示例,从数据库到 Web 应用,在实战中学习
用 Docker 运行 MySQL 8.0,Volume 持久化数据,配置资源限制和安全管理
services:
mysql:
image: mysql:8.0
container_name: mysql-server
restart: unless-stopped
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=your_root_password
- MYSQL_DATABASE=testdb
- MYSQL_USER=appuser
- MYSQL_PASSWORD=app_password
volumes:
- mysql-data:/var/lib/mysql
- ./mysql-init:/docker-entrypoint-initdb.d # 初始化脚本
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
deploy:
resources:
limits:
memory: 512M
cpus: "1.0"
logging:
driver: "json-file"
options:
max-size: "20m"
max-file: "3"
volumes:
mysql-data:
mysql-init/ 目录,放入 .sql 初始化脚本(可选)MYSQL_ROOT_PASSWORD 为强密码docker compose up -ddocker compose logs mysql 查看是否启动成功mysql -h 127.0.0.1 -P 3306 -u root -p"127.0.0.1:3306:3306" 仅限本地连接。生产环境务必使用强密码,并通过 .env 文件管理。Docker Compose 编排 MySQL + WordPress,验证多服务通信和依赖管理
services:
db:
image: mysql:8.0
container_name: wp-db
restart: unless-stopped
volumes:
- wp-db-data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=rootpass123
- MYSQL_DATABASE=wordpress
- MYSQL_USER=wpuser
- MYSQL_PASSWORD=wppass123
networks:
- wp-net
wordpress:
image: wordpress:latest
container_name: wp-app
restart: unless-stopped
ports:
- "8081:80"
environment:
- WORDPRESS_DB_HOST=db
- WORDPRESS_DB_USER=wpuser
- WORDPRESS_DB_PASSWORD=wppass123
- WORDPRESS_DB_NAME=wordpress
volumes:
- wp-content:/var/www/html/wp-content
depends_on:
- db
networks:
- wp-net
volumes:
wp-db-data:
wp-content:
networks:
wp-net:
driver: bridge
docker-compose.yml 并修改密码docker compose up -ddocker compose logs dbhttp://服务器IP:8081depends_on 依赖管理、自定义网络(容器通过服务名互访)、数据持久化两层分离。docker compose down -v 清理。搭建私有镜像仓库,配置基础认证,学习镜像推送和拉取流程
services:
registry:
image: registry:2
container_name: private-registry
restart: unless-stopped
ports:
- "5000:5000"
environment:
- REGISTRY_HTTP_SECRET=your-secret-here
- REGISTRY_STORAGE_DELETE_ENABLED=true
volumes:
- registry-data:/var/lib/registry
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
volumes:
registry-data:
docker compose up -ddocker tag nginx:alpine localhost:5000/nginx:alpine && docker push localhost:5000/nginx:alpinedocker pull localhost:5000/nginx:alpinecurl http://localhost:5000/v2/_catalogyum install httpd-tools -ymkdir auth && htpasswd -Bc auth/htpasswd admin- ./auth:/authREGISTRY_AUTH=htpasswd 等docker tag / push / pull 完整流程、Registry API 探索、基础认证配置。回顾服务器正在运行的服务 —— 部署 SearXNG 元搜索引擎,理解实际生产配置
你的阿里云 ECS 上已经跑着 SearXNG,通过 docker run 手动启动(端口 8080,仅本地访问)。这也是一个很好的 Docker 学习案例。
docker run 启动,建议改为 Compose 统一管理search.dockerlab.online)settings.yml 定制搜索引擎列表和界面docker run 命令改写成 Compose 文件,加上 Redis 容器和日志限制。这是从 "能用" 到 "规范" 的典型升级。services:
searxng:
image: searxng/searxng:latest
container_name: searxng
restart: unless-stopped
ports:
- "127.0.0.1:8080:8080" # 仅本地
volumes:
- ./searxng:/etc/searxng
environment:
- SEARXNG_BASE_URL=https://search.dockerlab.online/
logging:
driver: "json-file"
options:
max-size: "10m"
# Redis 缓存(可选)
redis:
image: redis:alpine
container_name: searxng-redis
restart: unless-stopped
command: redis-server --save 60 1 --loglevel warning
volumes:
- redis-data:/data