使用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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM