当前位置:首页 > 技术 > 正文内容

CentOS系统Docker容器部署GitLab教程

访客 技术 2026年6月28日 1

一、环境准备

本文实验环境为4核8G内存的CentOS 7.9.2009操作系统,需提前配置阿里云yum镜像源,并执行以下准备操作:

  • 安装EPEL扩展源:yum -y install epel-release
  • 禁用SELinux安全机制
  • 关闭系统防火墙

二、Docker引擎部署

首先安装Docker运行所需的依赖包:

[root@server ~]# yum -y install yum-utils device-mapper-persistent-data lvm2

添加Docker官方镜像仓库,可选择阿里云镜像源提升下载速度:

[root@server ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

查看仓库中可供安装的Docker版本:

[root@server ~]# yum list docker-ce --showduplicates | sort -r

选择特定版本进行安装(生产环境建议锁定版本号):

[root@server ~]# yum -y install docker-ce-26.1.4-1.el7

启动Docker服务并设置为开机自启:

[root@server ~]# systemctl start docker
[root@server ~]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

验证Docker安装版本:

[root@server ~]# docker version
Client: Docker Engine - Community
 Version:           26.1.4
 API version:       1.45
 Go version:        go1.21.11
 Git commit:        5650f9b
 OS/Arch:           linux/amd64

Server: Docker Engine - Community
 Engine:
  Version:          26.1.4
  API version:      1.45 (minimum version 1.24)
  Go version:       go1.21.11
  Git commit:       de5c9cf
  OS/Arch:          linux/amd64

三、镜像加速器配置

修改Docker守护进程配置,添加国内镜像加速地址:

[root@server ~]# cat > /etc/docker/daemon.json << 'EOF'
{
    "registry-mirrors": [
        "https://docker.m.daocloud.io",
        "https://dockerproxy.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://docker.nju.edu.cn"
    ]
}
EOF

重新加载配置并重启Docker服务:

[root@server ~]# systemctl daemon-reload
[root@server ~]# systemctl restart docker

常用国内加速器对比

服务商加速地址支持范围访问限制
DaoCloudhttps://docker.m.daocloud.ioDocker Hub、GCR、K8S、GHCR免费公开
网易https://hub-mirror.c.163.comDocker Hub免费公开
上海交大https://docker.mirrors.sjtug.sjtu.edu.cnDocker Hub、GCR无限制
南京大学https://docker.nju.edu.cnDocker Hub、GCR、GHCR免费公开
阿里云https://<code>.mirror.aliyuncs.comDocker Hub需账号获取

四、GitLab容器部署

设置GitLab数据存储根目录:

[root@server ~]# export GITLAB_ROOT=/gitlab-data
[root@server ~]# mkdir -p $GITLAB_ROOT/{config,logs,data}

执行GitLab容器启动命令:

[root@server ~]# docker run -d \
  --hostname 192.168.142.105 \
  --publish 8443:443 --publish 8080:80 \
  --name gitlab-instance \
  --restart always \
  --volume $GITLAB_ROOT/config:/etc/gitlab \
  --volume $GITLAB_ROOT/logs:/var/log/gitlab \
  --volume $GITLAB_ROOT/data:/var/opt/gitlab \
  --shm-size 256m \
  gitlab/gitlab-ce:16.11.0-ce.0

查看镜像拉取及容器运行状态:

[root@server ~]# docker images
REPOSITORY         TAG          IMAGE ID       CREATED        SIZE
gitlab/gitlab-ce   16.11.0-ce.0 7d0bcc8a3e52   2 weeks ago    2.65GB

[root@server ~]# docker ps -a
CONTAINER ID   IMAGE                       COMMAND                  CREATED        STATUS                    PORTS                                                                              NAMES
a3f8d2c1e4b6   gitlab/gitlab-ce:16.11.0-ce.0   "/assets/wrapper"       3 minutes ago   Up 2 minutes (healthy)   0.0.0.0:8080->80/tcp, :::8080->80/tcp, 0.0.0.0:8443->443/tcp, :::8443->443/tcp   gitlab-instance

获取初始管理员密码:

[root@server ~]# docker exec -it gitlab-instance grep 'Password:' /etc/gitlab/initial_root_password
Password: 8hX3kP9mNqW2vL5cR7tY6uE4sA1bF0gD3iO2qP8rS4jV7wX=

五、关键参数解析

容器运行模式

--detach:以守护进程模式在后台运行容器,不阻塞当前终端会话。

--restart always:配置容器自动重启策略,当Docker服务重启或容器异常退出时自动恢复运行。

网络配置

--hostname:设置容器内部主机名。本例设为IP地址192.168.142.105,生产环境推荐使用域名以便后期迁移维护。

--publish:端口映射将容器内服务端口暴露至宿主机。本例映射8080到HTTP 80端口,8443到HTTPS 443端口。注意确保宿主机对应端口未被占用。

外部访问地址配置

如需通过域名访问GitLab,可通过环境变量指定:

--env GITLAB_OMNIBUS_CONFIG="external_url 'http://gitlab.mydomain.com'"

需确保域名能正确解析至宿主机IP,可通过hosts文件或内网DNS服务器配置。

数据卷持久化

通过volume参数将容器内关键目录映射至宿主机,实现数据持久化:

  • config目录:存储GitLab配置文件(/etc/gitlab)
  • logs目录:存储运行日志(/var/log/gitlab)
  • data目录:存储仓库数据、数据库文件(/var/opt/gitlab)

共享内存配置

--shm-size 256m:设置容器共享内存大小。GitLab内置的PostgreSQL数据库和Redis缓存服务依赖共享内存,Docker默认的64MB可能导致运行异常或性能下降,建议设置为256MB以上。

版本选择说明

生产环境强烈建议指定具体版本号,避免因镜像更新导致兼容性问题。可访问Docker Hub查看可用版本标签。

六、访问验证

容器完全启动约需3-5分钟时间,可通过以下命令查看启动进度:

[root@server ~]# docker logs -f gitlab-instance

启动完成后,通过浏览器访问 http://192.168.142.105:8080 或配置的域名,使用root用户名及初始密码登录管理后台。

标签: Docker

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。