230506 Docker

Docker


이번 포스팅에서는 Docker에 대해 학습한 내용을 기록하고자 한다.

Docker

Docker는 컨테이너 기술로, 컨테이너를 생성하고 관리하는데 사용된다.

VM

VM과 비교했을때, VM 또한 도커와 같이 환경을 분리하고, 각 환경별로 구체적인 환경설정을 분리하는 것 또한 가능하다. 그리고 구성한 환경 설정을 공유할 수 있고, VM 간의 의존성을 낮출 수 있다.
위의 장점이 있지만, 환경 구성을 위해 각 각의 VM의 기반으로 OS를 설치해야 되기 때문에 시스템의 리소스가 낭비될 수 있으며, 퍼포먼스가 느려지고, 부팅 시간이 길어지는 단점이 있다.

Docker 구성

Docker 엔진 위에 복수의 컨테이너들을 띄워서 구성할 수 있다. 물론 Docker container 내에도 OS를 설치하지만 VM의 OS보다 훨씬 가볍고 빠르다. Share, Re-building, Distribution에 용이하며, apps와 환경을 Encapsulation한다.

Docker image

Container는 이미지를 기반으로 하기 때문에 이미지 생성을 우선 해야한다.
각 각의 이미지에는 개별 파일 시스템이 있기 때문에 Dockerfile이 위치한 경로에 있는 파일들을 Docker의 파일 시스템에 복사해서 처리해줘야 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
FROM node:14

# node:14 이미지 내 파일 시스템의 /app 폴더로 이동
WORKDIR /app

# Dockerfile이 위치한 디렉토리의 package.json파일을 /app폴더에 복사
COPY package.json .

# npm install 명령 실행으로 필요한 module 설치
RUN npm install

# 나머지 파일들(nodejs 관련 파일 복사)
COPY . .

# 3000번으로 Port forwarding
EXPOSE 3000

# node app.mjs 명령으로 nodejs 애플리케이션 실행
CMD [ "node", "app.mjs" ]

Docker image build

위에서 작성한 Dockerfile을 아래 명령을 통해 실행한다.

1
2
3
4
docker build .

# tag name과 함께 build하기
docker build --tag nodejs-sample:0.1 .

build 결과로 IMAGE ID를 얻게 되는데, 해당 아이디로 아래와 같이 docker container를 올릴 수 있다.

1
2
3
4
5
6
# 3000 port에 실행중인 애플리케이션을 외부 로컬 호스트 시스템에 연결을 해줘야한다.
# -p {public port}:{container port}
docker run -p 3000:3000 f8bb01d01812

# container 이름 지정 및 백그라운드로 port forwarding해서 이미지 올리기
docker run --name nodejs-sample -d -p 6000:4000 nodejs-sample:0.1

모든 컨테이너를 Stop & Remove 하기

1
2
3
# -q 옵션은 컨테이너의 아이디만 출력되도록 하는 옵션
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)

Docker foundation

  • Images & Containers
  • Data & Volumes(in Containers)
  • Containers & Networking

Real life

  • Multi-Container Projects
  • Using Docker-Compose
  • Utility Containers
  • Deploying Docker Containers

Kubernetes

  • Kubernetes Introduction & Basics
  • Kubernetes: Data & Volumes
  • Kubernetes: Networking
  • Deploying a Kubernetes cluster

학습 가이드라인

  • Watch the videos & code along
  • Repeat concepts
  • Google, Stackoverflow
  • Ask & Answer in Q&A Section
Author

Lee Hyungi(이현기)

Posted on

2023-05-06

Updated on

2023-05-06

Licensed under

Comments