Docker 기초
Docker에 대한 기본 설명과 Mac에서 실습을 진행하기 위한 글이다.
마지막에 nginx.conf 설명이 있는 이유는, 프론트 소스를 빌드 결과를 nginx에 index.html 디렉토리 하위
에 복사 후 nginx 도커 이미지 기반으로 app이 동작하는 것을 확인하는 것을 실습의 목표로 한다.
VM vs Container
- vm은 OS가 동작하는데 필요한 기능들을 guest OS로 들고 있어야 한다. 용량이 크다.
- vm은 io가 발생하는 경로가 container보다 많다.
- vm이 처리한 io를 결국 host os의 커널이 받아 자신의 드라이버에 맞게 처리 필요하다. (병목 발생)
- container는 host의 os를 공유한다.
Linux kernel features
namespaces
- mnt (파일시스템 마운트) : 호스트 파일 시스템에 구애받지 않고 독립적으로 파일 시스템을 마운트하거나 언마운트 가능
- pid
- net : namespace간 네트워크 충돌 방지 (ex. 중복포트 바인딩)
- ipc : 프로세스간 독립적인 통신통로 할당
- uts (hostname)
- user (UID)
cgroup (Control groups)
자원에 대한 제어를 가능하게 해준다.
- 메모리, CPU, I/O, 네트워크, device 노드(/dev)
장점
- 운영환경과 동일한 환경으로 개발환경 구성이 가능하다.
- Orchestration => scale out
- MSA에 적합
Mac 환경설정
- docker desktop app 설치 및 구동확인 (맥에서 가상화환경을 사용하기 위해 도커 엔진 설치)
1
2
3
4$ docker version
# -i: tty 모드, -t: 대화형 세션, -h: host명
$ docker exec -it redis bash
Dockerfile
- 도커 이미지를 생성하기 위한 절차를 담고 있는 텍스트 파일
- 교육 중 진행한 sample 프로젝트를 docker 컨테이너로 실행해보자.
1
2
3
4
5
6
7
8
9#Dockerfile: sample project
FROM nginx:alpine
COPY nginx.conf /etc/nginx/conf.d/default.conf
COPY ./dist/ /usr/share/nginx/html
#로컬에 image file 생성 [name]:[tag]
$docker build -t sample .
Docker image
- 여러 계층으로 구성되어 있다.
- 각 계층은 읽기 전용 파일 시스템에 있다.
- 계층은 도커파일에 있는 명령마다 생성되며, 이전 계층 위에 위치하게 된다.
1
2
3
4
5
6$docker images
$docker rmi [이미지명]
## UFS (유니온 파일 시스템, 유니온 마운트), 여러 개의 파일 시스템을 겹칠 수 있도록 해준다.
$docker info | grep "Storage Driver"
Docker Registry
이미지를 운영하고 배포하는 역할을 담당하는 서비스, 기본 레지스트리 도커 허브
- docker hub
- private registry
Container
1 | ## 많이 사용하는 command 기준으로 설명 |
참조
설정
1 | #nginx.conf |