JUST WRITE

Docker버전 제품 만들기(2) - 자동 배포 본문

MLOps/Docker

Docker버전 제품 만들기(2) - 자동 배포

천재보단범재 2021. 9. 25. 19:21
2020년에 다니고 있는 회사 내부 프로젝트에서 기술적인 부분만 발췌해서 정리한 글입니다.

자동 배포!!!

제품의 Docker Image를 만들 Dockerfile 작성하였다.

다만 해당 Image를 개인 작업 PC에 가지고 있거나 Docker hub에 올릴 수는 없었다.

Nexus Repository이라는 무료 Repository를 구성해서 docker image를 관리하기로 하였다.

Nexus Repository

Nexus Repository사설 Repository 구성 시 가장 널리 사용되고 있다.

Pro 버전과 OSS(Open Source Software) 버전이 있어 무료로 이용할 수 있다.

docker뿐만 아니라 Maven, npm, Yum, Pypl 등 다양한 Format을 지원합니다.

Nexus Repository

Repository Type

  • proxy Repository -> Central Repository나 공식 Repository 등 원격 저장소 미러링
  • hosted Repository -> 사설 Repository로 해당 Repository에 Upload 가능
  • group Repository -> 여러 Repository를 논리적으로 묶어 하나의 저장소로 사용

Repository List

** Nexus Repository 구축은 따로 글로 정리할 예정.

Docker Nexus Repository 연결

Window Docker

insecure-registries 설정

Window Docker Setting

  • [Settings] -> [Docker Engine]에서 'insecure-registries' 값 입력
  • 아래 코드 처럼 Docker Nexus Repository 주소 입력 후 [Apply & Restart] 진행
...
"insecure-registries":[
    "nexus.docker.repo:5556"
]
...

Docker login

  • docker login command를 통해 Docker Nexus Repository 로그인
docker login nexus.docker.repo:5556 -u swjeong -p swjeong

Linux Docker

insecure-registries 설정

  • /etc/docker/daemon.json 수정
{
   "insecure-registries": ["nexus.docker.repo:5556"]
}

Docker login

  • docker login command를 통해 Docker Nexus Repository 로그인 - Window Docker와 동일

자동 배포

프로젝트들은 GitLab에서 관리되고 있다.

GitLab CI/CD를 이용해서 자동으로 Image를 Build, Nexus Repository에 배포되도록 하였다.

GitLab Runner 등록

GitLab CI/CD를 이용하려면 먼저 GitLab Runner를 등록해야 한다.

GitLab Runner는 아래 command로 docker container로 실행하였다.

(GitLab Runner Install Document 링크)

docker run --rm -it -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register -n \
--url ${등록 GitLab Url} \
--registration-token ${등록 token} \
--description ${GitLab Runner 설명} \
--executor docker \
--docker-image docker:latest \
--docker-volumes /var/run/docker.sock:/var/run/docker.sock

GitLab 프로젝트 [설정] -> [CI/CD] -> [Runners] 메뉴에서 등록방법과 token를 확인할 수 있다.

Url, token 모자이크 처리

등록이 되면 아래처럼 목록에 나온다.

명칭, 설명 모자이크 처리

.gitlab-ci.yml 파일 작성

GitLab Runner 등록을 완료하면 Runner가 실행할 Job을 정의해야 한다.

.gitlab-ci.yml이란 파일을 프로젝트 최상단에 생성하여 rule대로 작성하면 Runner가 Job을 실행하게 된다.

docker image build, 배포뿐만 아니라 war Library도 사내 Nexus Repository(Maven)에 배포되고 있다.

이번 글에서는 docker image build, 배포 관련된 부분만 정리하였다.

(.gitlab-ci.yml 작성 관련 document 링크)

image: maven:3.3-jdk-8

variables:
  # Docker  
  REGISTRY: nexus.repo.com:1234
  REGISTRY_USER: swjeong
  REGISTRY_PASSWORD: swjeong
  DOCKER_DRIVER: overlay2
  TAG_NAME: projects/product1
  DEPLOY_VERSION: 1.0.0
  
cache:
  paths:
    - .m2/repository/
    - target/*.jar
    - target/*.war

stages:
  - build
  - test
  - deploy
  - build-docker-image

Build_docker_image:
  stage: build-docker-image
  image: docker:latest
  services:
    - docker:dind
  script:
    - docker login -u $REGISTRY_USER -p $REGISTRY_PASSWORD $REGISTRY
    - docker build  --cache-from $REGISTRY/$TAG_NAME:$DEPLOY_VERSION --tag $REGISTRY/$TAG_NAME:$DEPLOY_VERSION .
    - docker push $REGISTRY/$TAG_NAME:$DEPLOY_VERSION       
  only:
    - master

** 제품명, 정보가 드러나는 부분은 임의 명칭으로 대체

주요 부분

  • Build_docker_image -> docker image build 및 Nexus Repository Deploy 하는 부분
  • docker:dind
    • Docker in Docker 약자, docker container 내부에서 새로운 docker 데몬 실행
    • 새로운 Docker Client Container를 통해 docker command 실행 가능
  • only: -master -> master branch에서 commit나 merge가 일어날 경우에만 해당 stage 실행

GitLab 프로젝트 [CI/CD] -> [파이프라인] 메뉴에서 실행된 Job Pipeline history를 확인할 수 있다.

프로젝트 정보 모자이크 처리

Nexus Repository의 Docker hosted Repository에 가면 배포된 docker Image를 확인할 수 있다.

프로젝트 정보 모자이크 처리

다음 글에서는 Dockerfile를 수정하여 docker Image 빌드를 개선한 사례를 공유하겠습니다.

728x90
반응형
Comments