1. 增加docker yum源
1 2 3
| yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum makecache fast
|
2. 安装docker
yum list docker-ce --showduplicates | sort -r #查看所有有效的 docker-ce 的版本
得到类似如下列表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| docker-ce.x86_64 2:18.09.0.ce-0.4.tp4.el7 docker-ce-test docker-ce.x86_64 2:18.09.0.ce-0.3.tp3.el7 docker-ce-test docker-ce.x86_64 2:18.09.0.ce-0.0.tp0.el7 docker-ce-test docker-ce.x86_64 18.06.3.ce-3.el7 docker-ce-test docker-ce.x86_64 18.06.3.ce-3.el7 docker-ce-stable docker-ce.x86_64 18.06.3.ce-3.el7 docker-ce-edge docker-ce.x86_64 18.06.2.ce-3.el7 docker-ce-test docker-ce.x86_64 18.06.2.ce-3.el7 docker-ce-stable docker-ce.x86_64 18.06.2.ce-3.el7 docker-ce-edge docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-test docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-stable docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-edge docker-ce.x86_64 18.06.1.ce-3.el7 @docker-ce-edge docker-ce.x86_64 18.06.1.ce-2.2.rc2.el7 docker-ce-test docker-ce.x86_64 18.06.1.ce-2.1.rc1.el7 docker-ce-test docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-test docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-stable docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-edge docker-ce.x86_64 18.06.0.ce-2.3.rc3.el7 docker-ce-test docker-ce.x86_64 18.06.0.ce-2.2.rc2.el7 docker-ce-test docker-ce.x86_64 18.06.0.ce-2.1.rc1.el7 docker-ce-test docker-ce.x86_64 18.05.0.ce-3.el7.centos docker-ce-test docker-ce.x86_64 18.05.0.ce-3.el7.centos docker-ce-edge docker-ce.x86_64 18.05.0.ce-2.1.rc1.el7.centos docker-ce-test
|
yum install docker-ce-18.06.1.ce #安装最新稳定版本
3. 自定义docker配置
默认docker将目录配置到/var/lib/docker目录下,镜像也是访问国外的仓库,我们可以进行配置。
这里我把docker目录配置为/usr/docker,镜像服务使用阿里的:https://cr.console.aliyun.com
1 2
| mkdir /etc/docker vi /etc/docker/daemon.json
|
写入以下内容
1 2 3 4
| { "graph":"/usr/docker", "registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"] }
|
4. 启动docker**
systemctl start docker
查看docker信息,可以看到Docker Root Dir 和 RegistryMirrors 都变成了 /etc/docker/daemon.json 中配置的内容了
docker info
常用docker命令:
docker ps #正在运行的容器
docker ps -a #所有的容器
docker start [NAME]/[CONTAINER ID] #启动容器
docker stop [NAME]/[CONTAINER ID] #停止容器
docker rm [NAME]/[CONTAINER ID] #删除容器
docker update --restart=always [NAME]/[CONTAINER ID] #容器自启
docker exec -it [CONTAINER ID] /bin/bash # 已运行容器进入交互模式
5. 安装gitlab
下载镜像
获取gitlab版本:访问https://hub.docker.com,搜索 Gitlab-ce。 ps: Gitlab Community Edition汉化版,无docker镜像
docker pull gitlab/gitlab-ce:11.10.1-ce.0 #下载镜像,镜像有1g多,需要等待一段时间
数据持久化保存
因为容器的数据是不能持久化保存的。所以我们需要用 docker volume 的方式将存储的数据映射到操作系统的目录中来。这样就算运行的容器崩溃,我们重新启动一个新的容器,原来容器中的数据还是不会丢失
这里使用目录 /usr/gitlab 来保存 gitlab 容器中的数据
运行 gitlab
1 2 3 4 5 6 7 8
| docker run --name gitlab -d \ --publish 10080:10080 --publish 10022:22 \ --env GITLAB_OMNIBUS_CONFIG="external_url 'http://服务器ip:10080/'; gitlab_rails['gitlab_shell_ssh_port'] = 10022;" \ --restart unless-stopped \ --volume /usr/gitlab/config:/etc/gitlab \ --volume /usr/gitlab/logs:/var/log/gitlab \ --volume /usr/gitlab/data:/var/opt/gitlab \ gitlab/gitlab-ce:11.10.1-ce.0
|
这里把主机的10080、10022映射到容器,这样我们可以用10080端口访问web页面,用10022进行clone操作。这里要关闭selinux,开放防火墙的10080、10022端口。
同时使用 –volume /usr/gitlab/config:/etc/gitlab 、 –volume /usr/gitlab/logs:/var/log/gitlab 、 –volume /usr/gitlab/data:/var/opt/gitlab 这三个参数将 gitlab 的配置、数据和日志持久化到实体主机文件系统上来。
修改run参数:停止所有容器,停止docker,进入docker目录/containers/容器id,修改config.v2.json、hostconfig.json
去除不需要的80、443端口监听:修改config.v2.json中的 ExposedPorts ,删除 “443/tcp”:{},”80/tcp”:{}
修改 gtilab.rb 配置文件,下边是我自己的配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| external_url 'http://服务器ip/域名:10080' gitlab_rails['time_zone'] = 'Asia/Shanghai' gitlab_rails['gitlab_email_enabled'] = true gitlab_rails['gitlab_email_from'] = 'xxx@aliyun.com' gitlab_rails['gitlab_email_display_name'] = 'GitLab' gitlab_rails['gitlab_email_reply_to'] = 'xxx@aliyun.com' gitlab_rails['gitlab_shell_ssh_port'] = 10022 gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.aliyun.com" gitlab_rails['smtp_port'] = 25 gitlab_rails['smtp_user_name'] = "xxx@aliyun.com" gitlab_rails['smtp_password'] = "********" gitlab_rails['smtp_domain'] = "smtp.aliyun.com" gitlab_rails['smtp_authentication'] = "login" gitlab_rails['smtp_enable_starttls_auto'] = true user['git_user_name'] = "GitLab" user['git_user_email'] = "xxx@aliyun.com" unicorn['worker_timeout'] = 60 unicorn['worker_processes'] = 2 unicorn['worker_memory_limit_min'] = "100 * 1 << 20" unicorn['worker_memory_limit_max'] = "200 * 1 << 20" sidekiq['concurrency'] = 10 postgresql['shared_buffers'] = "128MB" postgresql['max_worker_processes'] = 4 nginx['listen_port'] = 10080
|
6. 访问 gitlab web 页面
打开浏览器访问 http://服务器id:10080 进入 gitlab 界面,这一步可能需要等待一段时间,等待 gitlab 启动完成,期间可能会出现502页面,一般没事,多等一会儿就好了
首次访问会让我们设置root账户密码,至于其他操作这里就不介绍了。
这里说一下,如果Clone with SSH的链接的类似 git@28085bf9f5c8:xxx/xxxx.git 的地址,需要改成 git@服务器ip:10022/xxx/xxxx.git
还有,Clone前要先配置 SSH Keys,这里推荐一种方法,使用git bash运行 ssh-keygen
,生成id_rsa私钥和id_ras.pub公钥,把id_rsa.pub的内容复制到gitlab上,
再打开TortoiseGit的PuTTYgen,点击 Load
,加载id_rsa之后,点击Save private Key
保存成ppk,之后就可以使用TortoiseGit加载保存的ppk文件进行后续操作了
像克隆操作,使用的url例如 ssh://git@服务器ip:10022/xxx/xxxx.git