docker中安装gitlab,并完成gitlab容器迁移包括相关数据备份

  1. docker拉取gitlab

    docker pull twang2218/gitlab-ce-zh
    
  2. 启动容器

    docker run -d -p 8443:443 -p 8090:80 -p 8022:22 --restart always --name gitlab -v /usr/local/gitlab/etc:/etc/gitlab -v /usr/local/gitlab/log:/var/log/gitlab -v /usr/local/gitlab/data:/var/opt/gitlab --privileged=true twang2218/gitlab-ce-zh
    
    docker run 
    -d                #后台运行,全称:detach
    -p 8443:443      #将容器内部端口向外映射
    -p 8090:80       #将容器内80端口映射至宿主机8090端口,这是访问gitlab的端口
    -p 8022:22       #将容器内22端口映射至宿主机8022端口,这是访问ssh的端口
    --restart always #容器自启动
    --name gitlab    #设置容器名称为gitlab
    -v /usr/local/gitlab/etc:/etc/gitlab    #将容器/etc/gitlab目录挂载到宿主机/usr/local/gitlab/etc目录下,若宿主机内此目录不存在将会自动创建
    -v /usr/local/gitlab/log:/var/log/gitlab    #与上面一样
    -v /usr/local/gitlab/data:/var/opt/gitlab   #与上面一样
    --privileged=true         #让容器获取宿主机root权限
    twang2218/gitlab-ce-zh    #镜像的名称,这里也可以写镜像ID
    
  3. 更改配置信息

    // 添加-a 参数,把启动的,没有启动的都列出来
    docker ps
    // 进入容器
    docker exec -it gitlab bash
    //先进入到gitlab目录
    cd /etc/gitlab   
    //编辑gitlab.rb文件  
    vim gitlab.rb(拉取下来的镜像启动后的容器内部本身的gitlab.rb文件信息都是注释的,放开即可)
    // 在gitlab创建项目时候http地址的host(不用添加端口)
    external_url 'http://xx.xx.xx.xx'
    
    //配置ssh协议所使用的访问地址和端口
    gitlab_rails['gitlab_ssh_host'] = '192.168.XX.XX' //和上一个IP输入的一样
    gitlab_rails['gitlab_shell_ssh_port'] = 8022 // 此端口是run时22端口映射的8022端口
    :wq //保存配置文件并退出
    
    // 文件路径 /opt/gitlab/embedded/service/gitlab-rails/config
    //先进入到config目录下
    cd /opt/gitlab/embedded/service/gitlab-rails/config
    //打开编辑gitlab.yml文件
    vim gitlab.yml
    //修改host 与上面.rb文件修改的一致
    // 修改port 为8090
    

    docker中安装gitlab,并完成gitlab容器迁移包括相关数据备份_第1张图片

  4. 重新启动

    // 容器内重启
    gitlab-ctl restart
    // 容器外重启
    docker restart gitlab
    
  5. 服务器开放端口

    开放端口:8090
    
  6. 测试运行

    在浏览器地址里输入 http://Ip:8090
    
    //容器外停止
    docker stop gitlab   // 这里的gitlab 就是我们上一步docker run 当中使用--name 配置的名字
    //容器外重启
    docker restart gitlab
    //进入容器命令行
    docker exec -it gitlab bash
    //容器中应用配置,让修改后的配置生效
    gitlab-ctl reconfigure
    //容器中重启服务
    gitlab-ctl restart
    
    
  7. 将这个gitlab容器迁移到另外一个服务器上,并且把数据备份

    • 查看容器名称和容器ID

      docker ps
      
    • 查看容器对应的挂载目录

      docker inspect gitlab | grep Mount -A 20
      docker inspect 641d16e052b3 | grep Mount -A 20
      
    • 得到宿主机与容器的映射关系,方便我们在宿主机内更改配置文件

      docker中安装gitlab,并完成gitlab容器迁移包括相关数据备份_第2张图片

    • 进入容器并将数据备份

      //进入容器
      docker exec -it gitlab /bin/bash
      //进入目录
      cd /var/opt/gitlab/backups
      // 生成数据备份文件,生成的文件是.tar文件,类似1598965868_2020_09_01_13.3.2_gitlab_backup.tar
      gitlab-rake gitlab:backup:create
      // 上面的备份命令并不会把配置额文件一起备份,需要我们手动的将配置文件给保存下来
      // 进入/etc/gitlab,找到以下文件
      gitlab.rb
      gitlab-secrets.json
      // 其实可以退出到宿主机,然后找到其映射文件目录里面再继续找到这两个文件,并将其进行备份,也可以使用docker cp命令将需要备份的文件给保存起来
      
      //数据备份完成后要不要把当前容器给停止了,就看你的选择了
      
    • 进入新的服务器,确保新服务器上已经安装好了docker

    • 在上一个服务器中查看gitlab容器所用镜像的版本,确保两个服务器docker中使用的gitlab镜像是一致的

      方案一
      使用docker images 查看镜像名称和版本信息然后去拉取
      或者使用 docker exec gitlab gitlab-rake gitlab:env:info 查看gitlab版本信息
      方案二
      在服务器1中把gitlab容器导出为镜像的tar文件,然后再在服务器2中给引入,不过后续处理可能会存在问题
      
    • 这里就继续docker拉取了

      docker pull twang2218/gitlab-ce-zh
      
    • 创建挂载目录

      mkdir -p /data/gitlab/config
      mkdir -p /data/gitlab/logs
      mkdir -p /data/gitlab/data
      
      如果你不想挂载那么多目录的话,可以只创建/data/gitlab目录
      
    • 启动容器

      docker run --detach \
      --privileged=true \
      --hostname 192.168.201.129 \
      --publish 443:443 --publish 80:80 --publish 2222:22 \
      --name gitlab --restart always \
      --volume /data/gitlab/config:/etc/gitlab \
      --volume /data/gitlab/logs:/var/log/gitlab \
      --volume /data/gitlab/data:/var/opt/gitlab 3494787883fd
      
      --detach 指定容器后台运行
      
      --privileged=true 使用--privileged=true参数可以给Docker容器添加宿主机的root权限。这样,容器就可以在宿主机中获取更高的权限,包括读写文件权限。
      
      --hostname 指定主机地址
      
      --publish 指定端口映射,冒号前代表宿主机的端口,冒号后代表容器的端口
      
      --name 容器的名字
      
      --restart always 总是重启
      
      --volume 指定数据卷
      
      最后那一串东西是docker image的id 用来指定使用那个镜像,也可以使用镜像名称加版本号
      
      ps:如果启动失败的话,可以查看报错日志
      docker logs -f gitlab 
      
    • 启动容器后就是把刚才的备份文件放到对应的目录,看一下自己容器启动时候的映射目录

      上传前面的备份文件和配置文件到对应目录
      /data/gitlab/data/backups
      /data/gitlab/config
       
      将备份文件权限修改为777,不然可能会报权限不足导致恢复备份失败
      chmod 777 1598965868_2020_09_01_13.3.2_gitlab_backup.tar
      
    • 进入容器,先停止相关数据连接服务,加载备份文件

      进入容器
      docker exec -it gitlab /bin/bash
       
      停止相关数据连接服务
      gitlab-ctl stop unicorn
      gitlab-ctl stop sidekiq
       
      进入目录/var/opt/gitlab/backups,因为备份在这个目录下
      cd /var/opt/gitlab/backups
       
      加载备份文件,注意等号后面只需到文件编号,不用整个文件名
      gitlab-rake gitlab:backup:restore BACKUP=1598965868_2020_09_01_13.3.2
       
      等待备份文件加载完成即可,中间会出现几次交互,大概意思就是加载备份会删除现有数据,是否确定,都输入yes就可以
       
      重新加载配置
      gitlab-ctl reconfigure
      退出容器
      exit
      开放端口8090
      查看容器运行状态
      docker ps
      浏览器中测试
      如果不行就在容器外重启
      docker restart gitlab
      
    • 处理gitlab磁盘IO 100%!

      进入配置文件gitlab.rb中进行修改
      
      unicorn['worker_timeout'] = 60
      unicorn['worker_processes'] = 2
      unicorn['worker_memory_limit_min'] = "100 * 1 << 20"
      unicorn['worker_memory_limit_max'] = "250 * 1 << 20"
      sidekiq['concurrency'] = 8
      postgresql['shared_buffers'] = "128MB"
      postgresql['max_worker_processes'] = 4
      prometheus['enable'] = false
      
      重启gitlab
      

你可能感兴趣的:(docker应用,docker,gitlab,容器)