개발

[Cloud] Docker란? (Docker의 개념과 기본 사용법)

nova_dev 2022. 3. 31. 00:47
반응형

1. 도커란?

도커는 컨테이너 가상화 기술을 사용한다. 그렇다면 가상화 기술은 무엇일까?

2. 가상화 기술

  • Container (컨테이너형 가상화)
    • 각 컨테이너는 호스트 OS 커널과 바이너리 및 라이브러리를 공유한다.
    • 컨테이너는 VM 보다 구성이 간단하여 훨씬 가볍다.
  • VM (호스트 운영체제형 가상화)
    • 각 가상 머신 내에서 고유한 게스트 운영체제가 실행된다.
    • 해당 운영체제 위에서 어플리케이션이 동작하는 방식이다.

이미지 출처: https://www.netapp.com/blog/containers-vs-vms/

3. 간단하게 Docker 테스트 해보기

3.1. shell script 생성

#!/bin/sh

echo "안녕 도커야!"

3.2. Dockerfile 작성

FROM ubuntu:16.04

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

CMD ["hellodocker"]
  • FROM: 도커 이미지 정의
  • COPY: 쉘 스크립트 파일을 도커 컨테이너 안의 /usr/local/bin에 복사
  • RUN: 도커 컨테이너 안에서 명령어 수행
  • CMD: 완성된 이미지를 도커 컨테이너로 실행하기 전에 먼저 실행할 명령 정의

3.3. 파일 확인

$ls
Dockerfile  hellodocker

3.4. docker 이미지 빌드

$ docker image build -t hellodocker:latest .

3.5. docker image 확인

$ docker images hellodocker
REPOSITORY    TAG       IMAGE ID       CREATED          SIZE
hellodocker   latest    44ce1c5ce5dc   35 seconds ago   135MB

3.7. docker 컨테이너 띄우기

$ docker run hellodocker
안녕 도커야!

3.8. docker 컨테이너 확인

예시와 같이 스크립트를 실행하고 종료된 경우, 컨테이너의 상태가 Exited가 되기 때문에 docker ps로 상태를 볼 수 없고 —all 옵션을 통해 종료된 컨테이너 정보도 확인할 수 있다.

$ docker ps --all | grep hellodocker
369192c285bb   hellodocker       "hellodocker"            2 minutes ago   Exited (0) 2 minutes ago                                                infallible_allen

3.9. docker 컨테이너 삭제

테스트가 끝났으니 컨테이너 찌꺼기를 삭제해주자.

$ docker rm 369192c285bb
369192c285bb

3.10. docker image 확인

테스트가 끝났으니 이미지를 확인해보고 이것도 지워주자. 간단한 테스트지만 우분투 이미지 기반이라 용량이 무려 135MB나 된다.

$ docker images hellodocker
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hellodocker   latest    10b391adfcb7   3 minutes ago   135MB

3.11. docker image 삭제

$ docker rmi hellodocker
Untagged: hellodocker:latest
Deleted: sha256:10b391adfcb7c7640b8cde4de4230f344233d17ef7d98748129f85a4aab1a8ee

4. Docker를 왜 사용할까?

  • 변화하지 않는 실행환경으로 멱등성 확보
  • 코드를 통한 실행환경 구축 및 애플리케이션 구성
  • 실행 환경과 애플리케이션의 일체화로 이식성 향상
  • 시스템을 구성하는 어플리케이션 및 미들웨어의 관리 용이성

즉, docker를 통해 인프라 환경이 원인이 되는 말썽을 최소한으로 줄일 수 있다. (컨테이너를 쓴다고 전부 사라지지는 않지만, 최소한 환경 차이나 서버 설정에 의한 문제는 잡을 수 있고, 서버의 구축 속도도 확연히 차이가 난다.)

5. 도커 컨테이너 오케스트레이션 시스템

5.1 도커 컴포즈(Docker Compose)

  • 여러 컨테이너를 사용하는 어플리케이션을 쉽게 관리할 수 있도록 하는 도구 (단일 서버에서 여러 컨테이너를 관리할 때 사용)
  • yaml 포맷으로 작성된 설정 파일로 컨테이너를 정의하거나 컨테이너 간의 의존 관계를 정의해 시작 순서를 제어할 수 있음

예시) 몽고 서버 docker-compose 파일

$ cat compose.yml
version: '3.8'
services:
  mongodb:
    image: mongo:4.0.24
    container_name: mongo-test
    restart: always
    ports:
      - 27017:27017
    volumes:
      - ./mongodb:/data/db
    environment:
      - MONGO_INITDB_ROOT_USERNAME=root
      - MONGO_INITDB_ROOT_PASSWORD=1234
      - MONGO_INITDB_DATABASE=test

5.2 도커 스웜 (Docker Swarm)

  • 여러 서버에 걸쳐 있는 여러 컨테이너를 관리할 수 있도록 한 도구
  • 컨테이너 오토스케일링, 리소스를 활용한 컨테이너 배치나 로드밸런싱 기능 등 활용 가능

5.3 쿠버네티스

  • 컨테이너 오케스트레이션의 끝판왕
  • 도커 컴포즈와 도커 스웜의 장점을 모두 수용하고 다양한 오케스트레이션 기능을 추가로 지원한다.
  • 쿠버네티스와 함께 사용할 수 있는 다양한 툴들이 있다.

 

본 내용은 `도커/쿠버네티스를 활용한 컨테이너 개발 실전 입문` 책을 공부하고 테스트하며 작성한 내용이라 책의 내용과 겹치는 내용이 있습니다. (저작권에 문제가 되면 내리겠습니다.) 도커를 처음부터 잘 설명해둔 책이라 추천드립니다. 🙇🏻‍♂️​

6. 출처

도커/쿠버네티스를 활용한 컨테이너 개발 실전 입문 - YES24

 

도커/쿠버네티스를 활용한 컨테이너 개발 실전 입문 - YES24

『도커/쿠버네티스를 활용한 컨테이너 개발 실전 입문』은 도커와 쿠버네티스에 대한 기초 실력을 키우고, 컨테이너에 친화적인 애플리케이션을 개발하기 위한 포인트, 더 나아가 실제 운영 환

www.yes24.com

Containers vs. Virtual Machines (VMs): What's the Difference? | NetApp Blog|Containers vs. Virtual Machines (VMs): What's the Difference? | NetApp Blog

반응형

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

[Kafka] Kafka란?  (0) 2022.06.18
[Redis] Redis 설치(docker)와 redis-cli 사용법  (0) 2022.03.29
[Spring Cloud] Hystrix 파헤치기  (0) 2021.11.07
[Golang] Go 언어 빠르게 훑어보기  (0) 2021.10.26
gradle  (0) 2021.08.16