효습

Docker 기본 개념 - 1일차 본문

Docker

Docker 기본 개념 - 1일차

효효효효 2023. 8. 6. 02:48

원티드 8월 챌린지를 듣고 정리한 내용입니다.

 

Docker 공식 문서

https://docs.docker.com/get-started/overview/

 

Docker overview

 

docs.docker.com

 

 

Docker란 무엇일까?

  • 컨테이너 기반 가상화 도구
  • 애플리케이션을 컨테이너라는 단위로 격리하고 실행하고 배포하는 기술
  • open platform 이다.
  • 어플리케이션을 인프라에서 분리해준다.
  • 인프라를 어플리케이션을 관리하는 것 처럼 관리 할 수 있다.

 

Container란 무엇일까?

  • 컨테이너 기반 가상화 도구
    • 리눅스 컨테이너 기술인 LXC(Linux Containers) 기반
  • 호스트 운영체제 위에 여러 개의 격리된 환경을 생성
  • 애플리케이션을 컨테이너라는 단위로 격리하여 실행하고 배포하는 기술
  • 다양한 운영체제에서 사용할 수 있으며, 컨테이너화된 애플리케이션을 손쉽게 빌드, 배포, 관리할 수 있는 다양한 기능을 제공
  • 이러한 기능들을 통해 애플리케이션을 빠르게 개발하고, 효율적으로 배포, 관리할 수 있음

생활 코딩 도커 입문 강의

 

컨테이너 기반 특징

  • 리눅스 커널의 기능을 사용하여 만들어짐
    • chroot : 파일 시스템을 격리
      • change root directory : 현재 실행중인 프로세스와 자녀 프로세스의 루트 디렉토리를 변경하는 작업
    • namespace: 프로세스 격리
      • 동일한 시스템에서 별개의 독립된 공간을 격리된 환경에서 운영하는 가상화 기술 , 격리된 프로세스들은 같은 컴퓨터 안에 존재하지만 서로 간섭할 수 없음
      • namespace를 이용하면 하나의 시스템에서 동일한 PID가 두 개인것처럼 프로세스를 만들 수 있음 즉 PID가 같아도 서로 다른 프로세스가 되는 것임 , 이렇게 격리된 프로세스는 다음 6개가 독립적으로 존재할 수 있다는 특징을 가짐
        1. mnt(파일시스템 마운트): 호스트 파일시스템에 구애받지 않고 독립적으로 파일시스템을 마운트하거나 언마운트 가능
          마운트: 디스크와 같이 물리적인 장치를 특정 위치, 즉 디렉터리에 연결해주는 것
        2. pid(프로세스): 독립적인 프로세스 공간을 할당
        3. net(네트워크): namespace간에 network 충돌 방지(중복 포트 바인딩 등)
        4. ipc(SystemV IPC): 프로세스 간의 독립적인 통신통로 할당
        5. uts(hostname):독립적인 hostname 할당
        6. user(UID): 독립적인 사용자 할당
    • cgroup(control group): 하드웨어 자원 격리
      • namespace는 물리적 자원을 제한하지 않기때문에 격리된 프로세스에 하드웨어 자원을 배분하기 위해서는 cgroup이라는 기능을 사용해야한다.
      • cgroup을 사용하면 CPU,RAM 등의 자원을 사용자가 원하는 만큼 격리된 프로세스에 할당해줄 수 있다. 이렇게 할당하게 되면 컴퓨터 성능을 좀 더 효율적으로 사용할 수 있으며, 추후 컨테이너에 올라가는 응용 프로그램마다 필요에 따라 자원을 더 할당할 수 있음
    • 이렇게 namespace와 cgroup으로 만들어진 컨테이너를 LCX(Linux Container)라고 한다. LCX를 사용하면 독립된 공간의 프로세스 위에 사용자가 원하는 기능을 올릴 수 있다. 예를 들어 사용자가 원하는 OS를 올리고 해당 OS에 java 서버나 DB를 올리는 작업을 할 수 있다.
  • 프로세스 단위의 격리 환경

 

 

Docker의 내부 구조

도커 데몬(Docker daemon = dockerd)

  • 도커 엔진의 핵심 구성 요소
  • 도커 호스트에서 컨테이너를 관리하고 실행하는 역할
  • 컨테이너를 생성, 시작, 중지, 삭제하는 등의 작업을 수행
  • 컨테이너 이미지를 관리하고 외부에서 이미지를 다운로드하고 빌드하는 작업을 수행

도커 클라이언트(Docker Client)

  • 도커와 상호 작용
  • docker 명령어를 사용하면 Docker daemon으로 보내어 실행

도커 오브젝트 (Docker Object)

  • 도커 이미지(Docker Image)
    • 도커 컨테이너를 만들기 위한 읽기 전용 템플릿
  • 도커 컨테이너 (Docker Container)
    • 한 도커 이미지의 실행 가능한 인스턴스
    • 애플리케이션을 실행하기 위한 모든 파일과 설정 정보를 포함하는 패키지

도커 레지스트리(Docker Registries)

  • 도커 이미지를 관리하고 저장하는 곳

 

 

 

 

생활 코딩 도커 입문 강의

 

Docker Hub에서 이미지를 다운받아서(docker pull),

docker run을 하게 되면 이미지가 컨테이너가 되고 그 컨테이너가 실행되면서 컨테이너 안에 포함되어있는 프로그램이 실행된다.

 

 

 

여기서부턴 실습📝

 

 

Dockerfile로 도커 이미지 빌드하기

도커 컨테이너에 접속

docker exec -it <컨테이너ID or 컨테이너명> /bin/sh

파일 만들기

vim Dockerfile

Dockerfile

FROM httpd:latest
COPY index.html /usr/local/apache2/htdocs/index.html
EXPOSE 80
  • FROM ~ :  http 이미지의 기반으로 새로운 이미지를 지정 , latest는 최신버전을 사용한다는 뜻 , 베이스 이미지 선정
  • COPY~ : 현재 컴퓨터에 있는 index.html 파일을  /usr/local/apache2/htdocs/index.html 경로로 복사함 -> 웹 서버에서 해당 파일을 웹 브라우저에 제공할 수 있음 , 복사할 파일 선정 
  • EXPOSE~ : 호스트와 컨테이너 간의 포트 연결을 설정 -> 웹 브라우저가 컨테이너의 80번 포트에 접속하여 웹 서버에게 HTTP 요청할 수 있음
  • WORKDIR: work directory 선정
  • RUN : 실행할 명령어
  • ENTRYPOINT: 컨테이너가 시작할 때 실행할 명령어( 예: 서버 실행)

 

Docker build , 도커 이미지 만들기

docker build -t my-httpd .

. 은 현재 경로라는 의미함

 

my-httpd라는 이미지가 만들어진 것을 확인할 수 있음

 

 

 

 

참고한 블로그

https://velog.io/@gyumin_2/Docker%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EA%B0%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EC%A7%80-%EB%AA%A8%EB%A5%B4%EA%B2%A0%EB%8B%A4

 

'Docker' 카테고리의 다른 글

Docker 기본 개념 - 2일차  (0) 2023.08.19