And Brain said,

CI/CD Argonautica - Docker, 선박 - 실습 본문

IT/CICD Argonautica

CI/CD Argonautica - Docker, 선박 - 실습

The Man 2023. 3. 27. 21:21
반응형

CI/CD Argonautica

Docker, 선박
Kubernetes, 조타수 Harbor, 항구
Helm, 타륜
Istio, 돛
Jenkins, 선장
ArgoCD, 출항

1장/ Loki, Trickster

Troubleshooting

 

 

지난 시간에 이어, 오늘은 실습이다

 

Dockerfile을 이용하는 Docker 명령어들을 알아보고, 이후 Docker-compose 또한 사용해보도록 하자.

 

 

먼저, Dockerfile을 이용한 대표적인 스크립트 명령어들을 간단하게 알아보자.

 

FROM: 베이스 이미지 지정

FROM <이미지 이름>:<태그>


RUN: 새로운 레이어에서 명령어 실행

RUN <명령어>


CMD: 컨테이너가 시작될 때 실행될 명령어 지정

CMD ["실행할 명령어"]


ENTRYPOINT: 컨테이너가 시작될 때 실행될 명령어 지정, CMD와 차이점은 인자를 받을 수 있고 명령어 변경 불가.

ENTRYPOINT ["실행할 명령어"]


WORKDIR: 작업 디렉토리 지정.

WORKDIR <작업 디렉토리 경로>

 

ENV: 환경 변수 설정.

ENV <환경 변수 이름> <값>


COPY: 호스트 파일을 컨테이너 안으로 복사.

COPY <호스트 파일 경로> <컨테이너 파일 경로>


ADD: 호스트 파일을 컨테이너 안으로 복사. COPY와 달리 압축 파일을 해제하거나 URL에서 파일 다운로드 가능.

ADD <호스트 파일 경로 또는 URL> <컨테이너 파일 경로>


EXPOSE: 컨테이너에서 노출할 포트를 지정합니다.

EXPOSE <포트 번호>

 

 

이제 나중에 실제로 사용할 Dockerfile을 생성해보자.

# openjdk11 base image
FROM openjdk:11-jre-slim-buster

# directory 생성
RUN mkdir -p /usr/app/msa-attach-volume/messages
# jar 파일이 복사되는 위치
ENV APP_HOME=/usr/app/
# 작업 시작 위치
WORKDIR $APP_HOME
# jar 파일 복사
COPY build/libs/*.jar app.jar
# cf docker push, random port 사용할 수 없다
#EXPOSE 80
# 실행
CMD ["java", "-Dspring.profiles.active=${profile:default}", "-jar", "app.jar"]

이 Dockerfile은 Jar파일을 도커 명령어를 이용하여 이미지로 빌드시킬 수 있다.

 

 

 

그 전에, 차후 이미지 관리를 용이하게 해줄 도커 레지스트리부터 생성해보자.

// 도커 네트워크 생성(차후 계속 사용할 네트워크)
$ docker network create --gateway 172.19.0.1 --subnet 172.19.0.0/16 msa-network

// 레지스트리 이미지 다운
$ docker pull registry:latest

// 생성한 네트워크 사용 및 172.19.0.16 IP와 5000 포트로 레지스트리 컨테이너 구동
$ docker run -d -p 5000:5000 --name registry --network msa-network --ip 172.19.0.16 registry:latest

이제 레지스트리까지 완성되었다면, 이미지를 빌드하고 레지스트리에 푸쉬한 뒤, 컨테이너로 구동시키는 명령어까지 배워보자.

 

아무 프로젝트나 만들어서 Jar파일로 빌드하고 따라하거나 혹은 내 블로그에서 Spring boot Application, 혹은 Github에서 Jar파일을 찾기는 쉬울 것이다.

 

자, 이제 이미지로 빌드해보자.

// 이미지 빌드
$ docker build -t myImage -f Dockerfile .

// 이미지 태그 지정
$ docker tag myImage:latest 172.19.0.16:5000/myImage:latest

// 레지스트리에 이미지 푸쉬
$ docker push 172.19.0.16:5000/myImage:latest

이런 식으로 빌드된 이미지를 레지스트리에 푸쉬한다면 사후 관리가 용이해진다.

 

마지막으로, 빌드된 이미지를 컨테이너로 구동시켜보자.

// -d는 백그라운드 실행 -v는 볼륨 마운트
$ docker run -d --name=myService -v /var/log/application:/var/log/application --network msa-network 172.19.0.16:5000/myImage:latest

 

여기까지 간단히 우리의 여행의 배를 점검해보았다.

 

지금 이해가 되지 않더라도 Docker는 계속 사용할 것이고, 그때마다 다시 설명해드릴 것이다.

 

다음엔 'CI/CD 오디세이아 - Kubernetes, CI/CD 여행의 조타수 - 이론편'을 배워보도록 하자.

 

 

Thanks for watching, Have a nice day.

반응형
Comments