使用docker搭建gitlab服务器

摘要:
简单记录Docker的使用和GitLab的搭建##Docker基础篇###没有sudo权限###安装docker###基础命令###docker安装mysql和配置###Dockerfile常用命令###制作镜像###发布镜像###容器网络###DockerCompose###Swarm模式集群##正式搭建GitLab###系统环境###安装gitlab###配置gitlab.rb文件###cpu
简单记录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

免责声明:文章转载自《使用docker搭建gitlab服务器》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Docker镜像制作-Day02Java中的深拷贝(深复制)和浅拷贝(浅复制)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

MySQL之对数据库库表的字符集的更改

数据字符集修改步骤: 对于已有的数据库想修改字符集不能直接通过 "alter database character set *"或 "alter table tablename character set *",这两个命令都没有更新已有记录的字符集,而只是对新创建的表或者记录生效。 已经有记录的字符集的调整,必须先将数据导出,经过修改字符集后重新导入后才可...

Mysql全文搜索match…against的用法

Mysql全文搜索match…against的用法 « 菜刀网志 Mysql全文搜索match…against的用法 五月 2nd, 2011 Posted in IT技术, MysqlNo Comments 前提:mysql只支持英文内容的全文索引,所以只考虑英文的全文搜索。假定数据表名为post,有三列:id、title、content。i...

MySQL8服务无法启动,服务没有报告任何错误

MySQL8服务无法启动,服务没有报告任何错误 错误信息: 免安装版mysql-8.0.15-winx64.zip 按照教程来安装,解压,增加my.ini文件,修改文件内部的地址信息,配置环境变量path,新建data文件夹(注意这里,就是这个位置出错了),以管理员身份运行cmd初始化,mysqld -install,net start mysql,...

logstash 读取MySQL数据到elasticsearch 相差8小时解决办法

logstash和elasticsearch是按照UTC时间的,kibana却是按照正常你所在的时区显示的,是因为kibana中可以配置时区信息。 具体看这个: logstash 的配置文件添加 filter { ruby { code => "event.set('timestamp', event.get('@times...

MySQL学习笔记:生成一个时间序列

  今天遇到一个需求是生成以下表格的数据,一整天24小时,每秒一行数据。      寻找颇旧,找到另外两个实现的例子,暂且学习一翻。另一个见另外一篇。 SELECT DATE_ADD('2018-01-01',INTERVAL @i := @i + 1 DAY) AS DATE FROM (SELECT 1 UNION ALL SELECT 1 UNION...

Ubuntu18.04LTS下编译boringssl

一、开发环境 sudo apt-get update sudo apt-get install -y build-essential sudo apt-get install cmake sudo add-apt-repository ppa:longsleep/golang-backports sudo apt-get update sudo apt-g...