更新系统并安装必要依赖,添加Docker官方仓库后安装Docker CE:
sudo yum update -y
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker && sudo systemctl enable docker
验证Docker安装:
docker --version # 应输出类似"Docker version 24.xx.xx"的版本信息
若需使用Docker Compose管理容器,可通过以下命令安装:
sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
验证安装:
docker-compose --version # 应输出类似"docker-compose version v2.24.5"的信息
GitLab的数据(配置、日志、仓库)需持久化存储,避免容器删除后数据丢失。创建专用目录:
sudo mkdir -p /opt/gitlab/{config,logs,data}
sudo chown -R $USER:$USER /opt/gitlab # 授予当前用户读写权限
从Docker Hub拉取GitLab Community Edition(CE)最新镜像:
docker pull gitlab/gitlab-ce:latest
若需指定版本(如17.0.0),可将latest替换为对应版本号(如gitlab/gitlab-ce:17.0.0)。
创建docker-compose.yml文件(或在命令行直接运行docker run),配置端口映射、卷挂载及环境变量:
version: '3.8'
services:
gitlab:
image: gitlab/gitlab-ce:latest
container_name: gitlab
restart: always # 容器退出时自动重启
hostname: 'gitlab.example.com' # 替换为你的域名或公网IP
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://gitlab.example.com' # 外部访问URL(需与hostname一致)
ports:
- '80:80' # HTTP端口
- '443:443' # HTTPS端口(需配置SSL证书后启用)
- '22:22' # SSH端口(默认22,若冲突可修改为其他端口)
volumes:
- '/opt/gitlab/config:/etc/gitlab' # 配置文件目录
- '/opt/gitlab/logs:/var/log/gitlab' # 日志文件目录
- '/opt/gitlab/data:/var/opt/gitlab' # 数据目录(仓库、数据库等)
docker run -d \
--name gitlab \
--restart always \
--hostname gitlab.example.com \
-p 80:80 -p 443:443 -p 22:22 \
-v /opt/gitlab/config:/etc/gitlab \
-v /opt/gitlab/logs:/var/log/gitlab \
-v /opt/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
启动容器后,等待1-2分钟(GitLab初始化需时间),在浏览器中访问http://gitlab.example.com(替换为你的实际域名/IP)。首次访问需设置root用户初始密码(密码长度需≥8位),设置完成后使用root账号登录。
若主机80、443或22端口已被占用,可修改docker-compose.yml中的ports配置(如将80:80改为8080:80),或停止占用端口的服务:
sudo netstat -tulnp | grep :80 # 查看80端口占用进程
sudo systemctl stop nginx # 示例:停止nginx服务
若访问时出现502错误,可能是GitLab初始化未完成。可通过以下命令查看容器日志,确认初始化进度:
docker logs -f gitlab # 实时查看gitlab容器日志
若日志显示“Initialization complete”,说明初始化完成,可刷新页面重试。
若需修改GitLab配置(如external_url、SSH端口),可编辑容器内的/etc/gitlab/gitlab.rb文件:
docker exec -it gitlab /bin/bash # 进入gitlab容器
vim /etc/gitlab/gitlab.rb # 编辑配置文件(如修改external_url)
exit # 退出容器
docker exec -it gitlab gitlab-ctl reconfigure # 重新加载配置
docker exec -it gitlab gitlab-ctl restart # 重启gitlab服务
external_url为https://gitlab.example.com,并配置Nginx反向代理(或使用GitLab内置的Nginx);docker-compose.yml中添加mem_limit、cpu_shares等参数,限制GitLab容器使用的资源(如mem_limit: 4g);/opt/gitlab/data目录(包含仓库、数据库等核心数据),可使用rsync或tar命令;通过以上步骤,即可在CentOS上完成GitLab的容器化部署。容器化部署具有轻量、灵活、易迁移的特点,适合快速搭建GitLab实例或测试环境。生产环境中建议结合Kubernetes或Docker Swarm进行编排,提升可用性。