docker

02. Docker-compose, Swarm

식피두 2020. 7. 29. 08:56

Dockerfile 작성 및 Build 방법

일단 책들을 보면 Bash 사용법을 장황하게 + 친절하게 설명해주는 경우가 있는데

꼭 그걸 다 알 필요는 없고, 실제 유즈케이스들을 참고해서 적절히 변형해서 쓰면 된다.

지레 겁먹을 필요가 없는 것!

 

그래도 필요하다면 참고하자.

이전에 정리해두었던 bash 사용법 링크

dockerfile 작성 후 build하는 방법 기본에 대한 링크

docker-compose로 여러 컨테이너 관리하기

시스템을 도커 컨테이너를 활용해서 구성할 때, 여러 종류의 컨테이너를 키고/끄고 서로 통신하는 경우가 있다.

이 때, 직접 각각을 docker 명령어를 통해 제어할 수 있지만,

docker-compose를 적절히 활용하면, 많은 수고를 덜 수 있다.

(특히, 하나의 서버 내에서 여러 컨테이너를 다루는 경우)

 

예를 들어, 다음과 같이 여러 서버를 컨테이너로 띄우는 경우

매번 각각의 명령어를 통해 실행시키고, 종료 시킬 경우에도 각각을 종료시켜야하는 불편함이 있다.

docker network create test-network
docker run --name testimage1 -d -P --cpus="4" --network test-network testimage:alpha
docker run --name testimage2 -d -P --cpus="4" --network test-network testimage:alpha
docker run --name proxy -d -p 22223:80 --network test-network proxy:test

 

docker-compose 파일에, 장황한+귀찮은 docker 명령어를 미리 적어두고,

재활용 한다는 느낌으로 이해하면 쉽다.

docker-compose.yml을 정의하고 아래의 명령어로 명시된 컨테이너를 한방에 키고 끌 수 있는 기능이다.

docker-compose up -d
docker-compose down

 

docker-compose 파일의 맨 위에 버전을 적는데, 링크에서 시스템의 도커 버전에 따라 선택하면 된다.

버전에 따라 지원하는 키워드가 갈리는 경우가 있으니 참고하자.

 

아래는 예시다.

services 아래에 적는 것들 하나 하나가 docker container를 의미한다고 생각하면 된다.

 

각각에 대해 이미지는 뭘 쓰고, build를 한 경우 어느 디렉터리 기준(Dockerfile 포함한)으로 빌드할지

컨테이너를 실행할 때 포트 매핑은 어떻게할지 등등

그 외에 도커 실행 명령어를 통해 작성하는 옵션들 거의 모두를 포함할 수 있다!

  version: "3.5"
  services:
    worker:
      image: test:alpha

    proxy: 
      build:
        context: ./nginx/
      image: proxy:latest
      ports:
        - '22223:80'

 

참고로 docker-compose에서는 디폴트 네트워크가 구성되어 서비스끼리 통신이 가능하다.

docker의 경우에는 컨테이너끼리 통신을 원하는 경우 network를 직접 선언하고,

각 컨테이너의 실행 명령어에 네트워크를 명시해야하는 불편함이 있었다. 

 

그 외에, docker-compose up을 할 때

--scale worker=개수 명령어를 통해서 같은 컨테이너를 스케일링 할 수 있다.

 

추가 참고 자료들...

http://jaynewho.com/post/21

 

Docker 공식문서 에서 제시하는 개발-배포 Flow 따라가기 (Docker Swarm 사용하기) | Jayne.who();

< Back Docker 공식문서 에서 제시하는 개발-배포 Flow 따라가기 (Docker Swarm 사용하기) infra | 09 February 2018 Tags | docker swarm stack service container image deploy pre-requisite docker, docker-compose, docker-machine 이 세가지

jaynewho.com

tour of docker-compose

 

A beginner’s guide to Docker — how to create your first Docker application

You are a developer and you want to start with Docker? This article is made for you. After a short introduction on what Docker is and why to use it, you will be able to create your first application with Docker. What is Docker? Docker [https://www.docker.c

www.freecodecamp.org

매우 간단한 사용법 및 예제

 

docker-compose 사용법 및 예제

보통 커맨드 라인 명령어인 docker run을 이용해서 container를 생성/실행한다. plex로 예를 들면, docker run -d \ --name= \ --net=host \ --restart=always \ -p 32400:32400 \ -v /video:/video \ -e VERSION=latest

pages.wiserain.com

기초 사용법

 

docker compose 기초 사용법

Docker compose 기초 컨테이너들 간의 관계 설정 easy-to-read 파일로 세팅해서 container를 run하기 위해서 one-liner startup을 위해서 2 가지로 구성 YAML : container, network, volume에 관련한 옵션 CLI too..

seulcode.tistory.com

약간 디테일한 참고자료

 

Docker (Compose) 활용법 - 개발 환경 구성하기

배포 환경에 Docker를 사용하고 있을 때 개발 환경에서도 Docker를 활용하면, 배포 환경과 개발 환경(테스트 환경까지도)이 최대한 일치하는 장점을 누릴 수 있을 것 같아서 시도를 해보았습니다. ��

raccoonyy.github.io

mongodb/nginx/redis 예시

 

간단한 Docker + Mongodb/Redis/Nginx 설정

이 포스트는 정말 간단한 설정만을 다룹니다.  세부적인 프로덕션 설정 등을 원하신다면 다른 블로그를 참조해주세요. 지난 포스트에서는 최신 버전의 babel 과 webpack 을 통해 node.js 개발환경을 �

gompro.postype.com

디팬던시 제어1

 

Docker Compose: Wait for Dependencies | 8th Light

If you have ever used Docker Compose to run multi-container applications, there is a good chance that you have run into the following situation. Service A depends on service B, but service B takes a...

8thlight.com

디팬던시 제어2

 

Docker Compose에서 컨테이너 startup 순서 컨트롤하기

최근 패스트캠퍼스 스쿨 웹 프로젝트를 진행하면서, Docker Compose를 이용해 Django 어플리케이션과 PostgreSQL를 실행하고 있다. 아래는 이를 위해 내가 작성한 Dockerfile, docker-compose.yml, docker-entry.sh 파��

jupiny.com

시스템 부팅 시 켜기

 

How to run docker-compose up -d at system start up?

To let the containers autostart at startup point, I tried to add the command: cd directory_has_docker-compose.yml && docker-compose up -d in /etc/rc.local. but then after I reboot ...

stackoverflow.com

 

docker-swarm

docker-compose를 쓰다보면, 유연함이 필요한 경우가 있다.

가령, docker-compose scale 옵션으로 컨테이너 스케일링이 가능한데,

코드를 업데이트하고 컨테이너를 교체하고 싶을 때, 전체를 껐다 켜야하는 단점이 있다.

 

swarm을 이용하면 이런 부분에서 좀 더 유연한데,

컨테이너가 k 개 떠있을 때,

1개 씩만 차례대로 교체함으로써(rolling update) 서버 애플리케이션을 실행하는 컨테이너의 경우

업데이트와 동시에 유저의 요청을 계속 받을 수 있는 장점이 있다. 

 

swarm 참고자료들

www.sauru.so/blog/run-a-service-on-docker-swarm/

 

Docker Swarm에 Service 올려보기

이번 글에서는, “Getting Started with Docker Swarm“에서 만들어둔 Docker Swarm에 Service를 올려보려고 한다. 시험을 위한 엉터리 Service긴 하지만, Service와 Task가 무엇인지, 그리고 필요에 따라 어떻게 Servic

www.sauru.so

hidekuma.github.io/docker/swarm/docker-swarm/

 

Docker swarm: 도커 스웜 사용후기 > 복수개의 컨테이너 손쉽게 관리하기

Be awe$ome

hidekuma.github.io

subicura.com/2017/02/25/container-orchestration-with-docker-swarm.html#%EC%84%9C%EB%B2%84-%EC%98%A4%EC%BC%80%EC%8A%A4%ED%8A%B8%EB%A0%88%EC%9D%B4%EC%85%98-server-orchestration

 

Docker Swarm을 이용한 쉽고 빠른 분산 서버 관리

도커 스웜은 오케스트레이션 툴은 관리가 어렵고 사용하기 복잡하다는 편견을 완전히 바꿔놓았습니다. 구축 비용이 거의 들지 않고 관리 또한 쉬우며 다양한 기능을 쉽게 제공하고 가볍게 사용

subicura.com

 

그 외 가능한 것들

- 개인 도커 허브 구축(docker registry server)이 가능

- 다른 서버의 컨테이너로 연결 (Ambassador container)

- 호스트와의 디스크 공간 공유 가능 (이미지 실행시 v 옵션, compose 이용시 volumes 옵션)

- 컨테이너의 자원 (CPU, MEM) 제한 가능 (참고)

- haproxy https://seokjun.kim/haproxy-and-nginx-load-balancing/