본문 바로가기
AI Journey/클라우드

[Docker] Dockerfile을 이용해서 이미지 빌드하고 실행하기 (2) - Apache

by 보눔비스타 2026. 1. 7.

이어서, nginx처럼 완성된 웹 서버 이미지가 아닌 ubuntu 베어(bare) 이미지에서 시작하여 Apache를 설치하고 구성해본다. 

또한 컨테이너 내부에 html 파일을 생성하고, 호스트 작업 디렉토리에 만든 html 파일을 컨테이너 내부 디렉토리로 복사(COPY)해서 각각의 html 파일을 띄워보는 것도 테스트 해본다.

1) 호스트에서 html 파일 만들기

COPY 지시어를 통해 호스트의 html 파일을 컨테이너 내부로 복사하기 위해 다음과 같이 작업 디렉토리에 미리 파일을 생성해 둔다.

 

명령어:

root@host:/home/username/dockerfile# echo "This is from Outside" > out-test.html

 

2) Dockerfile1 작성

현재 작업 디렉토리가 /home/username/dockerfile이고 앞서 my-nginx 이미지를 만들 때 "Dockerfile"이라는 이름으로 파일을 생성했기 때문에, 똑같이 Dockerfile이라는 이름으로 만들면 이전에 작성한 Nginx 설정 내용을 덮어쓰게 된다.

따라서 기존 Dockerfile 내용을 보존하고 새로운 파일을 만들기 위해 이름을 "Dockerfile1" 등으로 다르게 설정한다.

FROM ubuntu:16.04

# 패키지 업데이트 및 아파치 설치
RUN     apt update && apt -y install apache2

# 작업 디렉터리 변경
WORKDIR /var/www/html

# index 파일 생성 및 복사
RUN     echo "This is created Inside" > in-test.html
COPY    out-test.html /var/www/html/        

# 포트 설정
EXPOSE  80

# [중요] 컨테이너 실행 명령어
CMD     ["apachectl", "-D", "FOREGROUND"]

 

  • WORKDIR   /var/www/html : 이제부터 실행할 명령어들의 현재 위치를 /var/www/html로 고정. (리눅스의 cd 명령어와 같음)
  • RUN echo ...: 컨테이너 내부에서 명령어를 실행해 직접 파일을 만든다. "Hello from inside"라는 내용이 담긴 in-test.html 파을 생성한다.
  • COPY ...: 내 컴퓨터(Host)에 있는 out-test.html 파일을 컨테이너 안의 /var/www/html/ 디렉터리로 복사해 넣는다. (이 명령어가 성공하려면 빌드하는 폴더에 out-test.html이 미리 존재해야 함.)
  • FOREGROUND : 도커 컨테이너는 메인 프로세스가 실행되는 동안에만 유지된다. apachectl을 그냥 실행하면 데몬이 백그라운드로 빠지면서 메인 프로세스가 종료된 것으로 간주되어 컨테이너가 즉시 꺼진다. 따라서 반드시 -D FOREGROUND 옵션을 주어 아파치가 앞단에서 계속 실행되도록 해야 한다.

 

2) 이미지 빌드 

# 파일명을 지정(-f)하여 빌드

root@host:/home/username/dockerfile# docker build -f Dockerfile1 -t my-apache:1.0 ./

 

3) 컨테이너 실행

# 랜덤 포트(-P) 매핑으로 실행
root@host:/home/username/dockerfile# docker run -d -P --name website-2 my-apache:1.0

# 포트 번호 확인

root@host:/home/username/dockerfile# docker port website-2

 

 

4) 브라우저 접속 확인

우선 브라우저 주소창에 http://localhost:[랜덤 매핑된 포트]라고만 입력하면 "Apache2 Ubuntu Default Page" (It works! 라고 써있는 아파치 기본 화면)가 뜬다.

웹 브라우저는 주소 뒤에 파일명을 안 적으면 무조건 index.html을 찾아서 보여주려고 한다.

따라서 Dockerfile1에서 in-test.html과 out-test.html을 만들었어도 index.html을 수정하지 않았기 때문에, 아파치를 처음 깔았을 때 들어있는 기본 페이지가 보이는 것이다.

 

따라서 주소 뒤에 파일 이름을 직접 입력해줘야 in-test.html 파일과 out-test.html 파일을 볼 수 있다. 

 

  • in-test.html 보기 (컨테이너 안에서 만든 파일)
    • http://localhost:32768/in-test.html
  • out-test.html 보기 (밖에서 복사해 넣은 파일)
    • http://localhost:32768/out-test.html