[docker newbie] 살아있기만 한 컨테이너 만들기

도커 실습을 위해서 단순히 살아있기만 한 컨테이너를 만들어보자.

 

spring boot의 루트에 위치하는 Dockerfile의 내용

FROM alpine:latest as base

FROM base as build

FROM base AS final

ARG UID=10001
RUN adduser \
    --disabled-password \
    --gecos "" \
    --home "/nonexistent" \
    --shell "/sbin/nologin" \
    --no-create-home \
    --uid "${UID}" \
    appuser

COPY hello.sh /bin/hello.sh
RUN chmod +x /bin/hello.sh

USER appuser

ENTRYPOINT [ "/bin/hello.sh" ]

 

hello.sh의 내용 (마찬가지로 루트 위치에 둔다)

#!/bin/sh

echo "Hello world from $(whoami)!"
echo "service is running..."

while true
do
  sleep 60
done

 

이후 루트에서(Dockerfile이 위치한 곳에서) 아래 도커 명령어를 수행해준다.

docker compose build --no-cache

docker compose up

 

그러면 서버가 러닝 중이라는 echo가 출력되고 영원히 실행은 되어있을 것이다.

종료를 위해서는 ctrl c 를 눌러주자.

 


그러면 이 컨테이너가 http 요청을 처리하기 위해서는 어떻게 해야할까?

  • 컨테이너 안에 Spring boot 어플리케이션이 위치해야한다.
  • spring boot가 내부포트 (예:8080)을 listen 해야 한다.
  • Dockerfile에서 그 포트를 EXPOSE해준다
  • docker-compose에서 그 포트를 매핑해야한다.
Spring Boot App
↓
Tomcat / Netty
↓
8080 포트 listen
/*
docker-compose.yml의 내용
services:
  app:
    ports:
      - "8080:8080"
*/
↓
HTTP POST 처리 가능

 

예제는 아래에.

spring boot 서버를 도커 컨테이너 안에서 실행하기 (feat 자동 빌드)