# Docker ?
Docker 란 "컨테이너" 기술을 활용하여 어플리케이션을 배포하고 관리하기 위한 오픈소스 프로젝트 이다.
* Container ?
도커를 살펴보기 전에 알아야 하는 것이 컨테이너에 대한 개념이다.
- Traditional Deployment
웹/앱 서비스가 시작되던 초창기엔, 개별 어플리케이션을 배포하기 위해서는
한 대의 물리적 서버에 어플리케이션을 올려서 관리를 해야 했고,
각 어플리케이션에 대한 서버의 리소스 사용량을 제한하기 위한 제한점이 따로 없었다.
그래서, 어느 한쪽의 어플리케이션이 큰 리소스를 차지하면, 다른 어플리케이션은 당연히 지연되거나 사용이 불가능했다.
이에 대한 대책으로 여러대의 물리적 서버를 둬서, 각각의 어플리케이션을 관리하였으나,
서버 자체를 여러대 증설하는것은 비용이 매우 크게 드는 단점이 있었다.
- Virtualized Deployment
가상화 시스템이란 한 대의 물리적 서버 위에, 가상 머신(VM) 을 여러대 구동시킬 수 있게 해주는 기술이다.
이 기술을 사용하면, 앞서 언급한 여러대의 물리적 서버를 두는 문제를 해결해 줄 수 있다.
또한 각각의 VM 이 어플리케이션을 따로 관리하기 때문에, 어플리케이션이 다른 어플리케이션에 접근하는 것을 막아, 보안상의 이점도 가져올 수 있었다.
기존보다 확장성을 늘릴 수 있고, 독립적인 관리가 가능하여 효율성을 높였으나,
Virtualized Deployment 의 그림을 보면 알 수 있지만,
OS 위에 또다른 OS 를 올리는 형식이기 때문에, 사람들은 이런 불필요한 중첩을 제거할 방법을 찾기 시작했고,
그에 대한 대안으로 나온것이 바로 컨테이너 기술이다.
- Container Deployment
컨테이너 기술은 VM 기술과 유사하지만, 다른 것은 VM 처럼 OS 위에 또 다른 OS 를 올리는게 아니라
하나의 OS 만 두고 어플리케이션만 컨테이너 단위로 해서 따로 관리를 하는게 차이가 있다.
컨테이너 기술은 VM 처럼 컨테이너별로, 파일시스템, CPU, memory 등의 기능을 갖고 있으며,
또한 서버의 환경에 종속적이지 않다 (예를들면, 현재 서버 OS 가 CentOS 인데, Ubuntu 용 으로 컨테이너를 올려도 아무 상관없이 돌아간다는 것)
도커와 같은 컨테이너 기술의 장점을 보자면,
1. 높은 확장성, 쉽게 개발 서버를 구축할 수 있으며, 특정 환경에 종속되지 않고 실행 가능함
2. CI/CD 가 용이해짐
3. 이미지 생성이 VM 방식보다 편리해짐
4. 개발과 운영 부분에서 분리 가능
등 이외에도 많은 장점이 있다.
그리고 컨테이너 기술의 도입이후,
수많은 컨테이너를 관리해야될 필요성이 생겼고,
(구글의 경우 2014년 매주 20억개의 컨테이너를 관리했다고 한다)
그래서 차후에 등장한게 쿠버네티스 이다.
# Docker 내부 훑어보기
- Docker Engine
도커의 엔진은 위 그림처럼 client-sever application 의 구조로 되어 있다.
가장 핵심적인 부분은 docker daemon 이라 불리고, 여기에 접근하고자 하는 경우 dockerd 명령어를 사용해서 접근한다.
REST API 의 경우 일종의 인터페이스 같은 역할을 수행하는데, 사용하고자 하는 프로그램들이 daemon 과 연결되도록 해준다.
Client 부분은 docker CLI 를 통해 관리되고, docker 명령어를 사용해서 접근한다.
Daemon 이 관리하는 대상에는 image, network, volume, container 같은 Docker Object 들이 있다.
- Docker Architecture
Engine 부분에서 간단하게 설명했던 부분을 좀 더 구체화하여 도식화한 그림이다.
용어에 대해서 좀 짚고 가야 하는데,
1. Image
여기서 이미지란, 컨테이너 실행에 필요한 파일들과 여러가지 설정값을 가지고 있는 것을 의미한다.
컨테이너는 이미지를 실행한 대상으로 볼 수 있고, 이미지 자체로는 수정이 불가능하며, 상태값 또한 가지지 않는다.
같은 이미지에서 다수의 컨테이너를 생성할 수 있으며, 각 컨테이너가 서로 다른 값을 가질 수 있다.
2. Registry
Registry 란 한마디로 이미지를 관리하는 저장소 같은 개념이다.
직접 Registry 를 만들어서 관리할 수도 있고, Docker Hub 에 올려서 관리할 수도 있으며,
Official Image 를 받아 올 수도 있다.
3. Volume
Volume 은 도커 컨테이너에 의해 생성되는 일종의 저장소 같은 곳으로, 컨테이너가 사용하는 공간이다.
volume 또한 docker 가 관리하기 때문에, 호스트 환경의 디렉토리 구조에 종속적이지 않다.
# Docker 명령어
Docker 에서 사용되는 몇가지 기본 명령어들을 서술했다.
- 이미지 관련 명령어
1. 이미지 리스트 보기.
docker images [OPTIONS] [REPOSITORY[:TAG]]
|
cs |
2. 이미지 검색
docker search [OPTIONS] TERM
|
cs |
3. 이미지 받아오기
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
|
cs |
4. 이미지 삭제
docker rmi [OPTIONS] IMAGE [IMAGE...]
|
cs |
- 컨테이너 관련 명령어
1. 컨테이너 목록 보기
docker ps [OPTIONS]
|
cs |
2. 컨테이너 실행
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
|
cs |
3. 컨테이너 시작
docker start [OPTIONS] CONTAINER [CONTAINER...]
|
cs |
4. 컨테이너 재시작
docker restart [OPTIONS] CONTAINER [CONTAINER...]
|
cs |
5. 컨테이너 접속
docker attach [OPTIONS] CONTAINER
|
cs |
6. 컨테이너 정지
docker stop [OPTIONS] CONTAINER [CONTAINER...]
|
cs |
7. 컨테이너 삭제
docker rm [OPTIONS] CONTAINER [CONTAINER...] | cs |
이보다 훨씬 더 많은 명령어들이 있고,
각각의 명령어의 옵션 값도 상당히 다양한데,
이에 대한 자세한 부분을 보고 싶으면 docs.docker.com/reference/ 를 보기 바란다.
# Docker 설치
윈도우 유저의 경우
- steemit.com/kr/@mystarlight/docker
리눅스(우분투) 의 경우
- docs.docker.com/engine/install/ubuntu/
Mac OS 의 경우
- kamang-it.tistory.com/entry/Docker-%EC%84%A4%EC%B9%98-Mac%ED%8E%B8
을 참조.
- References
1. subicura.com/2017/01/19/docker-guide-for-beginners-1.html
2. zzsza.github.io/development/2018/04/17/docker-kubernetes/
'Docker, Kubernetes' 카테고리의 다른 글
Docker - Container 생성과 관리 (0) | 2021.01.12 |
---|