나는 도커를 어떻게 활용하고 있을까?

박경현·2025년 1월 29일
0

최근에 GCP의 Cloud Run을 활용하기 위해 Dockerfile로 이미지를 만들고 그걸 배포해서 사용하는데 관련되서 정리를 해보려고 합니다.

핵심 질문들
1. 왜 사용하고 있는지?
2. 어떻게 사용하고 있는지?
3. 사용하고 어떠한 이점이 있는지?

일단 도커 정리 먼저 하고 가자!!

위의 키워드들을 정리하기 전에 일단 Docker가 무엇이고 관련된 키워드들에 대해서 정리했습니다.

도커란?

도커는 쉽게 말해서 프로그램을 실행하는데 필요한 모든 환경(코드, 라이브러리, 설정 등)을 담아둔 컨테이너입니다.
도커는 어떠한 환경에서든지 프로그램이 동일하게 실행하게 해줍니다!!

그렇다면 컨테이너란??

위에 모든 설정을 담아둔 컨테이너라고 했는데
컨테이너 - 개별 SW실행에 필요한 실행환경을 독립적으로 제공하고 운용하게 해주는 기술입니다.

운영체제 수준에서 격리된 환경을 제공합니다!!

컨테이너 전에 Image가 있다!!

Image - 모든 환경을 담아든 그러니까 컨테이너 실행에 필요한 파일과 설정값들을 포함하는 템플릿입니다.

Docker의 이미지들은 레이어방식으로 저장되며, 기존 이미지에 변경이 생기면 해당 부분만
새로운 레이어로 추가되어 최소한의 용량만 사용합니다

이미지는 URL방식으로 관리됩니다.

그래서 저는 아래처럼 URL로 적고 push를 해서 해당 url인 GCP Artifact Registry에 이미지를 올립니다!!
us-central1-docker.pkg.dev/python-gcp/lingualens/lingualens-service:latest

Dockerfile로 이미지 만들기

Dockerfile - 도커 이미지를 만들기 위해 사용함

FROM       ubuntu:16.04   # 베이스 이미지
MAINTAINER dwhylee@gmail.com # 도커파일 관리자 지정
RUN        apt-get -y update # 

# 2. A 설치
RUN apt-get -y install A # 

# 3. 소스 복사
COPY . /usr/src/app # 파일이나 디렉토리를 이미지로 복사 

# 4. 패키지 설치 (실행 디렉토리 설정) 
WORKDIR /usr/src/app # RUN CMD ADD COPY등이 이뤄질 기본 디렉토리 설정
RUN     bundle install # 

# 5. 실행 
CMD  ~ # 도커 컨테이너 실행되었을때 명령어를 정의

##### EXPOSE # 컨테이너 실행되었을때 기다릴 리슨포트 지정

아래는 간단하게 도커 관련 명령어를 정리한 것입니다.

docker ps -> 컨테이너 목록 확인
docker stop 컨테이너 -> 컨테이너 확인
docker images -> 이미지 확인
docker pull 이미지 -> 도커 이미지 다운
docker push 이미지 -> 도커 이미지 올리기
docker rm 컨테이너 -> 컨테이너 삭제
docker rmi 이미지 -> 도커 이미지 삭제
docker logs 컨테이너 -> 컨테이너 로그 확인
docker exec 컨테이너 -> exec는 실행중인 컨테이너에 명령어로 추가 실행
docker build ~ -> 도커 빌드하기

어떻게 사용하고 있는지

일단 먼저 전체 흐름도를 보면 아래처럼 되어있습니다

  1. 깃허브에 main브런치로 push를 하면 자동으로 action이 실행됩니다.
  2. 먼저 Dockerfile로 이미지를 만들게 됩니다.
  3. CloudBuild.yaml파일을 통해 도커 이미지를 Artifact Registry에 빌드하고 업로드합니다.
  4. Cloud Run에서 Artifact Registry에 저장된 이미지를 토대로 배포합니다.

한번 더 정리하자면 아래처럼 정리됩니다.

  • GitHub Actions: CI/CD 파이프라인을 설정하고 자동화.
  • Google Cloud Build: Docker 이미지를 빌드하고 Artifact Registry에 저장.
  • Google Cloud Run: 빌드된 이미지를 배포하고 실행.

왜 사용하고 있는지

  • CI/CD를 통해 코드가 푸시될 때마다 자동으로 빌드 및 배포되므로, 개발에만 집중 가능하고 배포하고 팀원 혹은 동기들에게 피드백을 얻을 수 있습니다.

  • 그리고 이건 좀 이상할 수 있는데 다른 취준생보다 클라우드의 이점을 잘 사용한다를 보여줄 수 있는 부분이지 않나 싶어서 애용하고 있습니다...ㅎ

사용하고 어떠한 이점이 있었는지

  • 자동화된 CI/CD파이프라인을 얻을 수 있습니다.
  • 도커를 사용해서 다른 환경에서도 동일한 컨테이너를 실행할 수 있습니다.
  • cloud run으로 서버를 직접 관리 안해도 되고 비용도 사용만큼 지불합니다.

피드백

오랜만에 피드백을 적는거 같은데 이제 도커를 나의 방식대로 사용중이지만
현업에서는 어떻게 사용하는지 제대로 배워보고 활용해보고 싶다는 생각도 강하게 듭니다.

특히 쿠버네티스는 진짜 서비스에서 활용하는것을 보고 싶어서!!! 도커와 관련된 부분들 공부와 실습은 꾸준히 해야겠습니다.

profile
SW로 문제를 해결하려는 열정만 있는 대학생

0개의 댓글