zoukankan      html  css  js  c++  java
  • 使用docker搭建gitlab服务器

    简单记录Docker的使用和GitLab的搭建


    ## Docker基础篇 ### 没有sudo权限 ### 安装docker ### 基础命令 ### docker安装mysql和配置 ### Dockerfile常用命令 ### 制作镜像 ### 发布镜像 ### 容器网络 ### Docker Compose ### Swarm模式 集群
    ## 正式搭建GitLab ### 系统环境 ### 安装gitlab ### 配置gitlab.rb文件 ### cpu跑满解决方案

    Docker基础篇

    没有sudo权限

    • su -
    • chmod u+w /etc/sudoers
    • vi /etc/sudoers
    • zrk ALL=(ALL) ALL
    • chmod u-w /etc/sudoers

    安装docker

        sudo yum install -y yum-utils device-mapper-persistent-data lvm2
        sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
        sudo yum-config-manager --enable docker-ce-edge
        sudo yum makecache fast
        sudo yum install docker-ce
        sudo service docker start
        systemctl enable docker
    

    基础命令

    • 查看版本:docker --version

    • 拉取需要的镜像:docker pull 名称(如:redis)

    • 查看本地所有镜像:docker images

    • 查询所有的容器:docker ps -a

    • 停止容器:docker stop 容器名称

    • 删除顺序,先删除容器后删除镜像

      • docker rm 容器ID
      • docker rmi 镜像ID
    • 运行一个容器:docker run [参数] 镜像名称

      • 端口映射:-p 本机端口:容器端口
      • 分离模式(在后台运行):-d
      • 名称:--name
    • 在运行的容器中执行命令:docker exec [参数] 容器名称 命令

      • 分离模式:-d
      • 展示容器输入信息STDIN:-i
      • 命令行交互模式:-t

    docker安装mysql和配置

    • sudo mkdir data/mysql/logs data/mysql/conf data/mysql/data -p

    • sudo docker pull mysql/mysql-server:5.7

    • docker run -d -p 3306:3306 --name mysql01 mysql/mysql-server

    • docker exec -it 容器名称 bash

    • 带参数安装mysql

        sudo docker run 
        --name mysql-server5.7 
        --restart always 
        -d -p 3306:3306 
        -v /home/zrk/data/mysql/data:/var/lib/mysql 
        -v /home/zrk/data/mysql/conf/my.cnf:/etc/mysql/my.cnf
        -v /home/zrk/data/mysql/logs:/logs 
        -e MYSQL_ROOT_PASSWORD=root123456 
        -e MYSQL_USER=zrk 
        -e MYSQL_PASSWORD=zrk123456
        mysql/mysql-server:5.7 
        --character-set-server=utf8 
        --collation-server=utf8_general_ci
    
    • 修改my.cnf
        [client]
        default-character-set=utf8
        
        [mysql]
        default-character-set=utf8
        
        [mysqld]
        init_connect='SET collation_connection = utf8_unicode_ci'
        init_connect='SET NAMES utf8'
        character-set-server=utf8
        collation-server=utf8_unicode_ci
        skip-character-set-client-handshake
    
    • mysql修改用户权限
        grant all privileges on *.* to 'zrk'@'%' identified by '密码' with grant option;
        flush privileges;
    

    Dockerfile常用命令

    • FROM 基于另一个镜像进行创建,或者重新创建

    • MAINTAINER 镜像维护人

    • RUN 运行命令

    • COPY 复制

    • ENTRYPOINT 定义容器入口

    • CMD 设置容器运行的默认命令和参数

    • WORKDIR 容器运行的目录

    • EXPOSE 暴露端口

    • ENV 设置环境变量

    • VOLUME 控制如何在宿主中进行存储

    制作镜像

    • 使用Vs Code的Docker插件

      • Ctrl+Shift+P
      • ADD Docker Files to Workspace
      • ASP.Net Core(选择应用平台)
      • Linux(选择Linux容器)
      • 5000(程序监听端口)
    • 修改Dockerfile文件

        FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build-env
        WORKDIR /app
    
        # Copy csproj and restore as distinct layers
        COPY *.csproj ./
        RUN dotnet restore
    
        # Copy everything else and build
        COPY . ./
        RUN dotnet publish -c Release -o out
    
        # Build runtime image
        FROM mcr.microsoft.com/dotnet/core/aspnet:2.2
        WORKDIR /app
        COPY --from=build-env /app/out .
        ENTRYPOINT ["dotnet", "DockerDemo.dll"]
    
    • docker build -t 制作镜像的名称 .

    • docker run -d -p 8080:5000 --name 容器名称 -v ${PWD}:/app 镜像名称

    制作镜像

    • docker login 登录

    • docker push 用户名/镜像名称

      • 如果镜像和用户名不一致,需要修改镜像名称:docker tag 旧名称 用户名/镜像名称
    • 访问网址,可看到发布的镜像:[https://hub.docker.com/]

    容器网络

    • Legacy Linking:使用容器名称进行连接,创建桥连接网络,容器间可以通信

      • docker run -d -p 8080:5000 --link 容器名称 镜像名称
    • 把容器添加到桥连接网络:可以创建自定义桥连接网络,网络内的容器才能互相通信

      • 创建网络:docker network create --drive bridge 网络名称
      • 加入网络:docker run -d --network=网络名称 --name 网络内的容器名称 镜像名称
      • 查询网络:docker network ls
      • 检查网络:docker network inspectr
      • 连接网络:docker network connect 网络名称 容器名称
      • 删除网络:docker network rm 网络名称
      • 断开连接:docker network disconnect 网络名称 容器名称

    Docker Compose

    • 安装

    • docker-compose build 把docker-compose.yml文件中的所有服务构建成镜像

    • docker-compose up 启动

    • docker-compose down 停止、删除,由up命令建立的所有东西

    • docker-compose logs

    • docker-compose ps

    • docker-compose start

    • docker-compose stop

    • docker-compose rm

    • docker-compose.yml例子

        version: '3'
    
        services:
            服务名称:
                build:
                    context: .
                    dockerfile: Dockerfile
                ports:
                    - '8080:5000'
                networks:
                    - 网络名称
                depens_on:
                    - '服务名称'
            
            服务名称:
                image: 镜像名称
                environment:
                    环境变量
        networks:
            网络名称:
                driver: bridge
    
    • docker-compose.yml实例
    version: '3'
    
    services:
      mysqldb:
        image: mysql/mysql-server
        command: mysqld --character-set-server=utf8 --collation-server=utf8_general_ci
        restart: always
        ports:
          - '3306:3306'
        environment:
          MYSQL_ROOT_PASSWORD= root123456
          MYSQL_USER= zrk
          MYSQL_PASSWORD= zrk123456
        volumes:
          - "/home/zrk/data/mysql/data:/var/lib/mysql"
          - "/home/zrk/data/mysql/conf/my.cnf:/etc/my.cnf"
          - "/home/zrk/data/mysql/logs:/logs"
          - "/home/zrk/data/mysql/init:/docker-entrypoint-initdb.d/"
      web:
        build: .
        container_name: 'aspnetcore'
        ports:
          - '8080:80'
        depends_on:
          - mysqldb
    

    Swarm模式 集群

    • 管理节点、工人节点、服务、任务

    正式搭建GitLab

    系统环境

    • 1核2G 1M CentOS

    安装gitlab

    • docker pull gitlab/gitlab-ce

    • docker run -d --name gitlab --restart always -p 8443:443 -p 80:80 -p 8822:22 -v /home/zrk/data/gitlab/config:/etc/gitlab -v /home/zrk/data/gitlab/logs:/var/log/gitlab -v /home/zrk/data/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce

    • docker exec -it gitlab bash

    配置gitlab.rb文件

    • sudo vi /home/zrk/data/gitlab/config/gitlab.rb
    # 配置http协议所使用的访问地址,不加端口号默认为80
    external_url 'http://127.0.0.1'
    
    # 配置ssh协议所使用的访问地址和端口
    gitlab_rails['gitlab_ssh_host'] = '127.0.0.1'
    gitlab_rails['gitlab_shell_ssh_port'] = 8822 # 此端口是run时22端口映射的8822端口
    
    • gitlab-ctl reconfigure

    cpu跑满解决方案

    • 方案一:在gitlab.rb配置中取消unicorn的注释:unicorn['worker_processes'] = 2

      • 略有改善
    • 方案二:创建swap分区(推荐方案)

      • 创建4G用于分区的文件:sudo dd if=/dev/zero of=/home/swap bs=512 count=8388616
      • 格式化为swap分区:sudo mkswap /home/swap
      • 启用swap分区:sudo swapon /home/swap
      • 设置为开机自启动:echo "/home/swap swap swap defaults 0 0" >>/etc/fstab
      • 查看分区:cat /proc/swaps
    • 清理缓存

      • sync
      • echo 1 > /proc/sys/vm/drop_caches
  • 相关阅读:
    使用uibesizerpath + Cashaplayer画椭圆
    国庆节,回乡
    慎用单例
    终于碰到iOS对象集合深拷贝的坑
    Oracle 按表名导出数据
    代理模式(Proxy Pattern)
    享元模式(Flyweight Pattern)
    外观模式(Facade Pattern)
    组合模式
    装饰者模式
  • 原文地址:https://www.cnblogs.com/tianyaguoke/p/11212907.html
Copyright © 2011-2022 走看看