-
Docker를 사용하여 간단한 웹 애플리케이션을 만드는 단계별 실습Cloud/Container 2023. 2. 12. 23:03
사전 요구 사항
- Docker가 설치되어 있고 실행 중인 컴퓨터
Dockerfile 문법 알아보기
커맨드의미
FROM 베이스 이미지 지정 RUN 베이스 이미지에 새로운 레이어를 추가해 커맨드를 실행하고 결과를 빌드 이미지에 반영 CMD 컨테이너 시작시 실행할 커맨드 설정 LABEL 이미지에 레이블 지정 EXPOSE 컨테이너에서 노출하는 포트 번호 설정 ENV 환경 변수 설정 ADD 이미지에 파일 복사 COPY 이미지에 파일 복사 ENTRYPOINT 컨테이너 시작시 실행할 커맨드 설정 VOLUME 볼륨이 마운트 될 위치 설정 USER 커맨드를 실행할 때 사용자 ID 설정 WORKDIR 커맨드를 실행할 때 작업 디렉터리 설정 ARG 빌드 시에만 사용되는 변수 설정 ONBUILD 이 이미지를 베이스로 빌드할 때 커맨드가 실행되도록 하기 STOPSIGNAL 컨테이너를 중지시킬 때의 시그널 번호 설정 HEALTHCHECK 헬스 체크를 위한 커맨드 설정 Docker CLI 살펴 보기
커맨드의미
docker build Dockerfile로 이미지 빌드 docker images 이미지 리스트 보기 docker image inspect 이미지 상세 정보 보기 docker pull 레지스트리로부터 이미지 가지고 오기 docker push 레지스트리에 이미지 전송하기 docker history 이미지 생성 기록 보기 docker rmi 이미지 삭제 docker import Docker container export로 가지고 온 것으로 이미지 만들기 docker save 이미지 tar 아카이브로 출력 docker load Docker image save로 출력한 것(tar 아카이브)으로 이미지 로드 docker tag 기존의 이미지에 태그 붙이기 docker ps 컨테이너 목록 보기 docker logs 컨테이너 로그 취득 docker exec 실행 중인 컨테이너 내부에서 커맨드 실행 docker container inspect 컨테이너의 자세한 정보 보기 docker port 컨테이너 포트 맵핑 보기 docker rm 컨테이너 삭제 docker run 새로운 컨테이너로 커맨드 실행 docker start 정지 중인 컨테이너 기동 docker stop 실행 중인 컨테이너 중지 docker restart 컨테이너 다시 시작 docker kill 실행 중인 컨테이너(Docker가 만든 PID 1 프로세스)에 신호 보내기 단계 1: 새 디렉터리 생성
웹 애플리케이션을 위한 새 디렉터리를 만들고 터미널에서 해당 디렉터리로 이동합니다.
mkdir my-web-app cd my-web-app
단계 2: 웹 페이지 만들기
다음 내용을 포함하는 index.html 파일을 만듭니다:
<!DOCTYPE html> <html> <head> <title>My Web App</title> </head> <body> <h1>Hello, World!</h1> </body> </html>
단계 3: Dockerfile 만들기
Dockerfile 이라는 이름의 새 파일을 만들고 다음 내용을 입력합니다:
# 공식 Nginx 런타임을 부모 이미지로 사용 FROM nginx:alpine # 웹 페이지를 컨테이너로 복사합니다. COPY index.html /usr/share/nginx/html
단계 4: Docker 이미지 빌드
터미널에서 Dockerfile이 있는 디렉터리로 이동하고 다음 명령어를 실행하여 Docker 이미지를 빌드합니다:
docker build -t my-web-app .
-t 플래그는 이미지를 이름으로 태그하기 위해 사용되며, 이 경우 my-web-app로 태그됩니다.
단계 5: Docker 컨테이너 실행
다음 명령을 실행하여 Docker 컨테이너를 시작합니다:
docker run -d -p 80:80 --name my-web-app my-web-app
-d 플래그는 컨테이너를 백그라운드 모드로 실행하고, -p 플래그는 컨테이너의 80번 포트를 호스트 머신의 80번 포트에 매핑합니다.
단계 6: 웹 애플리케이션에 액세스하기
웹 브라우저를 열고 http://localhost로 이동합니다. 페이지에 "Hello, World!" 메시지가 표시됩니다.
이것으로 간단한 웹 애플리케이션을 Docker를 사용하여 만들었습니다.
애플리케이션에 더 많은 파일을 추가하고 Dockerfile을 수정하여 필요에 맞게 변경할 수 있습니다.
단계 7: 컨테이너 멈추기 및 삭제하기
Docker 컨테이너를 종료하고 삭제하려면 다음 명령어를 실행합니다:
docker stop $(docker ps -aqf "name=my-web-app") && docker rm $(docker ps -aqf "name=my-web-app")
이 명령어는 다음과 같은 작업을 수행합니다:
- docker ps -aqf "name=my-web-app": my-web-app 이름을 갖는 모든 컨테이너의 ID를 반환합니다.
- docker stop $(docker ps -aqf "name=my-web-app"): 해당 컨테이너를 모두 중지합니다.
- docker rm $(docker ps -aqf "name=my-web-app"): 해당 컨테이너를 모두 삭제합니다.
이제 컨테이너가 중지되고 삭제되었습니다. 이제 다시 시작하려면 단계 5에서 설명한 명령을 실행하면 됩니다.
--------------------------------------------------------------------------------------------------------
다음은 컨테이너에 들어간 index.html 파일을 수정하고 v2 버전의 이미지를 빌드하는 예제입니다.
단계 8: 웹 페이지 수정
index.html 파일을 다음 내용으로 수정합니다:
<!DOCTYPE html> <html> <head> <title>My Web App v2</title> </head> <body> <h1>Hello, World!</h1> <p>This is version 2 of my web app.</p> </body> </html>
단계 9: Dockerfile 수정
Dockerfile 파일을 다음과 같이 수정하여 새로운 이미지를 빌드할 수 있습니다.
아래와 같은 내용의 이전과 동일한 도커 파일로 빌드를 다시 한번 수행합니다.
# Use an official Nginx runtime as a parent image FROM nginx:alpine # Copy the updated web page to the container COPY index.html /usr/share/nginx/html
단계 10: Docker 이미지 빌드
터미널에서 Dockerfile이 있는 디렉터리로 이동하고 다음 명령어를 실행하여 새 Docker 이미지를 빌드합니다:
docker build -t my-web-app:v2 .
-t 플래그를 사용하여 이미지 이름을 my-web-app 대신 my-web-app:v2로 태그했습니다.
단계 11: Docker 컨테이너 실행
이제 v2 이미지를 사용하여 컨테이너를 실행합니다.
docker run -d -p 80:80 --name my-web-app-v2 my-web-app:v2
단계 12: 웹 애플리케이션에 액세스하기
새로운 버전의 웹 애플리케이션에 액세스하기 위해 웹 브라우저를 열고 http://localhost로 이동합니다. 새로운 버전의 "Hello, World!" 메시지와 추가된 텍스트 "This is version 2 of my web app."가 표시됩니다.
단계 13: 컨테이너 멈추기 및 삭제하기
이전 단계와 동일한 명령을 사용하여 v2 컨테이너를 중지하고 삭제합니다.
docker stop my-web-app-v2 && docker rm my-web-app-v2
이제 컨테이너가 중지되고 삭제되었습니다.
# 자기 주도 과제
이번에는 This is version 1 of my web app. 라고 출력되는 my-web-app 이미지의 v1 버전을 만들어서 실행 시키고 브라우저에서 메시지를 확인하세요.
'Cloud > Container' 카테고리의 다른 글
Docker 컨테이너에서의 파일시스템의 격리 확인 실습 (0) 2024.08.07 Docker cgroup v2 및 namespace 실습 가이드 (Ubuntu 24.04) (0) 2024.08.06 docker run 명령으로 띄운 컨테이너가 프로세스 임을 확인할 수 있는 실습 (0) 2024.08.06 Docker 이미지를 수정하여 Docker Hub로 푸시하는 실습. (0) 2023.02.13 chroot 명령어로 도커 컨테이너와 유사한 환경을 만들어보는 실습 (0) 2023.02.07