개요
Gitlab의 Container registry에 도커 이미지를 배포해보는 과정을 기록해보려고 한다.
사전 준비
- Gitlab 서버
실습을 위해 깃랩 서버 도커로 구축하기를 참고하여 gitlab을 도커로 배포하고, 내부망에서 도메인 네임으로 쉽게 접근하기 위해 DNS 서버도 따로 구성하였다.
구성된 깃랩 도커는 다음과 같고,
DNS는 다음과 같다.
nslookup gitlab.myhome.com
docker-compose.yaml 수정
사전 준비의 gitlab 구축 관련 글을 참고하였다면 아래와 같은 docker-compose.yaml
파일이 작성되었을텐데,
services:
gitlab:
image: gitlab/gitlab-ce:latest
container_name: gitlab
hostname: 'gitlab.waytothem.store'
restart: always
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://{서버 IP주소}:8080'
gitlab_rails['gitlab_shell_ssh_port'] = 2422
GITLAB_TIMEZONE: Asia/Seoul
ports:
- "8080:8080"
- "2422:2422"
volumes:
- type: bind
source: "./gitlab/config"
target: "/etc/gitlab"
- type: bind
source: "./gitlab/logs"
target: "/var/log/gitlab"
- type: bind
source: "./gitlab/data"
target: "/var/opt/gitlab"
shm_size: '256m'
여기서 gitlab 컨테이너의 환경 설정 등을 수정하고, registry
컨테이너를 추가로 생성해줘야 한다.
Gitlab에서 Containe Registry를 사용하기 위해서는 외부의 container registry를 gitlab과 연동시켜줘야 한다.
그 외부 container registry를 docker compose에 같이 생성해 동일한 도커 네트워크에 묶이도록 할거다.
아래와 같이 작성해주자.
(환경 설정의 값들은 본인의 환경에 맞게 수정.)
services:
gitlab:
image: gitlab/gitlab-ce:latest
container_name: gitlab
hostname: 'gitlab.myhome.com'
restart: always
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://gitlab.myhome.com:8929'
registry_external_url 'http://gitlab.myhome.com:5001'
gitlab_rails['gitlab_shell_ssh_port'] = 2424
gitlab_rails['gitlab_default_projects_features_container_registry'] = true
GITLAB_TIMEZONE: Asia/Seoul
ports:
- "8929:8929"
- "2424:22"
- "443:443"
volumes:
- type: bind
source: "./gitlab/config"
target: "/etc/gitlab"
- type: bind
source: "./gitlab/logs"
target: "/var/log/gitlab"
- type: bind
source: "./gitlab/data"
target: "/var/opt/gitlab"
shm_size: '256m'
registry:
image: registry:latest
restart: always
ports:
- "5001:5000"
volumes:
- "register-data:/var/lib/registry/docker/registry/v2"
container_name: registry
volumes:
register-data: {}
gitlab 컨테이너에 환경 설정 속성에 registry_external_url 'http://gitlab.myhome.com:5001'
가 추가 되었고,
registry
컨테이너도 추가로 생성되었다.
Container registry 이미지 배포
- Gitlab Private container registry에 도커 이미지를 배포하는 방법을 실습해보자.
1. gitlab 로그인
1-1. container registry에 접근하기 위해 gitlab에 로그인을 먼저 해주자.
echo "$GITLAB_PASSWORD" | docker login [서버 IP]:[포트] -u ${GITLAB_USERNAME} --password-stdin
1-1. HTTP 접근 오류
도커 레지스트리에 http
로 접근하게되면 다음과 같은 에러가 발생한다.
$ docker login http://192.168.219.114:8929
보안을 위해서 도메인에 HTTPS 인증을 처리하는게 좋지만, 실습을 간단하게 할 것이기 때문에 위 오류가 뜨지 않도록 설정을 조금 만져주자.
docker의 JSON 설정 파일을 수정해주면 되는데 경로는 다음과 같다.
/etc/docker/daemon.json
{
"insecure-registries": ["Registry 서버IP:포트"]
}
위 내용을 추가해주자.
추가했다면 변경 내역을 적용하기 위해 다음 명령을 실행해 도커를 재시작하자.
sudo systemctl restart docker
1-2. 프로젝트 생성
성공적으로 로그인이 되었다면 프로젝트 탭에 들어가 새로운 프로젝트를 다음과 같이 생성해주자.
그리고 Deploy
-> Container Registry
탭으로 가면 다음과 같이 컨테이너 레지스트리에 배포하는 방법이 나온다.
자, 배포를 이제부터 시작해보자!
2. container registry에 등록할 이미지 build
컨테이너 레지스트리에 배포할 도커 이미지를 간단하게 생성하고 빌드해주자.
이미지 경로는 gitlab에 /root/test
경로로 지정해줄거다.
docker build --tag [서버 IP]:[포트]/root/test
생성된 이미지 이름을 확인해보자.
docker images | grep 'gitlab.myhome.com'
3. container registry에 이미지 push
컨테이너 레지스트리에 빌드된 이미지를 push 해주자.
docker push gitlab.myhome.com:5001/root/test
4. container regitsry에서 이미지 pull
그럼 이제 반대로 container registry에서 업로드 된 이미지가 정상적으로 pull 되는지 확인해보자.
docker pull gitlab.myhome.com:5001/root/test
정상적으로 pull이 되었다!