Day4 Docker Compose

김희윤·2021년 6월 18일
0

POS공부기

목록 보기
4/8

0. 준비

MS 공식홈페이지 예제
위의 링크 내용을 참고해서 실습을 진행했다.

1. Docker Compose

Docker Compose란 여러개로 이루어전 Docker Container들을 관리할 수 있게 도와주는 도구

즉, Container 실행에 필요한 옵션을 docker-compose.yml에 적어두면 자동으로 실행이 되고, 각 Container들 간의 의존성 관리도 가능하다.

1) 명령어

  • docker-compose up
    컨테이너를 생성 및 실행
옵션기능
-d백그라운드 실행
--no-deps링크 서비스 실행하지 않음
--build이미지 빌드
-t타임아웃 지정 (Default 10s)
  • docker-compse ps
    현재 동작중인 컨테이너 상태를 확인가능

  • docker-compose logs
    컨테이너들의 로그를 출력

  • docker-compose run
    docker-compose up 으로 실행된 컨테이너에 임의의 명령을 실행하기 위해 사용
docker-compose run [서비스명] [명령]
docker-compose run redis /bin/bash
  • docker-compose (start/stop/pause/unpause/restart)
    여러개 또는 특정 서비스를 시작/정지/일시정지/재시작을 할 수 있음
docker-compose start [서비스명]
docker-compose start

docker-compose stop [서비스명]
docker-compose stop
  • docker-compose rm
    생성한 컨테이너들을 일괄 삭제 ( 작동이 종료된 상태에서 )
  • docker-compose kill
    실행중인 컨테니너를 강제로 정지시킴
  • docker-compose down
    네트워크 정보, 볼륨, 컨테이너를 일괄 정지 및 삭제를 한번에
  • docker-compose port
    서비스의 포트번호 설정을 확인할 수 있다.

2) 2개의 Console program 준비

앞의 글에서 진행한 것처럼 같이 하나의 콘솔 프로그램을 더 준비한다.
하지만 이번에는 다른 폴더에 있어야 하기 때문에 A, B라고 나눠주고 찍히는 것도 A: 1, B: 1 처럼 표시를 해준다.


# A
using System;
using System.Threading.Tasks;

namespace PracticeDockerCompose
{
    class Program
    {
        static async Task Main(string[] args)
        {
            int i = 1;
            while (i>0)
            {
                Console.WriteLine("Image A : " + i++);
                await Task.Delay(1000);
            }
        }
    }
}

#B
using System;
using System.Threading.Tasks;

namespace PracticeDockerCompose
{
    class Program
    {
        static async Task Main(string[] args)
        {
            int i = 1;
            while (i>0)
            {
                Console.WriteLine("Image B : " + i++);
                await Task.Delay(1000);
            }
        }
    }
}

그리고 root 위치에 docker-compose.yml을 만든다 ( C는 test 했던 파일이니 무시 )

그리고는 A, B의 docker file을 바꾸고, docker-compose.yml의 내용을 입력한다.

#A
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /App

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /App/A
COPY ["NetCore.Docker.csproj", "./"]
RUN dotnet restore "./NetCore.Docker.csproj"
COPY . .
WORKDIR /App/A/.
RUN dotnet build "NetCore.Docker.csproj" -c Release -o /App/build

FROM build AS publish
RUN dotnet publish "NetCore.Docker.csproj" -c Release -o /App/publish

FROM base AS final
WORKDIR /App
COPY --from=publish /App/publish .
ENTRYPOINT ["dotnet", "NetCore.Docker.dll"]
#B
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /App

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /App/B
COPY ["Compose.Test.csproj", "./"]
RUN dotnet restore "./Compose.Test.csproj"
COPY . .
WORKDIR /App/C/.
RUN dotnet build "Compose.Test.csproj" -c Release -o /App/build

FROM build AS publish
RUN dotnet publish "Compose.Test.csproj" -c Release -o /App/publish

FROM base AS final
WORKDIR /App
COPY --from=publish /App/publish .
ENTRYPOINT ["dotnet", "Compose.Test.dll"]

#docker-compose.yml
version: '3.4'

services:
    a:
        build: ./A //Dockerfile 위치
        image: dnflwlq3231/a # Dockerfile //만들 이미지 이름
    b:
        build: ./B
        image: dnflwlq3231/b
    c: 
        build: ./c
        image: dnflwlq3231/c

3) docker-compose test

이제 위에서 공부한 명령어들을 시험해 볼 차례다.

  • docker-compose up

  • docker-compose start

  • docker-compose ps

  • docker-compose stop

profile
블록체인, IOT, 클라우드에 관심이 많은 개발자 지망생

0개의 댓글

관련 채용 정보