
컨테이너 인프라 환경
- 컨테이너
- 하나의 운영체제 커널에서 다른 프로세스에 영향을 받지 않고 독립적으로 실행되는 프로세스 상태
- 이렇게 구현된 컨테이너는 가상화 상태에서 동작하는 프로세스보다 가볍고 빠르게 동작
- 컨테이너 인프라 환경을 지원하는 도구
- 도커, 쿠버네티스, 젠킨스, 프로메테우스, 그라파나 등등..
Docker
- 컨테이너 기반의 오픈소스 가상화 플랫폼
- 컨테이너 환경에서 독립적으로 애플리케이션을 실행할 수 있도록 컨테이너를 만들고 관리하는 것을 도와주는 컨테이너 도구
- 도커로 애플리케이션을 실행하면 운영체제, 환경에 관계없이 독립적인 환경에서 일관된 결과를 보장

- 기존 VM은 하이퍼바이저를 이용해 GuestOS를 만든다. 즉, GuestOS를 구동하려면 HostOS를 거쳐야 한다.
- 때문에 HostOS, Guset OS 둘다 성능이 떨어진다.
- 도커의 컨테이너는 필요한것만 담아서 구동하기 때문에 생성할때 용량 자체가 대폭 줄어든다.
- 하나의 서버에 여러개의 컨테이너를 실행하면 서로 영향을 미치지 않고 독립적으로 실행되어 마치 가벼운 VM과 같은 느낌을 준다.
- 실제로 컨테이너를 만드는데 걸리는 시간은 1~2초 밖에 걸리지 않는다.
- 도커 설치 방법
https://docs.docker.com/engine/install/ubuntu/
Image
- 컨테이너를 실행할 때 필요한 파일과 설정, 라이브러리 등을 포함하고 있다.즉, 컨테이너를 실행하기 위한 모든 정보를 담고 있다.
- 이미지를 로컬에서 관리도 가능하고, DockerHub에 등록하여 Docker Repository에 저장소를 만들어 관리도 가능하다.
Container
- Image를 고립된 환경에서 개별적인 시스템 안에서 실행할 수 있는 공간이다.
- 즉 이미지를 이용해 어플리케이션이 구동된다.
Dockerfile
- 컨테이너를 어떻게 만들어야 하는지에 대한 설명서 역할
- 파일의미 정리
- FROM
- base 이미지
- WORKDIR
- /app 으로 directory 전환
- COPY
- ex) npm,yarn,gradle 등등
- COPY . .
- 다 들고 온다.
- RUN
- npm으로 빌드
- shell 에서 커맨드를 실행하는 것처럼 이미지 빌드과정에서 필요한 커맨드를 실행하기 위해 사용
- ENV
- 키/값
- 환경변수를 설정하기 위해서 사용한다.
- ARG
- 이름
- docker build 커맨드로 이미지 빌드시 —build-arg 옵션을 통해 넘길 수 있는 인자를 정의하기 위해 사용
- EXPOSE
- 포트
- 네트워크 상에서 컨테이너로 들어오는 트래픽을 리스닝하는 포트와 프로토콜을 지정하기 위해서 사용된다. 프로토콜은 TCP UDP 설정 가능하며, default는 TCP
- docker run -p 옵션을 통해 호스트 컴퓨터의 특정 포트를 포워딩
- CMD
- 커맨드,파라미터1,파라미터2
- 해당 이미지를 컨테이너로 띄울 때 디폴트로 실행할 커맨드나 ENTRYPOINT 명령문으로 지정된 커맨드에 디폴트로 넘길 파라미터를 지정할 때 사용
- CMD 명령문이 많은경우 ENTRYPOINT 명령문과 같이 사용한다. 이건 커맨드를 지정하고 CMD 명령문으로 디폴트 파라미터를 지정해주면 유연하게 사용가능
- FROM
Docker Compose
- docker-compose.yml
- 단일 서버에서 여러개의 컨테이너를 하나의 서비스로 정의해 컨테이너를 묶어서 관리할 수 있는 작업환경을 제공한다.
- 예를들어 프론트엔드 컨테이너와 백엔드 이미지가 각각 있다면, 이를 컴포즈 해주면 실행된 프론트엔드 컨테이너와 백엔드 컨테이너는 같은 네트워크 상에 존재하게 된다.