1. 准备基础环境
在Linux服务器(如CentOS、Ubuntu)上安装Docker,确保系统支持容器运行。以CentOS为例,步骤如下:
sudo yum update -ysudo yum install -y yum-utils device-mapper-persistent-data lvm2sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.reposudo yum install -y docker-ce docker-ce-cli containerd.iosudo systemctl start docker && sudo systemctl enable docker。2. 编写Dockerfile定义应用环境
Dockerfile是自动化部署的核心,用于描述应用的运行环境(基础镜像、依赖、配置、启动命令)。例如:
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
FROM node:18-alpine
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["python", "app.py"]
```。
3. 构建与测试Docker镜像
在Dockerfile所在目录执行构建命令,生成镜像:
docker build -t your-app-name:latest .
构建完成后,运行容器测试应用是否正常:
docker run -d -p 8080:8080 --name your-app-container your-app-name:latest
通过docker ps查看容器状态,访问http://服务器IP:8080验证应用功能。
4. 使用CI/CD工具实现自动化触发
通过Jenkins、GitHub Actions等工具,将代码提交与镜像构建、部署流程绑定:
Jenkins Pipeline示例:
Jenkinsfile中定义流程:pipeline {
agent any
stages {
stage('Checkout') {
steps { git 'https://github.com/your-repo/your-app.git' }
}
stage('Build Image') {
steps { sh 'docker build -t your-app-name:${GIT_COMMIT} .' }
}
stage('Push Image') {
steps { sh 'docker login -u your-dockerhub-username -p your-password && docker push your-app-name:${GIT_COMMIT}' }
}
stage('Deploy') {
steps { sh 'ssh user@your-server "docker pull your-app-name:${GIT_COMMIT} && docker stop your-app-container || true && docker rm your-app-container || true && docker run -d -p 8080:8080 --name your-app-container your-app-name:${GIT_COMMIT}"' }
}
}
}
post-receive),当代码推送到指定分支时自动触发Pipeline。GitHub Actions示例:
在项目根目录创建.github/workflows/deploy.yml文件:
name: Deploy to Docker
on:
push:
branches: [ main ]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: your-dockerhub-username/your-app-name:latest
- name: Deploy to server
run: |
ssh user@your-server 'bash -s' << 'EOF'
docker pull your-dockerhub-username/your-app-name:latest
docker stop your-app-container || true
docker rm your-app-container || true
docker run -d -p 8080:8080 --name your-app-container your-dockerhub-username/your-app-name:latest
EOF
当代码推送到main分支时,GitHub Actions会自动构建镜像并部署到服务器。
5. 可选:使用Docker Compose编排多容器应用
若应用依赖多个服务(如Web+数据库+缓存),可使用docker-compose.yml定义服务关系,简化部署:
version: '3.8'
services:
web:
build: .
ports:
- "8080:8080"
depends_on:
- db
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: your_db
MYSQL_USER: your_user
MYSQL_PASSWORD: your_password
volumes:
- db_data:/var/lib/mysql
redis:
image: redis:alpine
volumes:
db_data:
部署时,只需在docker-compose.yml所在目录执行:
docker-compose up -d
即可启动所有服务。
6. 安全与管理优化
root用户运行容器,通过--user参数指定非root用户;docker logs -f your-container-name查看实时日志,或集成ELK(Elasticsearch+Logstash+Kibana)实现集中日志分析;docker stats查看容器资源占用,或集成Prometheus+Grafana实现性能监控;docker scan命令),避免使用未经验证的第三方镜像。