上一篇 .Net & Docker(一)在Docker容器上运行.Net Core API 我们已经知道了Docker的一些基本用法,以及成功的将.NET Core Web API 运行在一个Docker 容器中。我们此次的目标是用GitLab CI 做到自动部署API到容器中,所以接下来我们需要一个GitLab环境。

我会向大家演示一下如何在5分钟之内用Docker部署一套GitLab环境,以及几个我在实施过程中踩过的坑。

Gitlab的安装与配置

 

sudo docker run --detach \    
--hostname 127.0.0.1 \    
--publish 443:443 --publish 80:80 --publish 2222:22 \    
--name gitlab \    
--restart always \    
--volume /srv/gitlab/config:/etc/gitlab:Z \    
--volume /srv/gitlab/logs:/var/log/gitlab:Z \   
--volume /srv/gitlab/data:/var/opt/gitlab:Z \    
gitlab/gitlab-ce:latest

我们用到的参数列表: docker run 的参数配置可以查看官方文档。

在运行安装脚本之前,我们所使用的volume路径需要授权给docker。

可能会遇到的问题

我在安装及配置的时候遇到了两个问题,可能有人也会遇到。

  1. GitLab 一直在重启(跑不起来)
  2. SSH连接不上

SSH连接的问题我们下面有一小节会讲,这里我简单说一下第一个问题。当我运行脚本之后通过 docker ps 查看当前正在运行的容里面并没有看到 gitlab这个容器,通过 ps -a显示所有容器时发现它的状态一直是 starting 或者 restarting。 这个时候我们可以使用 docker logs 来查看当前容器的运行日志。

Preparing services... Starting services... 
/opt/gitlab/embedded/bin/runsvdir-start: line 24: ulimit: 
pending signals: cannot modify limit: Operation not permitted 
/opt/gitlab/embedded/bin/runsvdir-start: 
line 37: /proc/sys/fs/file-max: Read-only filesystem Configuring 
GitLab package... Configuring GitLab... 
=================================================================
Error executing action `run` on resource 'ruby_block[directory resource: 
/var/opt/gitlab/git-data/repositories]'
=================================================================

通过 docker logs 可以方便大家来论断错误,一切正常还好,如果一旦出现问题,新手是很懵圈的。这个时候可能通过google 查找错误日志,多数情况下都能找到正确答案,我遇到的是个权限不足的问题, 在这个链接里面有完整的讨论,解决办法就是执行下面这句命令之后就可以正常启行了。

sudo chmod 2770 /srv/gitlab/data/git-data/repositories

SSH 连接GitLab

如果对于SSH不是很了解的同学可以看看阮一峰写的两篇关于SSH原理与运用的文章,非常的不错。 我们直接开始尝试用SSH连接我们本地的gitlab。

 

首先我们需要得到一个SSH Key,输入

cat ~/.ssh/id_rsa.pub

如果出现 ssh-rsa打头的字符,说明本地已经有了SSH Key那我们可以直接拿来用,如果没有则需要我们自己创建一个SSH Key。

创建SSH Key

输入以下命令创建一个SSH Key。

ssh-keygen -t rsa -C "your.email@example.com" -b 4096

完成之后可以再输入 上面的cat命令 或者pbcopy直接复制生成的ssh key。

pbcopy < ~/.ssh/id_rsa.pub

在GitLab中账号-》设置中找到 SSH Keys中添加这个Key即可。

SSH 连接 2222 端口

正常情况下你已经可以通过git命令来连接我们部署的gitlab,但这里不一样的是我们把容器的 22端口映射到了 host的 2222上,我们需要指定端口来进连接。

ssh -p 2222 git@127.0.0.1

同时还需要更改GitLab的配置文件中的 ssh端口,否则GitLab中为我们生成的项目连接地址会连接不上。/gitlab/config/gitlab.rb

gitlab_rails['gitlab_shell_ssh_port'] = 2222

更改完ssh端口之后重启gitlab容器,之后我们的项目 ssh连接址会变为:

ssh://git@127.0.0.1:2222/jesse/webapi.git

到这里我们已经完成了GitLab的部署,可以将我们之前的net core api 项目提交到代码库,都是一些常规的操作,这里就不做过多的说明了。

今天这一篇偏操作性质,主要我们需要这样一套环境来完成整个练习。了解SSH的原理比较重要。后面一篇我们将开始实践GitLab CI Runner当有代码提交的时候会自动编译.NET CORE 并构建Docker镜像并运行容器 。

分类: 技术随笔

1 条评论

kasbio · 2018年8月23日 上午9:35

不断重启的情况下通常都是修改完配置文件然后用docker restart 就会重启。
`docker exec -t gitlab gitlab-ctl reconfigure`
`docker exec -t gitlab gitlab-ctl restart `执行这两句命令在容器里面gitlab重读配置文件以及重启就好了。
修改权限试了,还是会无限重启

发表评论

电子邮件地址不会被公开。 必填项已用*标注