터칭 데이터

Docker & K8S - Docker 프로그램 개발 프로세스 본문

Docker & K8S

Docker & K8S - Docker 프로그램 개발 프로세스

터칭 데이터 2023. 12. 18. 12:57

 

 

Docker로 소프트웨어를 패키징(빌드)하는 프로세스를 알아보자

도커로 패키지를 만들고(빌드) 만든 패키지를 컨테이너로 실행하고 다른 사람과 공유도 해보는 프로세스를 알아보겠습니다.

 

 

 

 

 

 

 

 

하이레벨 Docker 사용 프로세스

 

먼저 대상 소프트웨어를 선택

다수의 컴포넌트로 구성되는 소프트웨어라면 각각이 Docker Image로 만들어져야할 수도 있음

 

이를 Docker Image로 빌드하자: Dockerization이라고 부름

Dockerfile이란 텍스트 파일로 세부 정보를 기술

    - 해당 소프트웨어를 이미지로 바꾸기 위한 Docker에게 주는 명령들을 포함


Docker Image: 하나의 Docker Container안에서 실행됨! 

    - Dockerfile을 기준으로 만들어지며 소프트웨어를 실행하기위해 필요한 모든 것을 포함

 

 

docker build -t tag(이미지 이름과 버전을 설정)


Docker 명령어 종류

FROM: 뭘 기반으로 시작되었는지. (Python, Linux 등)
RUN: 어떤 프로그램을 설치할 것인지.
ENTRYPOINT, CMD: 프로그램을 실행.

 

 

 

 

 

 

 

 

 

 

Docker Image의 구성 요소

아래 정보와 설치 관련 실행 순서등이 Dockerfile에 기술됨
Docker Image는 다수의 파일로 구성됨 (“docker image ls”)

 

기본 OS (리눅스라면 우분투, 데비안 등등)와 같은 소프트웨어의 실행환경

 

소프트웨어 자체 (코드)

 

소프트웨어가 필요로 하는 라이브러리

 

파일 시스템 스냅샷: 이는 스택화된 형태로 구현됨 (뒤에서 더 설명)

 

환경 설정 변수: 빌드할 때 변수와 실행 때 변수 두 가지가 존재 (ENV, ARG)

 

메타 데이터: 이미지 자체에 대한 정보 (버전, 작성자, 설명 등등)

 



 

 

 

 

 

 

 

 

 

 

 

 

 

Docker Image의 실행

 

Container를 통해 Docker Image안의 소프트웨어를 실행

Container는 자체 파일 시스템을 가진 특수한 프로세스로 이미지의 파일 시스템이 로딩됨

 

Image를 Container 안에서 실행

docker run …

run: 주어진 이미지를 처음 컨테이너에 띄우는 것

exec: 이미 실행되어있는 컨테이너에게 실행 명령을 내리기

 

docker run and docker exec are two different Docker commands with distinct purposes:

1. docker run: This command is used to create a new container and start it. For example, docker run ubuntu will create a new container from the ubuntu image and start it. If you provide a command at the end, like docker run ubuntu echo "Hello, World!", it will run that command in the new container, then stop the container.

2. docker exec: This command, on the other hand, is used to run a command in an already running container. For example, if you have a running container with the ID abc123, you could use docker exec abc123 echo "Hello, World!" to run the echo command in that container.

In summary, docker run is for starting new containers, while docker exec is for executing commands in running containers.

 

 

 

 

 

 

 

 

 

 

 

 

Docker Image의 등록: Docker Hub

 

 

Docker Registry는 Docker Image들의 보관소

On-prem registry와 Cloud registry가 존재
docker hub이 가장 유명 (Github과 매우 유사)

 

여기에 등록을 하면 회사내 혹은 퍼블릭하게 이미지를 공유 가능

Git과 같이 Pull, Push 가능

 

 

 

 

 

 

 

 

 

 

Docker Hub이란 무엇인가? (1)

 

https://hub.docker.com/

 

Docker가 제공해주는 서비스로 Docker Image를 공유하고 찾기 위한 서비스

 

 

이미지로 설명드리자면 'keeyong'이라는 repository가 있고 그 아래에 hangman-mysql과 hello-world-docker 등과 같은 다양한 Image들이 존재합니다. Public이므로 모두가 다운 받을 수 있고 Team이나 Organization을 만들어 팀원, 회사원들끼리만 공유할 수도 있고 유료 서비스를 결제해 Private한 repository를 사용할 수도 있습니다.

 

 

 

 

 

 

 

 

 

Docker Hub이란 무엇인가? (2)

 

 

좌측 상단의 검색창을 이용해 public 혹은 내가 권한이 있는 private 이미지를 검색할 수 있습니다.

 

Teams & Organizations

 

Public과 Private Repo 제공

 

Official Images

 

Github과 연동을 통한 Automated Build 제공

 

 

 

 

 

 

 

 

 

 

 

 

Docker Hub이란 무엇인가? (3)

개발자가 소프트웨어 개발이 끝나면 Dokerize로 Docker 이미지를 만듭니다.

 

만든 이미지를 테스트 환경에서 실행해봅니다.

 

아무 문제가 없다면 내부, 외부 Registry에 로딩합니다.

 

이제 Production단에서 Docker Pull한 뒤 서버들에서 실행합니다.

 

서버의 수와 DevOps 역량에 따라 일반 서버를 사용하거나 K8S 클러스터를 사용할 수도 있습니다.