database by narae :p

도커 Docker 정리 1 본문

개발 노트

도커 Docker 정리 1

dbbymoon 2020. 5. 16. 16:01

- 컨테이너형 가상화 기술을 구현하기위한 상주 애플리케이션
- 이 애플리케이션을 조작하기 위한 명령행 도구(CLI)
로 구성되는 프로덕트.


애플리케이션 배포에 특화되어 있기 때문에 애플리케이션 개발 및 운영을 컨테이너 중심으로 할 수 있다.
- 컨테이너 : 도커가 만들어내는 게스트 운영체제

 

# 특징 

## 개발환경 구축

로컬 환경에 도커만 설치하면 몇줄짜리 구성파일(Dockerfile)과 명령어 한 줄로 애플리케이션이나 미들웨어가 이미 갖춰진 테스트용 가상환경(도커 컨테이너)을 빠르게 구축할 수 있다.
가상화 소프트웨어와 비교해도 오버헤드가 적어진다는 장점이 있다.

 

## 운영 환경

도커는 개발 후 운영 환경에 대한 배포나 애플리케이션 플랫폼으로 가능하다. 
기존 가상화 소프트웨어보다 더 가볍게 동작하기 때문에, 테스트 환경 뿐만 아니라 운영 환경에서도 컨테이너를 사용할 수 있다.

 

## 이식성

로컬 머신의 도커 환경에서 실행하던 컨테이너를 다른 서버에 있는 도커 환경에 배포하거나, 반대로 다른 서버의 도커 환경에서 동작하던 컨테이너를 로컬로 가져올 수 있다.
즉, 개발 환경과 운영 환경을 거의 동등하게 재현할 수 있다.

 

## 컨테이너 간의 연동
## 클라우드 플랫폼 지원 

 

# 도커의 기본 개념

## 컨테이너 가상화 기술

가상화 소프트웨어 없이도 운영체제의 리소스를 격리해 가상운영체제로 만들 수 있다.
이 가상운영체제를 '컨테이너'라고 한다. 
컨테이너를 만들면서 발생하는 오버헤드는 다른 가상화 소프트웨어보다 더 적다. 빠르게 시작 및 종료할 수 있고 이에 들어가는 리소스도 적은 편이다. 
컨테이너를 쉽게 만들고, 사용하고 버릴 수 있다.
<-> 호스트 운영체제형 가상화 : 운영체제 위에서 가상화 소프트웨어를 사용해 하드웨어를 에뮬레이션 하는 방법으로 게스트 운영체제를 만드는 방식. 컨테이너 가상화와 비교했을 때 구조적으로 오버헤드가 더 크다.

 

### LXC (LinuX Containers) 

단일 컨트롤 호스트 상에서 여러 개의 고립된 리눅스 시스템(컨테이너)들을 실행하기 위한 운영 시스템 레벨 가상화 방법
=> 시스템 컨테이너. 단순한 리소스 분리 목적으로 애플리케이션 배포 용도는 아님
=> LXC에서 복제한 애플리케이션을 다른 LXC 호스트에서 실행했을 때 LXC 설정 차이로 인해 기대했던 대로 애플리케이션이 동작하지 않는 등의 문제가 있음

 

### 도커 vs LXC

- 호스트 운영 체제의 영향을 받지 않는 실행 환경 (Docker Engine을 이용한 실행 환경 표준화)
- DSL(Dockerfile)을 이용한 컨테이너 구성 및 애플리케이션 배포 정의
- 이미지 버전 관리
- 레이어 구조를 갖는 이미지 포맷(차분 빌드가 가능)
- 도커 레지스트리 (이미지 저장 서버 역할을 함)
- 프로그램 가능한 다양한 기능의 API

 

## Dockerfile

컨테이너 정보를 Dockerfile 코드로 관리
이 코드를 기반으로 복제 및 배포가 이루어지기 때문에 재현성이 높다.
도커 이전에는 애플리케이션을 호스트 운영체제 또는 게스트 운영체제에 배포하여, 애플리케이션이 운영체제의 영향을 강하게 받는다. 
도커는 컨테이너에 애플리케이션 실행환경이 함께 배포되는 방식. 아예 실행환경 자체를 배포하는 방식. 
=> 따라서 도커는 환경의 영향을 덜 받고 배포가 간편.

 

 

# 도커 스타일 체험하기

1. helloworld 쉘 스크립트 파일 생성

#!/bin/shecho 

"Hello World"


2. Dockerfile 생성

FROM ubuntu:16.04

COPY helloworld /usr/local/bin
RUN chmod +x /usr/local/bin/helloworld

CMD ["helloworld"]


- FROM 절 : 컨테이너의 원형(틀) 역할을 할 도커 이미지(운영체제)를 정의 
    FROM openjdk:8-jre
- RUN 절 : 도커 컨테이너 안에서 어떤 명령을 수행하기 위한 것
    RUN adduser -disabled-password -gecos '' grip
- COPY 절 : 파일을 도커 컨테이너 안의 경로에 복사
- CMD 절 : 완성된 이미지를 도커 컨테이너로 실행하기 전에 먼저 실행할 명령을 정의

3. 도커에 이미지 빌드

docker image build -t helloworld:latest .


4. 도커 컨테이너 실행

docker container run helloworld:latest

'개발 노트' 카테고리의 다른 글

JPA @OneToMany - targetEntity  (0) 2023.03.09
도커 + ELK 분산 환경 셋팅  (0) 2020.05.24
더블 디스패치 double dispatch  (0) 2020.01.07
user level lock  (0) 2019.06.12
JPA 정리하기  (0) 2019.06.07