개요
형사관리를 위하여 "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
'Docker' 카테고리의 다른 글
[docker] GitLab 구동 시, logrotate 서비스에서 멈춰 있는 문제 (0) | 2023.12.20 |
---|---|
[docker] 레드마인 운영 시, production.log 파일 생성 문제 (0) | 2023.09.10 |
[docker] gitlab - backup 수행하기 (0) | 2023.06.15 |
[docker] docker 서비스 중지시, "docker.socket" Warning 문제 (0) | 2022.07.06 |
[Docker] 컨테이너 구동 스크립트 (0) | 2021.09.10 |