Docker 란?
- Go 언어로 작성된 리눅스 컨테이너 기반 오픈소스 가상화 플랫폼.
가상화란?
- 컴퓨터 리소스의 추상화를 일컫는 광범위한 용어
- 하나의 컴퓨팅 자원을 마치 여러 개인 것처럼 쪼개서 사용하거나 혹은 여러 개의 컴퓨팅 자원을 묶어서 하나의 자원인 것처럼 사용하는 것.
- 대표적으로 GCP(Google Cloud Platform), AWS 등이 있다.
가상화가 왜 등장했을까?
서버 관리자 👷♂️
👷♂️: 흐음… 1서버 CPU 사용률이 10프로… 2서버 10프로… 3서버 10프로…
👷♂️: 세개 그냥 묶어서 하나의 서버에 돌릴까?
👷♂️: 서로 서비스 OS도 다르고 문제 되려나?
👷♂️: 안정성도 높이고, 리소스 낭비도 안되게 하려면 어떻게 할까?
위와 같은 흐름으로 등장한게 가상화 플랫폼 VM(Virtual Machine)이다.
그렇다면 다시 상기시키자면
우리가 알아보려는 Docker는 리눅스 컨테이너 기반 오픈소스 가상화 플랫폼.
이제 컨테이너를 알아보자
컨테이너란?
컨테이너는 가상화 기술 중 하나로, OS 레벨의 가상화로 프로세스를 격리시켜 동작하는 방식
그렇다면 기존에 OS를 가상화 시키는 VM과 차이점이 무엇일까?
VM 가상화 플랫폼 vs Docker 가상화 플랫폼
- VM 가상화 플랫폼
- Docker 컨테이너 기반 가상화 플랫폼
Docker는 어떻게 필요한 Binary만 올리게 될까?
이때 등장하는 개념이 Docker Image 이다.
Docker Image
Docker Image란 컨테이너를 실행할 수 있는 실행파일, 설정 값 등을 가지고 있는 것
이미지는 상태값을 가지지 않고 변하지 않는다. (Immutable)
이미지는 컨테이너를 실행하기 위한 모든 것을 가지고 있기 때문에, 더 이상의 의존성 파일을 컴파일하고 새로운 파일을 설치할 필요가 없다.
이렇게 만들어진 이미지들을 통해 Docker 컨테이너에 올려서 실행하게 되는 것이다.
Docker Image는 어떻게 만들어 질까?
우분투 OS 이미지에 필요한 Layer A, B,C 가 존재한다.
Nginx 이미지에 필요한건 Layer A, B, C 와 Ngnix 이다.
그렇다면 Ngnix 이미지를 만들기 위해서는 우분투 이미지에 Ngnix만 추가하면 된다.
Web Application 이미지의 경우에는 만들어진 Nginx 이미지에 Web Application Source만 추가하면된다.
더하기 빼기 수학 개념이라고 생각하면 될 것 같다.
아니 그럼 우분투 이미지, Ngnix 이미지 등은 어디서 구함 ㅡㅡ
도커를 궁금해하고 볼 정도면 GitHub는 이미 알고 있으리라 가정하겠다.
Docker 도 똑같이 이미지를 공개해두고 얼마든지 pull 받을 수 있는 Docker Hub가 존재한다.
해당 Docker Hub에는 공개된 이미지의 수가 50만 개가 넘고, Docker Hub의 이미지 다운로드 수는 80억 회에 이른다고 한다.
Docker Hub Container Image Library | App Containerization
난 올라와 있는 이미지 말고 내가 새롭게 만들어야 되는데?
이럴 경우 사용하는것이 Docker File 이다.
Docker File
Docker File은 이미지 생성 출발점으로 이미지를 구성하기 위한 명령어들을 작성하여 이미지를 구성하는 것이다.
FROM jdk8:latest
WORKDIR /app
RUN mkdir /app/nexus-2.14.9-01
RUN mkdir /app/sonatype-work
RUN yum -y install httpd
ENV JAVA_HOME /usr/local/jdk1.8.0_181
ENV PATH=$JAVA_HOME/bin:$PATH
ENV CLASSPATH=.
EXPOSE 3411
ADD run.sh /app/
CMD ["/app/run.sh"]
명령어
|
설명
|
예시
|
FROM
|
기반이 되는 이미지 레이어입니다.
|
ubuntu:14.04
|
MAINTAINER
|
메인테이너 정보입니다.
|
|
RUN
|
도커이미지가 생성되기 전에 수행할 쉘 명령어
|
mkdir /app/nexus-2.14.9-01
|
VOLUME
|
VOLUME은 디렉터리의 내용을 컨테이너에 저장하지 않고 호스트에 저장하도록 설정 데이터 볼륨을 호스트의 특정 디렉터리와 연결하려면 docker run 명령에서 -v 옵션을 사용해야 합니다.
|
-v /root/data:/data
|
CMD
|
컨테이너가 시작되었을 때 실행할 실행 파일 또는 셸 스크립트입니다. 해당 명령어는 DockerFile내 1회만 쓸 수 있습니다.
|
CMD ["/app/run.sh"]
|
WORKDIR
|
CMD에서 설정한 실행 파일이 실행될 디렉터리입니다.
|
|
EXPOSE
|
호스트와 연결할 포트 번호입니다.
|
EXPOSE 3411
|
Docker File 로 이미지 만들기
$ docker build -t [만들고싶은 이미지 이름]
'1.프로그래밍 > 개발' 카테고리의 다른 글
Linux에 MiniKube 설치하기 (0) | 2024.10.29 |
---|---|
Connection Timeout과 Read Timeout (3) | 2024.10.29 |
헤이즐 캐스트 (Hazelcast) 란? (0) | 2024.10.24 |
[NHN Academy] NHN Academy 인증 과정 (9) | 2023.03.24 |
[NHN Academy] NHN Academy 인증 과정 프로젝트 발표 (0) | 2023.03.24 |