DATE=$(date +%Y%m%d)
VERSION="v1.0.0"
ENV="prod"
IMAGE_NAME="myapp"
CONTAINER_NAME="myapp-prod"
REGISTRY="registry.example.com"
- 命令行直接设置(临时使用)
export DATE=$(date +%Y%m%d) VERSION="v1.0.0" ENV="prod" IMAGE_NAME="myapp"
export DATE=$(date +%Y%m%d)
export VERSION="v1.0.0"
export ENV="prod"
export IMAGE_NAME="myapp"
env | grep "VERSION"
- 环境变量文件(推荐方式)
cat > .env << EOF
DATE=$(date +%Y%m%d)
VERSION=v1.0.0
ENV=prod
IMAGE_NAME=myapp
CONTAINER_NAME=myapp-prod
REGISTRY=registry.example.com
EOF
source .env
export $(cat .env | xargs)
- 针对不同环境的配置
cat > prod.env << EOF
DATE=$(date +%Y%m%d)
VERSION=v1.0.0
ENV=prod
IMAGE_NAME=myapp
CONTAINER_NAME=myapp-prod
REGISTRY=registry.example.com
EOF
cat > dev.env << EOF
DATE=$(date +%Y%m%d)
VERSION=v1.0.0
ENV=dev
IMAGE_NAME=myapp
CONTAINER_NAME=myapp-dev
REGISTRY=registry-dev.example.com
EOF
source prod.env
source dev.env
version: '3'
services:
app:
image: ${IMAGE_NAME}:${VERSION}-${ENV}-${DATE}
container_name: ${CONTAINER_NAME}
- 开发环境:使用
.env
文件,便于管理 - 测试/生产环境:使用环境特定的配置文件
- 自动化脚本:在脚本中直接设置变量
- 敏感信息:使用专门的密钥管理服务
.env
文件应加入 .gitignore
- 敏感信息不要明文存储
- 确保变量名不与系统环境变量冲突
- 定期更新维护配置
docker run -d \
--name ${CONTAINER_NAME} \
-p 8080:80 \
${IMAGE_NAME}:${VERSION}-${ENV}-${DATE}
docker ps
docker ps -a
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
docker logs -f ${CONTAINER_NAME}
docker logs -n 100 ${CONTAINER_NAME}
docker logs --since 2h ${CONTAINER_NAME}
docker exec -it ${CONTAINER_NAME} bash
docker exec -it ${CONTAINER_NAME} sh
docker stats ${CONTAINER_NAME}
docker stats --no-stream
docker build -t ${IMAGE_NAME}:latest .
docker build -t ${IMAGE_NAME}:latest --no-cache .
docker tag ${IMAGE_NAME}:latest ${IMAGE_NAME}:${VERSION}-${ENV}-${DATE}
docker tag ${IMAGE_NAME}:latest ${REGISTRY}/${IMAGE_NAME}:${VERSION}-${ENV}-${DATE}
docker images ${IMAGE_NAME}
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"
docker save -o ${IMAGE_NAME}_${VERSION}_${DATE}.tar \
${IMAGE_NAME}:${VERSION}-${ENV}-${DATE}
docker save -o backend_${DATE}.tar \
${IMAGE_NAME}:${VERSION}-${ENV}-${DATE} \
mysql:8.0 \
redis:7.0
docker load -i ${IMAGE_NAME}_${VERSION}_${DATE}.tar
docker login ${REGISTRY}
docker push ${REGISTRY}/${IMAGE_NAME}:${VERSION}-${ENV}-${DATE}
docker pull ${REGISTRY}/${IMAGE_NAME}:${VERSION}-${ENV}-${DATE}
docker logout ${REGISTRY}
docker compose up -d
docker compose up -d service_name
docker compose up -d --build
docker compose up -d --force-recreate
docker compose down
docker compose down --volumes
docker compose stop
docker compose ps
docker compose logs -f
docker compose logs -f service_name
docker compose restart
docker compose restart service_name
docker compose exec service_name sh
docker system prune
docker system prune -a
docker system prune --volumes
docker volume prune
docker network prune
docker images ${IMAGE_NAME} --format "{{.Tag}}" | sort -r | tail -n +6 | \
xargs -I {} docker rmi ${IMAGE_NAME}:{}
#!/bin/bash
DATE=$(date +%Y%m%d)
VERSION="v1.0.0"
ENV="prod"
IMAGE_NAME="myapp"
REGISTRY="registry.example.com"
echo "Building image..."
docker build -t ${IMAGE_NAME}:latest .
echo "Tagging image..."
docker tag ${IMAGE_NAME}:latest ${REGISTRY}/${IMAGE_NAME}:${VERSION}-${ENV}-${DATE}
echo "Pushing image..."
docker push ${REGISTRY}/${IMAGE_NAME}:${VERSION}-${ENV}-${DATE}
echo "Cleaning old versions..."
docker images ${IMAGE_NAME} --format "{{.Tag}}" | sort -r | tail -n +6 | \
xargs -I {} docker rmi ${IMAGE_NAME}:{}
echo "Done!"
#!/bin/bash
DATE=$(date +%Y%m%d)
VERSION="v1.0.0"
ENV="prod"
IMAGE_NAME="myapp"
REGISTRY="registry.example.com"
echo "Pulling latest image..."
docker pull ${REGISTRY}/${IMAGE_NAME}:${VERSION}-${ENV}-${DATE}
echo "Stopping old container..."
docker compose down
echo "Starting new services..."
docker compose up -d
echo "Checking service status..."
docker compose ps
echo "Deployment completed!"
- 在使用命令前,建议先设置好环境变量
- 命令中的变量可以根据实际需求修改
- 在生产环境使用脚本前,建议先在测试环境验证
- 重要操作建议添加日志记录和错误处理
- 定期进行资源清理和维护