어쩌다 보니 GitLab을 도커로 돌려야 하는 상황이 발생하게 되었다.
그래서 이참에 공부할 겸 필자가 진행했던 방법에 대해서 정리한다.
맨 처음으로 docker hub에 있는 이미지들 중에 gitlab 이미지가 있는지 확인하기 위해서 search
명령어를 사용한다.
docker search [찾고자 하는 이미지 이름]
찾고자 하는 이미지 이름 부분에 gitlab을 넣고 엔터를 치면 docker hub에 존재하는 gitlab 이미지들을 보여준다.
gitlab/gitlab-ce GitLab Community Edition docker image based … 3372 [OK]
sameersbn/gitlab Dockerfile to build a GitLab image for the D… 1172 [OK]
gitlab/gitlab-runner GitLab CI Multi Runner used to fetch and run… 729 [OK]
gitlab/gitlab-ee GitLab Enterprise Edition docker image based… 272
twang2218/gitlab-ce-zh 汉化的 GitLab 社区版 Docker Image 246 [OK]
...
위에 나오는 것들이 모두 docker hub에 존재하는 gitlab 이미지들이다.
필자는 이중에서 gitlab-ce 이미지를 내려 받기로 결정하였다.
docker pull gitlab/gitlab-ce
이미지를 내려 받았으면 이제 컨테이너를 실행시켜야 한다.
이미지를 도커 명령어로 실행하는 방법은 GitLab Docs에 보면 나와있다.
GitLab Docs를 보면 명령어로 컨테이너를 실행하기 전에 volume location을 지정하라고 나와있다.
GitLab Container에서 사용되는 볼륨은 다음과 같다.
Local location | Container location | Usage |
---|---|---|
$GITLAB_HOME/data | /var/opt/gitlab | For storing application data |
$GITLAB_HOME/logs | /var/log/gitlab | For storing logs |
$GITLAB_HOME/config | /etc/gitlab | For storing the GitLab configuration files |
필자는 스터디용으로 진행하는 것이였기 때문에 D드라이브 밑에 폴더를 미리 만들어두었다.
폴더를 안만들더라도 볼륨을 설정했는데 디렉토리가 없다면 자동으로 생성해 주는 것으로 알고 있다.
이제 docker 명령어를 실행하기 위해서 GitLab Docs에 나와있는 코드를 참고하여 작성한다.
docker run --detach \
--name gitlab \
--hostname gitlab.example.com \
--publish 4000:80 \
--restart always \
--volume ./gitlab/config:/etc/gitlab \
--volume ./gitlab/logs:/var/log/gitlab \
--volume ./gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce
필자의 경우 윈도우 cmd로 명령어를 치다 보니 위 스크립트에서 \
부분을 제외하고 한 줄로 이어 작성하였다.
옵션 | 설명 | 예시 |
---|---|---|
--name | 컨테이너 이름 지정 | --name [컨테이너 이름] |
--hostname | 컨테이너 접속시의 host의 이름 설정 | --hostname [지정할 host 이름] |
--publish | -p명령과 동일, 호스트 포트와 컨테이너 포트를 바인딩함 | --publish [호스트 포트]:[컨테이너 포트] |
--restart | docker desktop이 실행될 때마다 자동으로 실행하는 명령어 | --restart always |
--volume | 데이터가 저장되는 곳을 설정해주는 것이다. 디렉토리에 대한 설명은 위에 참고 | --volume [호스트 디렉토리]:[컨테이너 디렉토리] |
gitlab에서 사용하는 포트는 총 3가지가 존재한다.
포트 | 요청 방식 |
---|---|
80 | http |
443 | https |
22 | ssh |
필자의 경우 포트를 4000:80으로 바인딩 하였기에 http://localhost:4000
으로 접속하면 다음과 같은 화면으로 접속된다.
docker compose로 GitLab을 실행하기 위해서는 docker-compose 파일을 먼저 만들어야 한다.
윈도우 기준, cmd에 다음 명령어를 입력하면 파일 하나를 만들 수 있다.
copy con [파일 이름]
파일 이름에다가 필자는 docker-compose.yml을 적고 실행하였다.
실행하면 cmd에서 파일에 들어갈 내용을 작성할 수 있다.
Ctrl + Z
를 통해 저장할 수 있는데, 아무것도 작성하지 않고 그냥 저장하면 빈 파일이 생성된다.
이제 docker-compose에 내용을 추가할 차례이다.
# docker-compose.yml
version: '3.4'
services:
web:
image: 'gitlab/gitlab-ce:latest'
restart: always
hostname: 'gitlab.example.com'
container_name: gitlab
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://gitlab.example.com'
gitlab_rails['gitlab_shell_ssh_port'] = 6015
ports:
- '4000:80'
- '6015:22'
volumes:
- './gitlab/config:/etc/gitlab'
- './gitlab/logs:/var/log/gitlab'
- './gitlab/data:/var/opt/gitlab'
- './gitlab/backup:/var/opt/gitlab/backups' # 백업 폴더 추가
GITLAB_OMNIBUS_CONFIG밑에다가는 gitlab.rb에 있는 내용을 변경? 할 것을 추가하면 된다.
컨테이너에 접속해서 cd /etc/gitlab
후 cat gitlab.rb
를 하면 내용을 확인할 수 있다.
내용 작성을 한 뒤 cmd에서 다음 명령어를 통해 compose 파일을 실행할 수 있다.
docker-compose up -d
GitLab에 접속할 때는 docker 명령어로 접속할 때와 똑같이 http://localhost:4000
으로 접속하면 된다.
이후에 compose파일을 실행하기 위해서는 docker 실행 명령어인 start로 실행할 수 있다.
docker start gitlab
다른 사람들은 처음 접속하면 비밀번호 변경하는 창이 뜬다고 하는데, 필자는 그 화면이 뜨지 않았다.
만일 비밀번호 변경하는 창이 뜬다면 거기에 새로운 비번 입력하고 진행하면 된다.
맨 처음 root 계정에 접속하기 위한 아이디와 비밀번호를 알려주지 않았다.
그래서 initial password를 알기 위해서 다음 경로로 접속한다.
cd /etc -> cd /gitlab -> cat initial_root_password
cat initial_root_password
하게 되면 다음과 같은 것들이 나올 것이다.
# WARNING: This value is valid only in the following conditions
# 1. If provided manually (either via `GITLAB_ROOT_PASSWORD` environment variable or via `gitlab_rails['initial_root_password']` setting in `gitlab.rb`, it was provided before database was seeded for the first time (usually, the first reconfigure run).
# 2. Password hasn't been changed manually, either via UI or via command line.
#
# If the password shown here doesn't work, you must reset the admin password following https://docs.gitlab.com/ee/security/reset_user_password.html#reset-your-root-password.
Password: [이곳에 있는 비밀번호]
# NOTE: This file will be automatically deleted in the first reconfigure run after 24 hours.
위 부분에서 이곳에 있는 비밀번호 부분을 password에 넣고 id는 root로 하면 계정 로그인이 가능하다.
위 방법으로 접속이 안되거나 혹은 비밀번호를 바꾸고 싶은 경우가 있을 것이다.
비밀번호를 변경하기 위해서는 일단 컨테이너에 접속해야 한다.
docker exec -it [컨테이너 이름] /bin/bash
위 명령어로 들어가도 되고 다음과 같이 cli부분으로 들어가도 된다.
컨테이너에 접속하게 되면 다음과 같은 명령어를 통해 root 계정을 찾는다.
gitlab-rails console -e production
위 명령어를 입력하면 여러 정보가 뜰 것이다.
위 처럼 로딩이 다 끝날 때 까지 기다리고, 로딩이 다 되면 root계정을 찾아야 한다.
user = User.where(id: 1).first
gitlab이 생성되면 가장 처음 만들어지는 계정이 root 계정이므로 id를 1로 검색하면 root계정이 나오게 될 것이다.
User id:1 @root
라고 나오는 것을 확인할 수 있는데, 처음 계정이 root인 것을 여기서도 확인할 수 있다.
이제 root 정보를 찾았으니 비밀번호를 변경할 차례다.
user.password = '변경할 비밀번호'
user.password_confirmation = '변경할 비밀번호'
비밀번호를 변경할 때 ''
사이에 변경할 비밀번호를 입력하여 변경하면 된다.
위 작업을 모두 마치면 이제 root 정보를 저장해야 한다.
user.save
이렇게 입력했을 때 마지막에 true가 나오면 정상적으로 비밀번호가 변경된 것이다.
위 작업을 한 번에 보면 다음 사진을 참고하면 된다.