您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。