1. 增加docker yum源

       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 的版本

      得到如下列表
      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

       mkdir /etc/docker
       vi /etc/docker/daemon.json

      写入以下内容

       { 
       "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] #删除容器
    1. 安装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

        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 配置文件,下边是我自己的配置:

        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
    2. 访问 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