반응형
도커란?
- 도커는 리눅스 컨테이너를 기반으로 하는 오픈소스 프로젝트다.
- 네임스페이스, 컨트롤 그룹과 같은 리눅스 커널 기능을 이용해서 운영체제 위에 컨테이너들을 생성하고 이를 사용하여 애플리케이션을 생성, 배포 및 실행하도록 설계된 도구
- OS, 백엔드 프로그램, 데이터베이스, 메시지 큐 등 무엇이든 컨테이너로 추상화할 수 있게 해줌
도커가 주목받은 이유
- 간편한 사용법, 속도, 도커 허브, 모듈성과 확장성
더보기
- 간편한 사용법: 도커는 개발자, 시스템 관리자, 아키텍트 등 누구든지 컨테이너의 이점을 이용해서 손쉽게 이동성 있는 애플리케이션을 생성, 테스트 할 수 있도록 만들어졌다. 누구든 애플리케이션을 자신의 랩탑에서 간단히 패키징하고, 공용 클라우드, 개인용 클라우드, 혹은 bear metal에서 보존된 상태의 애플리케이션을 실행해 볼 수 있도록 해주는 것이다.
- 속도: 도커는 매우 가볍고 빠르다. 컨테이너는 커널에서 돌아가는 샌드박스화된 환경일 뿐이어서, 더 적은 자원을 소비한다. 매번 하나의 완전한 가상 운영체제를 부팅해야하는 VM과는 달리, 도커 컨테이너는 몇 초면 실행시킬 수 있다.
- 도커 허브(Hub): 도커 허브는 “도커 이미지들의 앱스토어” 같은 일종의 도커 생태계로, 유저들이 자유롭게 사용할 수 있다. 도커 허브에는 커뮤니티에 의해 생성되어 바로 사용 가능한 수만개의 이미지들이 있고, 아주 쉽게 필요한 이미지를 찾을 수 있을 뿐만 아니라 약간의 수정 혹은 수정 없이 바로 사용할 수 있다.
- 모듈성(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 )
도커허브는 위에서 생성한 도커이미지를 저장할 수 있는 저장 공간 입니다.
도커허브에 업로드하여 다른 사람들과 공유할 수 있고, 다른 사람들이 업로드해 놓은 이미지를 가져다가 사용할 수도 있습니다.
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
참고 사이트