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=개수 명령어를 통해서 같은 컨테이너를 스케일링 할 수 있다.
추가 참고 자료들...
docker-swarm
docker-compose를 쓰다보면, 유연함이 필요한 경우가 있다.
가령, docker-compose scale 옵션으로 컨테이너 스케일링이 가능한데,
코드를 업데이트하고 컨테이너를 교체하고 싶을 때, 전체를 껐다 켜야하는 단점이 있다.
swarm을 이용하면 이런 부분에서 좀 더 유연한데,
컨테이너가 k 개 떠있을 때,
1개 씩만 차례대로 교체함으로써(rolling update) 서버 애플리케이션을 실행하는 컨테이너의 경우
업데이트와 동시에 유저의 요청을 계속 받을 수 있는 장점이 있다.
swarm 참고자료들
www.sauru.so/blog/run-a-service-on-docker-swarm/
hidekuma.github.io/docker/swarm/docker-swarm/
그 외 가능한 것들
- 개인 도커 허브 구축(docker registry server)이 가능
- 다른 서버의 컨테이너로 연결 (Ambassador container)
- 호스트와의 디스크 공간 공유 가능 (이미지 실행시 v 옵션, compose 이용시 volumes 옵션)
- 컨테이너의 자원 (CPU, MEM) 제한 가능 (참고)
- haproxy https://seokjun.kim/haproxy-and-nginx-load-balancing/
'docker' 카테고리의 다른 글
05. docker-compose 환경에서 임시 nginx proxy 구성하기 (0) | 2020.10.21 |
---|---|
04. 반복 작업 속에서 docker build 시간이 오래 걸릴 때 (0) | 2020.10.21 |
03. Docker 이미지 저장 경로 변경법 (0) | 2020.07.29 |
01. Docker 기본 명령어 (0) | 2020.07.29 |