MS 공식홈페이지 예제
위의 링크 내용을 참고해서 실습을 진행했다.
Docker Compose란 여러개로 이루어전 Docker Container들을 관리할 수 있게 도와주는 도구
즉, Container 실행에 필요한 옵션을 docker-compose.yml에 적어두면 자동으로 실행이 되고, 각 Container들 간의 의존성 관리도 가능하다.
- 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
서비스의 포트번호 설정을 확인할 수 있다.
앞의 글에서 진행한 것처럼 같이 하나의 콘솔 프로그램을 더 준비한다.
하지만 이번에는 다른 폴더에 있어야 하기 때문에 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
이제 위에서 공부한 명령어들을 시험해 볼 차례다.