And Brain said,
CI/CD Argonautica - Docker, 선박 - 실습 본문
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.
'IT > CICD Argonautica' 카테고리의 다른 글
CI/CD Argonautica - Kubernetes, 조타수 - 실습 [3] (0) | 2023.08.19 |
---|---|
CI/CD Argonautica - Kubernetes, 조타수 - 실습 [2] (4) | 2023.08.12 |
CI/CD Argonautica - Kubernetes, 조타수 - 실습 [1] (0) | 2023.08.05 |
CI/CD Argonautica - Kubernetes, 조타수 - 이론 (0) | 2023.05.13 |
CI/CD Argonautica - Docker, 선박 - 이론 (0) | 2023.03.26 |