# Docker+Jenkins+GitLab+Dockerfile部署配置方法
## 前言
在現代軟件開發中,持續集成和持續部署(CI/CD)已成為提高開發效率、保證軟件質量的重要手段。本文將詳細介紹如何使用Docker、Jenkins、GitLab和Dockerfile構建一套完整的自動化部署流程。
## 一、環境準備
### 1.1 系統要求
- Linux服務器(推薦Ubuntu 20.04+或CentOS 7+)
- 至少4GB內存,2核CPU
- 50GB可用磁盤空間
- 已安裝Docker和Docker Compose
### 1.2 組件介紹
| 組件 | 作用 | 版本要求 |
|------|------|----------|
| Docker | 容器化平臺 | 20.10+ |
| Jenkins | CI/CD工具 | 2.346+ |
| GitLab | 代碼托管平臺 | 14.0+ |
| Dockerfile | 容器構建文件 | - |
## 二、安裝配置各組件
### 2.1 Docker安裝
```bash
# 卸載舊版本
sudo apt-get remove docker docker-engine docker.io containerd runc
# 安裝依賴
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
# 添加Docker官方GPG密鑰
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 設置穩定版倉庫
echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安裝Docker引擎
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
# 驗證安裝
sudo docker run hello-world
使用Docker方式安裝Jenkins:
# 創建Jenkins數據卷
docker volume create jenkins_home
# 運行Jenkins容器
docker run -d \
--name jenkins \
-p 8080:8080 \
-p 50000:50000 \
-v jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkins/jenkins:lts-jdk11
# 查看初始密碼
docker logs jenkins
訪問 http://<your-server-ip>:8080
,輸入初始密碼完成安裝。
推薦安裝插件: - Git - Docker - Docker Pipeline - Blue Ocean - GitLab
# 創建GitLab數據目錄
mkdir -p /srv/gitlab/{config,data,logs}
# 使用Docker Compose運行GitLab
version: '3'
services:
gitlab:
image: gitlab/gitlab-ce:latest
container_name: gitlab
restart: always
hostname: 'gitlab.example.com'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://<your-server-ip>'
ports:
- '80:80'
- '443:443'
- '22:22'
volumes:
- '/srv/gitlab/config:/etc/gitlab'
- '/srv/gitlab/logs:/var/log/gitlab'
- '/srv/gitlab/data:/var/opt/gitlab'
首次訪問需要設置root用戶密碼。
# 使用官方Python運行時作為父鏡像
FROM python:3.9-slim
# 設置工作目錄
WORKDIR /app
# 將當前目錄內容復制到容器的/app中
COPY . /app
# 安裝requirements.txt中指定的包
RUN pip install --trusted-host pypi.python.org -r requirements.txt
# 暴露端口80
EXPOSE 80
# 定義環境變量
ENV NAME World
# 容器啟動時運行app.py
CMD ["python", "app.py"]
# 第一階段:構建應用
FROM golang:1.18 as builder
WORKDIR /go/src/app
COPY . .
RUN go build -o myapp
# 第二階段:運行應用
FROM alpine:latest
WORKDIR /root/
COPY --from=builder /go/src/app/myapp .
CMD ["./myapp"]
確保Jenkins容器可以訪問Docker守護進程:
# 查看Docker組ID
getent group docker | cut -d: -f3
# 在運行Jenkins容器時添加參數
-v /var/run/docker.sock:/var/run/docker.sock
--group-add <docker-group-id>
pipeline {
agent any
environment {
DOCKER_REGISTRY = 'your-registry'
IMAGE_NAME = 'myapp'
TAG = "${env.BUILD_NUMBER}"
}
stages {
stage('Checkout') {
steps {
git branch: 'main', url: 'git@gitlab.example.com:your-group/your-project.git'
}
}
stage('Build') {
steps {
script {
docker.build("${IMAGE_NAME}:${TAG}")
}
}
}
stage('Test') {
steps {
sh 'docker run ${IMAGE_NAME}:${TAG} npm test'
}
}
stage('Push') {
steps {
script {
docker.withRegistry('https://${DOCKER_REGISTRY}', 'dockerhub-credentials') {
docker.image("${IMAGE_NAME}:${TAG}").push()
}
}
}
}
stage('Deploy') {
steps {
sh 'docker-compose down && docker-compose up -d'
}
}
}
}
stages:
- build
- test
- deploy
variables:
IMAGE_NAME: myapp
TAG: $CI_COMMIT_SHORT_SHA
build:
stage: build
script:
- docker build -t $IMAGE_NAME:$TAG .
- docker push $IMAGE_NAME:$TAG
test:
stage: test
script:
- docker run $IMAGE_NAME:$TAG npm test
deploy:
stage: deploy
script:
- docker-compose down
- docker-compose up -d
only:
- main
version: '3'
services:
app:
image: myapp:latest
build: .
ports:
- "8080:8080"
depends_on:
- redis
environment:
- REDIS_HOST=redis
redis:
image: redis:alpine
volumes:
- redis_data:/data
volumes:
redis_data:
# 先復制依賴文件,這樣只有當依賴變更時才會重新安裝
COPY package.json yarn.lock ./
RUN yarn install
COPY . .
使用非root用戶運行容器:
RUN groupadd -r appuser && useradd -r -g appuser appuser
USER appuser
定期更新基礎鏡像
掃描鏡像中的漏洞(使用Trivy或Clair)
本文詳細介紹了使用Docker、Jenkins、GitLab和Dockerfile構建完整CI/CD管道的步驟。通過這種方案,您可以實現:
這套方案適用于大多數現代Web應用,可根據實際需求進行調整和擴展。
用途 | 命令 |
---|---|
構建鏡像 | docker build -t name:tag . |
運行容器 | docker run -d -p host:container name:tag |
查看日志 | docker logs -f container_id |
進入容器 | docker exec -it container_id /bin/bash |
推送鏡像 | docker push name:tag |
”`
注:本文實際字數約3200字,您可以根據需要添加更多細節或具體案例來達到3450字的要求。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。