docker이해

minjun kim·2025년 4월 23일

  • ‘컨테이너화’를 사용하여 응용 프로그램의 배포, 확장 및 관리를 자동화할 수 있는 오픈 소스 플랫폼

  • 코드, 실행 시간, 시스템 도구 및 라이브러리를 포함하여 응용 프로그램을 실행하는 데 필요한 모든 것을 가볍고 격리된 환경으로 포함

  • 응용 프로그램과 해당 종속성을 표준화된 단위로 패키징하여 다양한 환경에서 일관되게 배포하고 실행하기 쉽게 만듬

컨테이너화

  • 응용 프로그램을 실행하는 데 필요한 모든 것을 포함한 가벼우며 격리된 환경을 제공

  • 코드, 실행 시간, 시스템 도구 및 라이브러리 등을 포함하여 응용 프로그램과 해당 종속성을 표준화된 단위로 패키징하여 일관되게 배포하고 실행하는 것이 컨테이너화의 목적

💡 Docker 사용목적

1. 빠르고 일관된 애플리케이션을 제공합니다.

  • 개발자가 애플리케이션과 서비스를 제공하는 로컬 컨테이너를 사용하여 표준화된 환경에서 작업할 수 있도록 하여 개발 수명 주기를 간소화합니다.
  • 컨테이너는 CI/CD(지속적인 통합 및 지속적 전달) 워크플로에 적합합니다.

2. 효율적인 배포

  • Docker는 응용 프로그램과 해당 종속성을 컨테이너라는 표준화된 단위로 패키징하여 일관되게 배포할 수 있습니다. 이를 통해 배포 프로세스를 자동화하고, 배포 환경에 관계없이 응용 프로그램을 실행할 수 있습니다.

3. 확장성

  • Docker는 컨테이너화된 응용 프로그램을 쉽게 확장할 수 있도록 지원합니다. 필요한 만큼의 컨테이너를 추가하거나 제거하여 응용 프로그램의 성능과 가용성을 조정할 수 있습니다.

4. 격리된 환경

  • 각각의 Docker 컨테이너는 격리된 환경에서 실행되기 때문에, 서로의 영향을 받지 않고 독립적으로 동작할 수 있습니다. 이를 통해 응용 프로그램의 안정성과 보안성을 향상할 수 있습니다.

5. 개발 환경의 일관성

  • Docker는 개발 환경을 컨테이너로 추상화하여 개발자들이 동일한 환경에서 작업할 수 있도록 지원합니다. 이를 통해 개발자들은 응용 프로그램을 더 쉽게 빌드, 테스트 및 디버깅할 수 있습니다.

도커 이미지(Docker Image)

  • 도커 컨테이너를 실행하기 위한 파일과 설정 정보를 포함하는 컨테이너의 템플릿을 의미

  • 자신만의 이미지를 가질 수 있고 다른 사람이 만든 이미지를 가져와 사용할 수도 있다.그리고 이 이미지는 레지스트리에 게시됩니다.

  • 이미지는 도커 파일(Dockerfile)이라는 텍스트 파일에 정의되며, 도커 이미지를 생성하는 데 사용됩니다.

  1. 도커 레지스트리에서 관리되고 저장
  • 도커 허브는 도커가 제공하는 공개 레지스트리로, 다른 사람들과 도커 이미지를 공유하고 검색할 수 있는 장소
  • 도커 허브 이외에도 도커 엔터프라이즈 에디션을 사용하여 개인적인 레지스트리를 구축할 수도 있다.
  1. 도커 이미지는 컨테이너를 생성하고 실행하기 위해 사용
  • 도커 클라이언트를 사용하여 이미지를 다운로드하고 컨테이너를 생성할 수 있다.
  • 이미지는 컨테이너의 기반이 되며, 여러 개의 컨테이너를 동시에 실행하거나 스케일링할 수도 있다.
  1. 도커 이미지는 애플리케이션을 쉽게 배포하고 관리할 수 있는 강력한 도구
  • 이미지를 빠르게 구축하고 공유함으로써 개발과 운영의 효율성을 높일 수 있다.

도커 컨테이너(Docker Container)

  • 실행 가능한 이미지 인스턴스를 의미
  • 컨테이너는 컨테이너 간의 격리된 환경에서 실행되며, 호스트와는 독립적으로 실행될 수 있다.
    이를 통해 애플리케이션의 이식성과 확장성이 향상되고, 리소스 사용이 최적화

도커파일(Dockerfile)

  • 도커 이미지를 만들고 빌드하기 위한 텍스트 파일을 의미합니다. 이는 컨테이너 이미지를 구성하는데 필요한 모든 단계와 명령을 정의합니다.

  • 도커 파일은 일련의 명령을 작성하여 이미지를 빌드하는 방법을 지정합니다. 일반적으로 도커 파일은 기본 이미지를 지정하고, 필요한 패키지를 설치하고, 파일을 복사하며, 명령을 실행하는 등의 작업을 수행합니다.

  • 각 명령은 도커 파일에서 한 줄씩 작성되며, 이전 단계의 결과를 기반으로 수행됩니다.

  • 도커 파일을 사용하면 반복적이고 일관적인 컨테이너 이미지 빌드 프로세스를 자동화할 수 있습니다. 도커 파일을 작성하고 빌드하면 도커 엔진이 자동으로 이미지를 생성하고 저장할 수 있습니다.

도커파일 명령어

명령어 설명
ADD : 로컬 또는 원격 파일 및 디렉토리 추가
ARG : 빌드 시간 변수 사용
CMD : 기본 명령어 지정
COPY : 파일 및 디렉토리 복사
ENTRYPOINT : 기본 실행 가능한 파일 지정
ENV : 환경 변수 설정
EXPOSE: 애플리케이션이 수신 대기 중인 포트 설명
FROM : 기본 이미지에서 새로운 빌드 스테이지 생성
HEALTHCHECK : 컨테이너의 시작 시 건강 상태 확인
LABEL : 이미지에 메타데이터 추가
MAINTAINER : 이미지의 작성자 지정
ONBUILD : 빌드 시 이미지가 사용될 때의 지침 지정
RUN : 빌드 명령어 실행
SHELL : 이미지의 기본 셸 설정
STOPSIGNAL : 컨테이너 종료 시스템 콜 신호 지정
USER : 사용자 및 그룹 ID 설정
VOLUME : 볼륨 마운트 생성
WORKDIR : 작업 디렉토리 변경

Dockerfile + Nginx 사용예시 : 구성하기

  • 해당 부분에서는 Dockerfile을 통해 Nginx를 구성하고 이미지를 생성 및 컨테이너를 올려서 구성한 html 파일을 띄우는 것을 목적

파일 및 디렉터리 설명
Dockerfile : 해당 파일을 실행시켜 레이어를 구성하고 Nginx 이미지를 받아 재구성에 사용할 파일입니다.
config : 설정 파일을 관리하는 디렉터리입니다
config/nginx.cof: Nginx를 실행하기 위한 환경설정이 구성된 파일입니다.
html : html 파일들을 관리하는 디렉터리입니다.
html/index.html : Nginx를 통해 실행될 파일입니다.

Dockerfile

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 컨테이너가 실행되면 자동으로 실행되는 명령어입니다.

nginx.conf 구성

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' 파일을 찾아 반환

index.html 파일 구성

<!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
  1. 어떤 환경을 통일해서 팀 전체가 똑같이 쓰게 만들고 싶을 때
    팀원 5명이 각각 nginx 설치하고 설정하고 하면 복잡하지?

Docker 이미지 하나로 만들면 "누가 실행하든 똑같이 동작"함.
→ 재현 가능한 환경 (개발, 테스트, 운영 서버까지 동일하게)

profile
배움의 흔적을 남기고 싶습니다.

0개의 댓글