
‘컨테이너화’를 사용하여 응용 프로그램의 배포, 확장 및 관리를 자동화할 수 있는 오픈 소스 플랫폼
코드, 실행 시간, 시스템 도구 및 라이브러리를 포함하여 응용 프로그램을 실행하는 데 필요한 모든 것을 가볍고 격리된 환경으로 포함
응용 프로그램과 해당 종속성을 표준화된 단위로 패키징하여 다양한 환경에서 일관되게 배포하고 실행하기 쉽게 만듬
응용 프로그램을 실행하는 데 필요한 모든 것을 포함한 가벼우며 격리된 환경을 제공
코드, 실행 시간, 시스템 도구 및 라이브러리 등을 포함하여 응용 프로그램과 해당 종속성을 표준화된 단위로 패키징하여 일관되게 배포하고 실행하는 것이 컨테이너화의 목적
도커 컨테이너를 실행하기 위한 파일과 설정 정보를 포함하는 컨테이너의 템플릿을 의미
자신만의 이미지를 가질 수 있고 다른 사람이 만든 이미지를 가져와 사용할 수도 있다.그리고 이 이미지는 레지스트리에 게시됩니다.
이미지는 도커 파일(Dockerfile)이라는 텍스트 파일에 정의되며, 도커 이미지를 생성하는 데 사용됩니다.
도커 이미지를 만들고 빌드하기 위한 텍스트 파일을 의미합니다. 이는 컨테이너 이미지를 구성하는데 필요한 모든 단계와 명령을 정의합니다.
도커 파일은 일련의 명령을 작성하여 이미지를 빌드하는 방법을 지정합니다. 일반적으로 도커 파일은 기본 이미지를 지정하고, 필요한 패키지를 설치하고, 파일을 복사하며, 명령을 실행하는 등의 작업을 수행합니다.
각 명령은 도커 파일에서 한 줄씩 작성되며, 이전 단계의 결과를 기반으로 수행됩니다.
도커 파일을 사용하면 반복적이고 일관적인 컨테이너 이미지 빌드 프로세스를 자동화할 수 있습니다. 도커 파일을 작성하고 빌드하면 도커 엔진이 자동으로 이미지를 생성하고 저장할 수 있습니다.
명령어 설명
ADD: 로컬 또는 원격 파일 및 디렉토리 추가
ARG: 빌드 시간 변수 사용
CMD: 기본 명령어 지정
COPY: 파일 및 디렉토리 복사
ENTRYPOINT: 기본 실행 가능한 파일 지정
ENV: 환경 변수 설정
EXPOSE: 애플리케이션이 수신 대기 중인 포트 설명
FROM: 기본 이미지에서 새로운 빌드 스테이지 생성
HEALTHCHECK: 컨테이너의 시작 시 건강 상태 확인
LABEL: 이미지에 메타데이터 추가
MAINTAINER: 이미지의 작성자 지정
ONBUILD: 빌드 시 이미지가 사용될 때의 지침 지정
RUN: 빌드 명령어 실행
SHELL: 이미지의 기본 셸 설정
STOPSIGNAL: 컨테이너 종료 시스템 콜 신호 지정
USER: 사용자 및 그룹 ID 설정
VOLUME: 볼륨 마운트 생성
WORKDIR: 작업 디렉토리 변경
파일 및 디렉터리 설명
Dockerfile : 해당 파일을 실행시켜 레이어를 구성하고 Nginx 이미지를 받아 재구성에 사용할 파일입니다.
config : 설정 파일을 관리하는 디렉터리입니다
config/nginx.cof: Nginx를 실행하기 위한 환경설정이 구성된 파일입니다.
html : html 파일들을 관리하는 디렉터리입니다.
html/index.html : Nginx를 통해 실행될 파일입니다.
FROM nginx
COPY ./config/nginx.conf /etc/nginx/conf.d/nginx.conf
COPY ./html/index.html /usr/share/nginx/html/index.html
ENTRYPOINT ["nginx", "-g", "daemon off;"]
from nginx
기존 docker hub에 있는 컨테이너 이미지중 nginx 이미지를 기반으로 새롭게 구성할 docker 이미지를 생성.
COPY ./config/nginx.conf /etc/nginx/conf.d/nginx.conf
A를 B로 복사
새로운 Nginx 설정파일(내가 구상)을 Nginx 이미지 경로에 복사
COPY ./html/index.html /usr/share/nginx/html/index.html
새롭게 구성한 html 파일을 Nginx 이미지 경로 /usr/share/nginx/html/index.html에 복사 (최초 html을 연결)
ENTRYPOINT ["nginx", "-g", "daemon off;"]
Docker 컨테이너가 실행되면 자동으로 실행되는 명령어입니다.
server {
listen 80;
server_name localhost;
access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
listen 80;
Nginx가 80번 포트에서 클라이언트로부터 요청을 받아들임.
server_name localhost;
이 설정은 웹 서버의 호스트 이름을 localhost로 설정
access_log /var/log/nginx/host.access.log main;
접근 로그의 위치와 로그 포맷을 지정. 이 경우, 로그 파일은 '/var/log/nginx/host.access.log'에 저장되고 'main' 포맷으로 저장.
location / { root /usr/share/nginx/html; index index.html index.htm; }
클라이언트로부터 root URL('/')에 대한 요청이 오면, '/usr/share/nginx/html' 디렉터리에서 'index.html' 또는 'index.htm' 파일을 찾아 반환
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>Welcome Nginx</h1>
</body>
</html>

컨테이너 이미지 생성
docker build -t nginx:simple-nginx .
docker를 빌드하여 nginx의 태그를 simple-nginx로 지정하여 수행
컨테이너 생성 및 실행
docker run -d -p 7070:80 --name simple-nginx nginx:simple-nginx
7b344beab41f3f95e906edd161c12fbc857252b972d6600c2b89901978222242
생성된 컨테이너 이미지를 컨테이너로 생성하고 실행합니다.
- ‘simple-nginx’로 컨테이너 이름을 지정하였습니다.


컨테이너 확인

로컬 포트열어서 확인!
궁금점!
-p 옵션 :
-p 8080:70
내컴퓨터의 8080을 내부의 70포트 완 연결해서 8080으로 연결하면 내부의 70포트랑 연결이 됨.
이미지 태그 이유
nginx:simple-nginx
nginx:latest # 최신 버전
nginx:1.21.6 # 특정 버전
nginx:alpine # 가볍게 만든 알파인 기반 버전
nginx:custom-tag # 직접 만든 커스텀 이미지
이렇게 이미지태그를 생성하는이유는
커스텀 이미지를 사용할 수 있는ㄴ데
커스텀이미지는 순정상태의 nginx에 curl이나 bash등을 넣어서 팀의 환경설정을 동일시 맞출 수 있음
1. 원하는 설정을 미리 넣어두고 싶을때
→ Dockerfile로 커스텀 이미지 만들어서 배포하면 한 방에 끝!
FROM nginx:alpine
COPY ./my-nginx.conf /etc/nginx/nginx.conf
COPY ./index.html /usr/share/nginx/html/index.html
Docker 이미지 하나로 만들면 "누가 실행하든 똑같이 동작"함.
→ 재현 가능한 환경 (개발, 테스트, 운영 서버까지 동일하게)