Docker是一个开源的容器化平台,允许开发者打包应用及其依赖项到一个轻量级、可移植的容器中。以下是部署多种常见容器的详细过程。
bash
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
docker version # 查看版本
docker info # 查看系统信息
docker pull <image> # 拉取镜像
docker images # 列出本地镜像
docker ps # 查看运行中的容器
docker ps -a # 查看所有容器
# 拉取MySQL镜像
docker pull mysql:8.0
# 运行MySQL容器
docker run --name mysql-container \
-e MYSQL_ROOT_PASSWORD=my-secret-pw \
-e MYSQL_DATABASE=my_db \
-e MYSQL_USER=user \
-e MYSQL_PASSWORD=password \
-p 3306:3306 \
-v /path/to/mysql/data:/var/lib/mysql \
-d mysql:8.0 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci
# 进入MySQL容器
docker exec -it mysql-container mysql -uroot -p
# 拉取Redis镜像
docker pull redis:latest
# 运行Redis容器
docker run --name redis-container \
-p 6379:6379 \
-v /path/to/redis/data:/data \
-d redis:latest \
redis-server --appendonly yes
# 连接Redis
docker exec -it redis-container redis-cli
# 拉取Nginx镜像
docker pull nginx:latest
# 运行Nginx容器
docker run --name nginx-container \
-p 80:80 \
-p 443:443 \
-v /path/to/nginx/html:/usr/share/nginx/html \
-v /path/to/nginx/conf:/etc/nginx \
-d nginx:latest
# 重新加载Nginx配置
docker exec nginx-container nginx -s reload
# 拉取PostgreSQL镜像
docker pull postgres:13
# 运行PostgreSQL容器
docker run --name postgres-container \
-e POSTGRES_PASSWORD=mysecretpassword \
-e POSTGRES_USER=myuser \
-e POSTGRES_DB=mydb \
-p 5432:5432 \
-v /path/to/postgres/data:/var/lib/postgresql/data \
-d postgres:13
# 连接PostgreSQL
docker exec -it postgres-container psql -U myuser -d mydb
# 拉取MongoDB镜像
docker pull mongo:latest
# 运行MongoDB容器
docker run --name mongo-container \
-p 27017:27017 \
-v /path/to/mongo/data:/data/db \
-e MONGO_INITDB_ROOT_USERNAME=admin \
-e MONGO_INITDB_ROOT_PASSWORD=secret \
-d mongo:latest
# 连接MongoDB
docker exec -it mongo-container mongo -u admin -p secret
# 创建自定义网络
docker network create wordpress-network
# 运行MySQL容器
docker run --name wordpress-mysql \
--network wordpress-network \
-e MYSQL_ROOT_PASSWORD=rootpass \
-e MYSQL_DATABASE=wordpress \
-e MYSQL_USER=wordpress \
-e MYSQL_PASSWORD=wordpresspass \
-v /path/to/mysql/data:/var/lib/mysql \
-d mysql:5.7
# 运行WordPress容器
docker run --name wordpress-container \
--network wordpress-network \
-p 8080:80 \
-e WORDPRESS_DB_HOST=wordpress-mysql \
-e WORDPRESS_DB_USER=wordpress \
-e WORDPRESS_DB_PASSWORD=wordpresspass \
-e WORDPRESS_DB_NAME=wordpress \
-v /path/to/wordpress:/var/www/html \
-d wordpress:latest
创建docker-compose.yml
文件:
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx/html:/usr/share/nginx/html
- ./nginx/conf:/etc/nginx
depends_on:
- app
app:
image: node:14
working_dir: /app
volumes:
- ./app:/app
command: npm start
ports:
- "3000:3000"
environment:
- NODE_ENV=production
db:
image: postgres:13
environment:
- POSTGRES_PASSWORD=secret
- POSTGRES_USER=user
- POSTGRES_DB=mydb
volumes:
- ./postgres/data:/var/lib/postgresql/data
ports:
- "5432:5432"
运行命令:
docker-compose up -d # 启动所有服务
docker-compose down # 停止并移除所有服务
docker logs <container_id> # 查看日志
docker logs -f <container_id> # 实时查看日志
docker stats # 查看容器资源使用情况
docker top <container_id> # 查看容器进程
# 备份容器为镜像
docker commit <container_id> backup-image
# 导出镜像
docker save -o backup.tar backup-image
# 导入镜像
docker load -i backup.tar
docker system prune # 清理无用镜像、容器、网络等
docker volume prune # 清理无用卷
通过以上步骤,您可以轻松部署和管理多种Docker容器,构建灵活、可扩展的应用环境。