Skip to content

4. Docker Entrypoint 설정


1. Docker Entrypoint

  • 컨테이너에서 작업한 후 커밋하거나 Docker Hub에서 풀하는 등으로 생성된 이미지를 Kubernetes 파드에 자동으로 실행되도록 하려면 Entrypoint를 설정해야 한다.
  • 예를 들어, nginx 이미지의 경우 다음과 같이 명령어를 입력하면 자동으로 80번 포트를 가진 nginx 컨테이너가 실행된다.


sudo docker run -d --name nginx_container nginx:latest


  • 자동으로 실행 가능한 이유는 nginx 이미지를 Dockerfile로 빌드할 때 자동 실행에 필요한 명령어들을 넣어줬기 때문이다.


2. Docker Entrypoint 설정하기

  • 먼저, 테스트하기 전에 디렉터리를 하나 생성하여 진행한다.


mkdir ./entrypoint_test && cd ./entrypoint_test


  • 필요에 따라 다음과 같이 entrypoint_test/ 디렉터리에서 Entrypoint 실행 스크립트를 작성한다.


vim ./docker-entrypoint.sh
#!/bin/bash

while true; do echo 'Entrypoint Test Container Running...'; sleep 1s; done


  • docker-entrypoint.sh 파일의 권한 및 타입을 변경한다.


sudo chmod 757 ./docker-entrypoint.sh


  • 다음과 같이 Dockerfile을 작성한다.
  • 빌드에 사용되는 이미지는 ubuntu:latest이며, 필요에 따라 다른 Dockerfile 명령어를 추가하여 작성하면 된다.


vim Dockerfile
FROM ubuntu:latest

LABEL maintainer="saemc27"
LABEL version="1.0"
LABEL description="Entrypoint Test"

EXPOSE 1027/tcp

COPY ./docker-entrypoint.sh /docker-entrypoint.sh

ENTRYPOINT [ "./docker-entrypoint.sh" ]


  • 현재 docker-entrypoint.sh 파일과 Dockerfile이 준비된 상태이다.


.
├── docker-entrypoint.sh
└── Dockerfile

0 directories, 2 files


3. Docker 이미지 빌드하기

  • entrypoint_test/ 디렉터리 안에서 다음과 같이 이미지를 빌드한다.


sudo docker build -t entrypoint_image .
Sending build context to Docker daemon  3.072kB
Step 1/7 : FROM ubuntu:latest
 ---> d13c942271d6
Step 2/7 : LABEL maintainer="saemc27"
 ---> Running in 4d7d148ed301
Removing intermediate container 4d7d148ed301
 ---> a4e94294f294
Step 3/7 : LABEL version="1.0"
 ---> Running in 55d1ea87f82b
Removing intermediate container 55d1ea87f82b
 ---> da64ba08b971
Step 4/7 : LABEL description="Entrypoint Test"
 ---> Running in fd9e370df375
Removing intermediate container fd9e370df375
 ---> 67f7a32aad5b
Step 5/7 : EXPOSE 1027/tcp
 ---> Running in cd041a7ec801
Removing intermediate container cd041a7ec801
 ---> 80cfe9d443de
Step 6/7 : COPY ./docker-entrypoint.sh /docker-entrypoint.sh
 ---> e03650dcf045
Step 7/7 : ENTRYPOINT [ "./docker-entrypoint.sh" ]
 ---> Running in d168fbf86a2a
Removing intermediate container d168fbf86a2a
 ---> 26284e6011e2
Successfully built 26284e6011e2
Successfully tagged entrypoint_image:latest


  • 빌드된 entrypoint_image를 확인한다.
  • 필요에 따라 로그인 후 Docker Hub로 푸시를 해도 된다.


sudo docker images
REPOSITORY           TAG         IMAGE ID       CREATED              SIZE
entrypoint_image     latest      26284e6011e2   About a minute ago   72.8MB


4. Docker 컨테이너 생성 및 실행하기

  • 빌드된 entrypoint_image를 컨테이너로 생성하고 -d 옵션을 통해 데몬 상태로 실행한다.
  • 별다른 태그를 지정하지 않았기 때문에 자동으로 latest 버전으로 이미지가 빌드된다.


sudo docker run -d --name entrypoint_container entrypoint_image:latest
330d0e16131b02efb9115bd8256c9784734f557ef2a4969ca8b08060feba7688


  • 컨테이너가 생성되어 실행되고 있는지 확인한다.


sudo docker ps -a
CONTAINER ID   IMAGE                     COMMAND                  CREATED          STATUS          PORTS       NAMES
330d0e16131b   entrypoint_image:latest   "./docker-entrypoint…"   2 minutes ago    Up 2 minutes    1027/tcp    entrypoint_container


  • 직접 컨테이너로 진입하여 while 문이 잘 작동하는지 확인한다.


sudo docker attach entrypoint_container
Entrypoint Test Container Running...
Entrypoint Test Container Running...
Entrypoint Test Container Running...
Entrypoint Test Container Running...
Entrypoint Test Container Running...
Entrypoint Test Container Running...
Entrypoint Test Container Running...
Entrypoint Test Container Running...
Entrypoint Test Container Running...