도커 (Docker)

도커 ( Docker )


 

[ 도커(Docker)란 무엇인가? ]

도커는 컨테이너 기반의 오픈소스 가상화 플랫폼을 말한다. 

 

컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는 데 필요한 모든 것이 포함되어 있으며,

이를 활용하여 환경에 구애받지 않고 어플리케이션을 신속하게 배포 및 확장할 수 있다.

즉, 어떤 환경의 PC나 서버에서도 안정적으로 구동할 수 있게 도와주는 툴인 것이다.

 

[  도커의 특징 ]

Hyper-V를 통해 게스트 OS 환경 위에서 어플리케이션이 구동되는 가상 머신(Virtual Machine)과 달리 도커는 게스트 OS가 필요 없이 어플리케이션을 구동하는데 필요한 패키지만 존재한다면 구동시킬 수 있다.

도커의 컨테이너는 리눅스 자체 기능을 사용하여 프로세스 단위로 격리 환경을 만들기 때문에 성능 손실이 거의 없다는 장점이 있다. 또한, 가상머신과 달리 어플리케이션을 구동하는 데 필요한 라이브러리 및 실행 파일만 존재하기 때문에 용량이 매우 작고, 이미지로 만들어 배포하는 시간이 매우 빠른 장점도 있다.

 

 

[ 도커의 구조 ]

 

도커도 일반적인 다른 서버와 마찬가지로 물리 서버 + 운영체제가 존재한다.

일반적인 서버는 운영체제 위에 프로그램 또는 데이터가 직접 올라가지만, 도커는 운영체제 위에 도커 엔진이 작동하고

그 위에서 컨테이너들이 동작하는 방식이다.

 


 

[ 도커 파일 ]

 

도커 파일은 도커에서 이미지를 생성하기 위한 용도로 작성하는 파일을 말한다.

도커 파일에는 컨테이너에 설치해야하는 패키지, 소스코드, 명령어, 환경변수 등이 들어있는 하나의 파일이다.

이를 빌드하면 자동으로 도커 이미지가 생성된다.

 

도커 파일의 구성

# FROM : 베이스 이미지 지정
# COPY : 현재 경로에 존재하는 파일들을 모두 추가
# WORKDIR : 작업 디렉토리 변경. cd 와 같은 기능
# RUN : 명령어 실행
# CMD : 컨테이너 시작 시 실행되는 명령어이며, 한 번만 사용 가능

 

기본적인 구성은 아래와 같다.

FROM {이미지 이름} {태그}

RUN 추가 명령어

CMD ["echo", "hello world"]

 

이렇게 만들어진 도커 파일을 build 하면 이미지가 생성이 되는 것이다.

docker build [옵션] <도커파일경로>

 

만약, 삭제하고 싶다면 이미지를 확인한 후, 삭제하면 된다.

docker images
docker rmi [이미지 id]

 


[ 도커 컴포즈 ]

도커 컴포즈 (Docker Compose) 는 여러 개의 컨테이너로 이루어진 시스템을 정의하고 실행하기 위한 도구이다.

 

컴포즈를 사용하면 YAML 파일을 사용하여 어플리케이션의 서비스를 구성할 수 있고,

명령어 한 번으로 시스템 전체를 실행하고 삭제할 수 있다.

 

컴포즈의 구조

컴포즈의 파일명은 docker-compose.yml 이다.

 

컴포즈 파일을 작성하는 법은 다음과 같다.

  1. 컴포즈 버전을 명시하고, services,  networks, volumes를 기재한다.
  2. 상하 관계는 들여쓰기로 표시한다.
  3. 여러 항목을 기재하려면 앞에 '-'를 기재한다.
  4. 주석은 # 를 사용한다.
  5. 문자열은 ' ' 혹은 " " 로 표시한다.
services 컨테이너 정의
networks 네트워크 정의
volumes 볼륨 정의
image 이미지 지정
ports 포트 설정
environment 환경변수 설정
depends_on 다른 서비스에 대한 의존 관계 정의
restart 컨테이너 종료 시 재시작 여부

 

위 표는 일부 항목들에 대한 설명이다.

이외에도 많은 항목들이 존재하기 때문에, 자세한 설명은 공식 문서를 참조하는 것이 좋을 것이다.

[ 도커 컴포즈 공식 문서 ]

 

[ 도커 컴포즈 명령어 ]

 

이미지와 컨테이너 생성

docker-compose up

 

이미지 실행 종료 및 컨테이너 삭제

docker-compose down

 

볼륨 포함 삭제

docker-compose down -v

 

[ 도커 명령어 ]

컨테이너 생성

docker create <옵션> --name <컨테이너 이름> <이미지 Repository>

 

컨테이너 삭제

docker rm <컨테이너 이름>

 

컨테이너 접속

docker exec -it <컨테이너 이름> /bin/bash

 

컨테이너 빠져나오기 - 01

1) 종료하면서 빠져나오기

exit 또는 Ctrl+D

 

2) 가동되는 상태에서 접속만 종료하기

Ctrl + P 후 Q

 

컨테이너 실행 또는 종료

docker start <컨테이너 이름>
docker stop <컨테이너 이름>

 

컨테이너 목록 확인 (가동 중)

docker ps

 

모든 컨테이너 목록 확인

docker ps -a