Docker

[docker] GitLab ce 설치 및 최초 구동하기

채윤아빠 2023. 9. 14. 20:29
728x90
반응형

개요

형사관리를 위하여 "GitLab ce"를 도커를 이용하여 구동하는 방법에 대하여 알아 보겠습니다.


서버 현황 확인

먼저, "GitLab ce"를 설치하고 운영할 서버 현황을 확인합니다. IP : 192.168.0.10

server:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           1.6G  1.6M  1.6G   1% /run
/dev/md1        460G   14G  446G   3% /
tmpfs           7.8G     0  7.8G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
/dev/md0        988M  273M  649M  30% /boot
/dev/sdb1       1.1G  6.1M  1.1G   1% /boot/efi
tmpfs           1.6G  4.0K  1.6G   1% /run/user/1000
server:~# free -h
               total        used        free      shared  buff/cache   available
Mem:            15Gi       668Mi        11Gi        33Mi       2.8Gi        14Gi
Swap:           11Gi          0B        11Gi
server:~# dmesggrep smp
[    0.038617] smpboot: Allowing 6 CPUs, 0 hotplug CPUs
[    0.166599] smpboot: Estimated ratio of average max frequency by base frequency (times 1024): 1331
[    0.166614] smpboot: CPU0: Intel(R) Core(TM) i5-8500 CPU @ 3.00GHz (family: 0x6, model: 0x9e, stepping: 0xa)

server:~# fdisk -l

Disk /dev/sda: 465.76 GiB, 500107862016 bytes, 976773168 sectors
Disk model: CT500MX500SSD1

Disk /dev/sdb: 465.76 GiB, 500107862016 bytes, 976773168 sectors
Disk model: CT500MX500SSD1

Disk /dev/md1: 459.58 GiB, 493474545664 bytes, 963817472 sectors

이 정도의 사양이면 "GitLab ce" 서버로 잘 활용할 수 있습니다.


도커 서비스 설치

도커 명령을 이용할 수 있도록 "docker.io"를 설치합니다.

server:~# sudo apt install docker.io


Scanning processes...
Scanning processor microcode...
Scanning linux images...

Running kernel seems to be up-to-date.

The processor microcode seems to be up-to-date.

No services need to be restarted.

No containers need to be restarted.

No user sessions are running outdated binaries.

No VM guests are running outdated hypervisor (qemu) binaries on this host.

설치된 도커에 대한 정보를 확인합니다.

server:~# sudo docker version
Client:
 Version:           24.0.5
 API version:       1.43
 Go version:        go1.20.3
 Git commit:        24.0.5-0ubuntu1~22.04.1
 Built:             Mon Aug 21 19:50:14 2023
 OS/Arch:           linux/amd64
 Context:           default

Server:
 Engine:
  Version:          24.0.5
  API version:      1.43 (minimum version 1.12)
  Go version:       go1.20.3
  Git commit:       24.0.5-0ubuntu1~22.04.1
  Built:            Mon Aug 21 19:50:14 2023
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.7.2
  GitCommit:
 runc:
  Version:          1.1.7-0ubuntu1~22.04.1
  GitCommit:
 docker-init:
  Version:          0.19.0
  GitCommit:


server:~# sudo docker info


 Kernel Version: 5.15.0-83-generic
 Operating System: Ubuntu 22.04.3 LTS
 OSType: linux
 Architecture: x86_64
 CPUs: 6
 Total Memory: 15.47GiB
 Name: server
 ID: 1099ec7c-fa45-4a59-a515-6fc0093cb8dd
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false

server:~# systemctl status docker
● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2023-09-13 04:42:12 UTC; 9min ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 2875 (dockerd)
      Tasks: 12
     Memory: 26.0M
        CPU: 485ms
     CGroup: /system.slice/docker.service
             └─2875 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Sep 13 04:42:12 server systemd[1]: Starting Docker Application Container Engine...
Sep 13 04:42:12 server dockerd[2875]: time="2023-09-13T04:42:12.167553350Z" level=info msg="Starting up"
Sep 13 04:42:12 server dockerd[2875]: time="2023-09-13T04:42:12.168119410Z" level=info msg="detected 127.0.0.53 nameserve>
Sep 13 04:42:12 server dockerd[2875]: time="2023-09-13T04:42:12.394899120Z" level=info msg="Loading containers: start."
Sep 13 04:42:12 server dockerd[2875]: time="2023-09-13T04:42:12.782189878Z" level=info msg="Loading containers: done."
Sep 13 04:42:12 server dockerd[2875]: time="2023-09-13T04:42:12.806597711Z" level=info msg="Docker daemon" commit="24.0.5>
Sep 13 04:42:12 server dockerd[2875]: time="2023-09-13T04:42:12.806837342Z" level=info msg="Daemon has completed initiali>
Sep 13 04:42:12 server dockerd[2875]: time="2023-09-13T04:42:12.890382132Z" level=info msg="API listen on /run/docker.soc>
Sep 13 04:42:12 server systemd[1]: Started Docker Application Container Engine.

도커 운영폴더 변경

위에서 도커 정보 확인 시, "/var/lib/docker" 폴더에서 운영되고 있습니다.
저의 경우에는 혹시라도 OS를 재설치하더라도 동일한 조건으로 도커가 운영이 가능하도록 운영 폴더를 미리 변경해 둡니다.

운영 폴더를 옮기기 위하여 도커 서비스를 중지하고, 이전 대상 폴더를 생성 후 기존 운영 폴더의 모든 파일을 복사합니다.

server:~# sudo systemctl stop docker.socket
server:~# sudo systemctl stop docker
server:~# sudo mkdir -p /home/serv/docker
server:~# sudo rsync -aP /var/lib/docker/ /home/serv/docker


swarm/
tmp/
volumes/
volumes/backingFsBlockDev
volumes/metadata.db
         32,768 100%   15.62MB/s    0:00:00 (xfr#9, to-chk=0/38)

도커 운영 경로 변경을 위하여 다음과 같이 "/etc/docker/daemon.json" 파일을 생성하여 줍니다.

"/etc/docker/daemon.json" 파일에 신규 root 폴더를 설정합니다. 또는 "graph"로 설정하여도 됩니다.

# sudo vi /etc/docker/daemon.json

{
    "data-root": "/home/serv/docker" 
}

도커 서비스를 실행하여 운영 경로가 정상적으로 변경되었는지 확인합니다.

server:~# sudo systemctl start docker
server:~# sudo docker info


 ID: 1099ec7c-fa45-4a59-a515-6fc0093cb8dd
 Docker Root Dir: /home/serv/docker
 Debug Mode: false
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false

이름을 변경해 놓은 "/var/lib/docker.old" 폴더는 삭제해도 됩니다.


Gitlab 도커 이미지 받기

다음과 같이 최신의 "Gitlab ce" 도커 이미지를 받습니다. (https://hub.docker.com/r/gitlab/gitlab-ce/tags)

server:~$ sudo docker pull gitlab/gitlab-ce:16.3.3-ce.0
16.3.3-ce.0: Pulling from gitlab/gitlab-ce
44ba2882f8eb: Pull complete
8fb498f93123: Pull complete
e3d9eb42a8a1: Pull complete
e12e5f53f387: Pull complete
07af258bd5cf: Pull complete
e67086a39069: Pull complete
0618726461d6: Pull complete
c1d678382927: Pull complete
Digest: sha256:62165f88747fc33220a3c0229357b775c3358d3fad3ca8e4c7ca9ff6a2b05395
Status: Downloaded newer image for gitlab/gitlab-ce:16.3.3-ce.0
docker.io/gitlab/gitlab-ce:16.3.3-ce.0

위 tags 에서 확인한 최신의 "16.3.3-ce.0" 버전을 다운로드 받았습니다.


Gitlab 구동하기

Gitlab 운영을 위한 폴더를 생성합니다.

server:~# sudo mkdir -p /home/serv/gitlab/config /home/serv/gitlab/data /home/serv/gitlab/logs

다음과 같이 Gitlab 구동 스크립트를 작성합니다.

#!/bin/bash

# GitLab 컨테이너 구동 스크립트
# server : dev-internal
# date : 2023-09-13
# author : hbesthee@naver.com

LOG_GITLAB=/home/serv/logs/gitlab.log

GITLAB_NAME=gitlab
GITLAB_HOST_NAME=g.mydev.com
GITLAB_HTTP_PORT=18080
GITLAB_SSH_PORT=18022
GITLAB_TAG=16.3.3-ce.0
GITLAB_ROOT=/home/serv/gitlab


echo "========"tee -a ${LOG_GITLAB}
echo "[$(date +%Y-%m-%d) $(date +%H:%M:%S)] $0 $@"tee -a ${LOG_GITLAB}


echo "기존 ${GITLAB_NAME} 컨테이너 중지 시도..."tee -a ${CONTAINER_LOG}
docker ps -q --filter "name=${GITLAB_NAME}"grep -q . && docker stop ${GITLAB_NAME} && docker rm -fv ${GITLAB_NAME} && echo "'${GITLAB_NAME}' container stopped."


echo "${GITLAB_NAME} 컨테이너 구동"tee -a ${LOG_GITLAB}
docker run --detach \
    --restart always \
    --name ${GITLAB_NAME} \
    --hostname ${GITLAB_HOST_NAME} \
    --publish ${GITLAB_HTTP_PORT}:80 \
    --publish ${GITLAB_SSH_PORT}:22 \
    --volume ${GITLAB_ROOT}/config:/etc/gitlab \
    --volume ${GITLAB_ROOT}/logs:/var/log/gitlab \
    --volume ${GITLAB_ROOT}/data:/var/opt/gitlab \
    gitlab/gitlab-ce:${GITLAB_TAG}

위 스크립트를 실행하여 "Gitlab" 서비스를 실행하면 초기화하는데 꾀 시간이 걸리지만, 브라우저로 스크립트에서 지정한 포트(GITLAB_HTTP_PORT)에 접속하면 "Gitlab" 서비스에 접속할 수 있습니다.

구동된 "Gitlab"에 접속하여 "root" 계정으로 접속을 해야하는데, 초기 비밀번호를 알 수 없어서 인터넷을 검색해 봤더니, https://oingdaddy.tistory.com/369 글에서는 root 계정 비밀번호를 초기화하는 방법이 정리되어 있어서 참고하여으나, 더 단순한 방법이 있었습니다.

최초 "root" 계정으로 접속하기 위하여 최초 구동 시, 자동으로 생성된 비밀번호는 다음과 같이 확인합니다.

server:/home/serv/gitlab$ sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
Password: moS8DR7Z04nk6f38gzOnn8dMrP747GCUfqtVuAfp6Wc=

최초 접속 후, 반드시 "root" 계정에 대한 비밀번호를 변경해 두어야 합니다. 자동으로 생성된 비밀번호는 24시간 이후 자동 폐기 됩니다.


참고자료

https://docs.gitlab.com/ee/install/docker.html
https://hub.docker.com/r/gitlab/gitlab-ce/tags