본문 바로가기
기타 IT 지식/DevOps

[Docker] Docker 의 기본 개념과 사용법

by 코뮤(commu) 2023. 8. 1.
728x90
반응형

해당 포스팅은
"원티드 프리온보딩 백엔드 8월 코스" 를 수강하며 강의 내용을 정리해본 것입니다.

문제가 있는 내용이거나 오류가 있다면 댓글로 남겨주시면 감사하겠습니다.

 

Docker 를 설명해보자.

  • open platform
  • 어플리케이션을 인프라에서 분리
  • 신속하다
  • 인프라를 어플리케이션을 관리하는 것처럼 관리할 수 있음
  • 코드 배포에 용이하다.

 

 

도커는 결국 컨테이너 기반 가상화 도구이다.

애플리케이션을 컨테이너 단위로 격리하여 실행하고 배포하는 기술인 것이다.

 

그럼 여기서, 컨테이너란 무엇일까?

 

컨테이너란 무엇인가?

가상화 기술 중 하나로,

호스트 운영체제 위에 여러 개의 격리된 환경을 생성한다.

 

그럼 꼬리 질문으로, 가상화 기술은 무엇일까?

 

가상화 기술이란?

하나의 물리적인 컴퓨터 자원을 가상적으로 분할하여 여러 개의 가상 컴퓨터 환경을 만들어 내는 기술이다.

이를 통해 물리적인 컴퓨터 자원을 더욱 효율적으로 사용할 수 있고,

서버 운영에 있어 유연성과 안정성을 제공한다.

 

하이퍼 바이저란?

가상머신을 생성하고 구동하는 소프트웨어로,

OS에 자원을 할당 및 조율하고 OS들의 요청을 번역해 하드 웨어에 전달하는 역할을 했다.

vmware, virtual box 등의 프로그램이 이 하이퍼바이저 방식을 채택한 프로그램인데,

예전 학교 다닐 때도 가상머신을 여러 개 띄우려면 항상 렉이 걸려 고생했었다.

 

도커는 하이퍼바이저에서 리소스를 많이 잡아먹던 게스트 OS 를 없애고,

도커 엔진 위에 바로 애플리케이션을 올려 더 가볍게 여러 애플리케이션을 실행할 수 있게 해준다.

 

 

 

Docker 의 기본 개념과 구조

 

도커 데몬

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

 

도커 클라이언트

  • docker 데몬과 상호작용
  • docker 명령어를 사용하면 docker daemon 으로 보내 실행

 

도커 오브젝트

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

 

도커 레지스트리

  • 도커 이미지를 관리하고 저장하는곳
  • Docker Hub, AWS 레지스트리 등

 

이해를 좀 더 쉽게 해보자!

 

App Store 를 Docker Hub 라고 이해하고,

Program 은 Image,

Process 는 Container 라고 이해하면 조금 더 잘 와닿는다.

 

 

Docker 사용법

 

(설치는 되어있다고 가정함미다)

 

https://hub.docker.com/_/httpd

 

httpd - Official Image | Docker Hub

Quick reference Supported tags and respective Dockerfile links 2.4.57, 2.4, 2, latest, 2.4.57-bookworm, 2.4-bookworm, 2-bookworm, bookworm 2.4.57-alpine, 2.4-alpine, 2-alpine, alpine, 2.4.57-alpine3.18, 2.4-alpine3.18, 2-alpine3.18, alpine3.18 Quick refere

hub.docker.com

 

docker hub 에 이미 올려져있는 httpd 이미지를 가져오자!

docker pull httpd

 

이미지 목록을 확인하고 싶을때는 아래 명령어로 확인가능하다.

 

docker images

 

이미지를 실행시키고 싶다면, 아래와 같은 명령어를 입력하면 되는데, 옵션이 참 많다.

자세하게 알아보려면 역시 공식 문서를 찾아보자.

 

docker run httpd
docker run --name secondContainer httpd
docker run -p 8888:80 -v [마운트 될 로컬 경로]:/usr/local/apache2/htdocs httpd

 

-p 는 publish 옵션이고, -v 는 volumn 매칭 옵션이다.

 

docker ps
docker ps -a

 

실행중인 도커 컨테이너는 위와 같은 명령어로 확인 가능하다.

 

docker stop [container id]

 

실행 중인 컨테이너 id를 이용해서 도커 컨테이너를 중지시킬 수 있다.

 

docker 컨테이너를 삭제하려면 아래 명령어를 사용하면 된다.

 

docker rm [container id]

 

 

이미지는 아래와 같이 삭제할 수 있다.

 

docker rmi [image id]

 

컨테이너에 접속해 컨테이너 명령어를 치려면 exec 를 사용하면 된다.

 

docker exec -it [container id] /bin/sh

 

 

 

Dockerfile 을 활용해보자!

 

FROM httpd:latest
COPY  index.html /usr/local/apache2/htdocs/index.html
EXPOSE 80

위 DockerFile 을 이용해서 이미지를 만들어보자.

 

 

아래 명령어로 이미지를 빌드할 수 있다.

 

docker build -t my-httpd .

 

 

-t 옵션은 태그로, 뒤에 오는 문자열이 태그의 이름이다. 가장 뒤의 . 은 DockerFile의 위치이다.

. 이라는 뜻은 현재 경로에 DockerFile 이 있다는 뜻이다.

 

직접 빌드를 했으면, docker images 명령어를 통해 내가 만든 이미지를 확인할 수 있다!

 

 

 

내가 만든 이미지는 이전에 했던 것 처럼,

 

docker run [이미지 이름]

 

명령어를 통해 실행시킬 수 있다.

 

 

 

추가 자료 - Container Lifecycle

 

docker 에서 run 은 create 와 start 가 연속적으로 이루어지는 동작이다.

모종의 이유로 stop 되었을 경우, 다시 생성할 필요없이 start 하면 된다.

 

 

 

728x90
반응형