프로그래밍/도커

docker cli vs Dockerfile vs docker-compose

Hwan2 2021. 9. 19. 21:12
반응형

 

 

1. Docker

docker cli는 단일 컨테이너를 위한 명령어들을 제공합니다.

예를들어 이미지를 생성하려면, $ docker pull [IMAGE]

컨테이너를 생성하려면 $docker create [OPTIONS] IMAGE [COMMAND]

 

즉, 단일 컨테이너에 대해서 만들거나, 실행하거나 하는 용도로 사용되는 명령어입니다.

 

2. Dockerfile

도커 파일은 이미지를 생성할 때, 해당 이미지 안에 기본적으로 어떤 소프트웨어를 설치할지 결정하는 도구입니다.

예를들어 $ docker pull ubuntu 를 사용하여 이미지를 받으면 우분투만 들어있는 깡통 이미지만 받아와 집니다.

해당 이미지에 저희는 컨테이너를 만들고 접속하여 원하는 소프트웨어를 설치하는 작업을 거쳐야 합니다.

 

하지만 Dockerfile을 사용하면, 이미지 안에 어떤것들을 설치할지 결정할 수 있으며 사용자가 작성한 대로 이미지가 만들어 집니다. 즉, 이미지를 커스터마이징 할 수 있게 도와줍니다. 

 

예를들어,

FROM ubuntu:20.04
ARG=DEBIAN_FRONTEND=noninteractive
EXPOSE 80

WORKDIR /

RUN apt update
RUN apt upgrade -y

RUN apt install apache

RUN apt install curl && \
	curl -OL https://github.com/google/protobuf

 

3. docker-compose

docker-compose는 컨테이너가 여러개일 때 이를 한번에 실행하고자 할 때 사용하는 툴입니다.

docker가 단일 컨테이너를 실행한다면, docker-compose는 여러개의 컨테이너를 실행할 수 있습니다.

docker-compose 를 정의할 때는 .yaml 파일로 정의가 되며 다음과 같습니다.

version: '3.4'

services:
  webmvc:
    image: eshop/webmvc
    environment:
      - CatalogUrl=http://catalog-api
      - OrderingUrl=http://ordering-api
      - BasketUrl=http://basket-api
    ports:
      - "5100:80"
    depends_on:
      - catalog-api
      - ordering-api
      - basket-api

  catalog-api:
    image: eshop/catalog-api
    environment:
      - ConnectionString=Server=sqldata;Initial Catalog=CatalogData;User Id=sa;Password=[PLACEHOLDER]
    expose:
      - "80"
    ports:
      - "5101:80"
    #extra hosts can be used for standalone SQL Server or services at the dev PC
    extra_hosts:
      - "CESARDLSURFBOOK:10.0.75.1"
    depends_on:
      - sqldata

  ordering-api:
    image: eshop/ordering-api
    environment:
      - ConnectionString=Server=sqldata;Database=Services.OrderingDb;User Id=sa;Password=[PLACEHOLDER]
    ports:
      - "5102:80"
    #extra hosts can be used for standalone SQL Server or services at the dev PC
    extra_hosts:
      - "CESARDLSURFBOOK:10.0.75.1"
    depends_on:
      - sqldata

  basket-api:
    image: eshop/basket-api
    environment:
      - ConnectionString=sqldata
    ports:
      - "5103:80"
    depends_on:
      - sqldata

  sqldata:
    environment:
      - SA_PASSWORD=[PLACEHOLDER]
      - ACCEPT_EULA=Y
    ports:
      - "5434:1433"

  basketdata:
    image: redis

이렇게 여러개의 이미지로 컨테이너 여러개를 동시에 띄울 수 있으며, 포트 연결과 volumes 설정을 동시에 여러개를 할 수 있습니다.

 

즉, 여러 어플리케이션을 스택 형태로 정의가 가능한 것입니다.

 

 

 

반응형