개념.log/Docker

Docker 개념 정리(2) - Docker(도커)란?

_2J 2022. 4. 27. 00:14

 

 

도커란?

  • 도커는 리눅스 컨테이너를 기반으로 하는 오픈소스 프로젝트다.
  • 네임스페이스, 컨트롤 그룹과 같은 리눅스 커널 기능을 이용해서 운영체제 위에 컨테이너들을 생성하고 이를 사용하여 애플리케이션을 생성, 배포 및 실행하도록 설계된 도구
  • OS, 백엔드 프로그램, 데이터베이스, 메시지 큐 등 무엇이든 컨테이너로 추상화할 수 있게 해줌

 

도커가 주목받은 이유

- 간편한 사용법, 속도, 도커 허브, 모듈성과 확장성

더보기
  1. 간편한 사용법: 도커는 개발자, 시스템 관리자, 아키텍트 등 누구든지 컨테이너의 이점을 이용해서 손쉽게 이동성 있는 애플리케이션을 생성, 테스트 할 수 있도록 만들어졌다. 누구든 애플리케이션을 자신의 랩탑에서 간단히 패키징하고, 공용 클라우드, 개인용 클라우드, 혹은 bear metal에서 보존된 상태의 애플리케이션을 실행해 볼 수 있도록 해주는 것이다. 

  2. 속도: 도커는 매우 가볍고 빠르다. 컨테이너는 커널에서 돌아가는 샌드박스화된 환경일 뿐이어서, 더 적은 자원을 소비한다. 매번 하나의 완전한 가상 운영체제를 부팅해야하는 VM과는 달리, 도커 컨테이너는 몇 초면 실행시킬 수 있다.

  3. 도커 허브(Hub): 도커 허브는 “도커 이미지들의 앱스토어” 같은 일종의 도커 생태계로, 유저들이 자유롭게 사용할 수 있다. 도커 허브에는 커뮤니티에 의해 생성되어 바로 사용 가능한 수만개의 이미지들이 있고, 아주 쉽게 필요한 이미지를 찾을 수 있을 뿐만 아니라 약간의 수정 혹은 수정 없이 바로 사용할 수 있다.

  4. 모듈성(modularity)과 확장성(scalability): 도커는 어플리케이션의 기능들을 각각의 컨테이너들로 쉽게 분리할 수 있도록 해준다. 예를 들어, 여러분이 Postgres 데이터베이스를 하나의 컨테이너에서 돌리고 다른 하나에서는 Redis 서버를, 그리고 또 하나에서는 Node.js앱을 실행시키고 있다고 가정해보자. 도커를 이용하면 이 컨테이너들을 연결하여 애플리케이션을 만들 수 있다. 각각의 컴포넌트에 대해서 따로 업데이트를 하거나 스케일링을 하기 쉬워지는 것이다.

 

 

 

 

 

 

 

1. 이미지와 컨테이너 ( Image & Container )

 

Class == Image
Instance == Container

Dockerfile은 Image를 만들기 위한 명세이고, Image는 Container를 만들기 위한 본이다.

Container는 사용하기 위해 Image로부터 만들어진 객체이다

 

 

애플리케이션이 동작하기 위해 필요한 각종 요소들을 표준화된 방식으로 묶어 동작할 수 있도록 하는 구조를 컨테이너라고 한다. 이렇게 컨테이너 단위로 묶게 되면, 하나의 컴퓨팅 환경 안에서도 여러 개의 애플리케이션을 효율적으로 나누어서 관리할 수 있게 된다.

 

 

 

 

 

2. 도커파일 ( DockerFile )

  • DSL(Domain-specific language)언어를 이용하여 이미지 생성 과정을 적음
  • Dockerfile 예시
# 어떤 이미지를 기반으로 할지 설정 합니다.
FROM ubuntu:latest

# 이미지 생성자 정보를 입력합니다.
MAINTAINER create@email.com

#local pc에 있는 파일을 복사합니다.
ADD docker/script/start.sh /usr/local/bin/

# 셸 스크립트 또는 명령어를 실행합니다.
RUN ln -s /usr/local/bin/start.sh /start.sh

# 호스트와 연결할 포트 입니다.
EXPOSE 80
EXPOSE 443

#컨테이너가 시작되었을때 실행할 파일 또는 쉘 스크립트 입니다.
CMD ["start.sh"]

 

 

 

3. 도커 허브 ( Docker Hub )

https://hub.docker.com/

 

Docker Hub Container Image Library | App Containerization

We and third parties use cookies or similar technologies ("Cookies") as described below to collect and process personal data, such as your IP address or browser information. You can learn more about how this site uses Cookies by reading our privacy policy

hub.docker.com

 

도커허브는 위에서 생성한 도커이미지를 저장할 수 있는 저장 공간 입니다.

도커허브에 업로드하여 다른 사람들과 공유할 수 있고, 다른 사람들이 업로드해 놓은 이미지를 가져다가 사용할 수도 있습니다.

 

 

 

 

 

 

4. 도커 실행 예제

  • 도커 허브에있는 Nginx 이미지를 실행 하는 예제
## server 와 client로 구분되어있는 것을 확인 할 수 있음
docker version

## nginx 를 띄워보자 nginx는 docker hub에 있는 도커이미지
docker run -d -p 80:80 --name dockertest nginx
docker run -d -it -p 80:80 --name dockertest nginx



## docker file 생성
- Nginx에 내가 생성한 index.html을 실행하는 예제

- index.html 

```html
<html>
<head>
<title> hello world </title>
</head>
<body> <h1> Hello world </h1>
</body>
</html>
  • dockerfile 예제
vi dockerfile
FROM nginx:latest
COPY ./index.html /usr/share/nginx/html
  • 생성한 도커이미지 생성/확인/실행
# 이미지 생성
docker build -t dockertest .
# 이미지 확인
docker images
# 이미지 실행
docker run -itd -p 80:80 -name dockertest dockertest

 

 

 

 

 

예제 코드 출처 : https://kim-dragon.tistory.com/51

참고 사이트

더보기