일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- java
- tcp
- AWS
- CSV
- Packet
- Trino
- Operating System
- CVAT
- airflow
- zookeeper
- Vision
- EC2
- Spring
- MAC address
- OS
- PostgreSQL
- Python
- aws s3
- Kafka
- kubeadm
- JavaScript
- helm
- ip
- log
- docker
- kubernetes
- jvm
- grafana
- kubectl
- Network
- Today
- Total
JUST WRITE
Docker버전 제품 만들기(2) - 자동 배포 본문
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을 지원합니다.
Repository Type
- proxy Repository -> Central Repository나 공식 Repository 등 원격 저장소 미러링
- hosted Repository -> 사설 Repository로 해당 Repository에 Upload 가능
- group Repository -> 여러 Repository를 논리적으로 묶어 하나의 저장소로 사용
** Nexus Repository 구축은 따로 글로 정리할 예정.
Docker Nexus Repository 연결
Window Docker
insecure-registries 설정
- [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를 확인할 수 있다.
등록이 되면 아래처럼 목록에 나온다.
.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 빌드를 개선한 사례를 공유하겠습니다.
'MLOps > Docker' 카테고리의 다른 글
Docker 제품 만들기(5) - Container 운영 (0) | 2021.10.04 |
---|---|
Docker 제품 만들기(4) - Image 배포 (0) | 2021.10.03 |
Docker 제품 만들기(3) - Image 빌드 개선 (0) | 2021.10.02 |
Docker버전 제품 만들기(1) - image 만들기 (0) | 2021.09.25 |
Docker버전 제품 만들기(0) - 시작 (0) | 2021.09.18 |