[Docker] Docker 개념 몰아보기 (feat. ChatGPT)

Seongkeun·2023년 3월 2일
1

docker

목록 보기
3/5
post-thumbnail

아래는 ChatGPT 로 Docker의 개념을 긁어 모아 정리한 글입니다.

도커(Docker)는 컨테이너 가상화 기술을 이용해, 어플리케이션을 배포하고 실행하는데 사용되는 오픈소스 플랫폼입니다. 도커를 사용하면 개발자나 운영자는 운영체제나 서버환경과 상관없이 어플리케이션을 효율적으로 관리할 수 있습니다.

도커란?

도커는 컨테이너 기술을 이용한 오픈소스 가상화 플랫폼입니다. 컨테이너는 어플리케이션의 실행에 필요한 파일, 라이브러리, 실행 환경 등을 패키징한 것으로, 컨테이너 이미지를 생성해 배포하고 실행할 수 있습니다.

도커를 사용하면 개발자나 운영자는 서버환경이나 운영체제에 구애받지 않고, 어플리케이션을 배포하고 실행할 수 있습니다. 또한, 컨테이너 기술을 사용하기 때문에 서버 자원의 효율적인 사용이 가능합니다.

도커의 장점

1. 개발 환경 표준화

도커를 사용하면 개발자들은 동일한 개발환경을 갖게 되어 팀 내에서 일관된 개발을 할 수 있습니다.

2. 운영 환경의 복잡성 감소

도커를 사용하면 운영환경에서의 어플리케이션 배포 및 관리가 간단하게 됩니다. 컨테이너 이미지를 이용해 필요한 서버 환경을 쉽게 구축하고, 배포 및 관리를 할 수 있습니다.

3. 빠른 어플리케이션 배포

도커는 가상화 기술을 사용하기 때문에, 어플리케이션을 빠르게 배포할 수 있습니다. 이미지를 미리 만들어두고 배포하는 것이 가능하기 때문입니다.

4. 리소스 최적화

도커를 사용하면 가상화 기술을 통해 서버 자원을 효율적으로 분배할 수 있습니다. 여러 어플리케이션을 하나의 서버에서 실행하더라도, 컨테이너를 통해 각 어플리케이션이 필요로 하는 리소스만 할당할 수 있습니다.

5. 이식성

도커는 어떤 환경에서든 어플리케이션을 실행할 수 있도록 해줍니다. 개발환경, 운영환경, 클라우드 등 다양한 환경에서 어플리케이션을 실행할 수 있기 때문에 이식성이 높습니다.


도커의 기본 개념

  • 이미지(Image): 컨테이너를 생성하기 위한 실행 환경을 패키징한 것
  • 컨테이너(Container): 이미지를 실행한 상태
  • 레지스트리(Registry): 도커 이미지를 저장하고 공유하기 위한 저장소
  • 도커 엔진(Docker Engine): 도커 이미지를 생성하고 컨테이너를 실행하는 도구
  • 볼륨(Volume): 도커 컨테이너에서 데이터를 저장하기 위한 디렉토리 또는 파일을 의미한다. 보통 호스트의 파일시스템과 연결된 디렉토리를 사용한다.

Docker 설치

설치 방법 : Docker Installation Ubuntu 22.04

사용방법

  1. 도커 이미지 생성
  2. 생성된 도커 이미지를 레지스트리에 저장
  3. 레지스트리에서 도커 이미지를 가져와 컨테이너를 생성
  4. 컨테이너 실행

1. 도커 이미지 생성

도커 이미지를 생성하기 위해서는 Dockerfile이라는 파일을 작성해야 합니다. Dockerfile은 도커 이미지를 생성하는데 필요한 설정을 정의한 파일입니다. Dockerfile을 작성한 후에는 다음과 같은 명령어를 이용해 도커 이미지를 생성할 수 있습니다.

docker build -t 이미지이름 경로

이미지 이름 : 생성할 이미지의 이름
경로 : Dockerfile이 위치한 경로를 지정

2. 도커 이미지 레지스트리에 저장

도커 이미지를 레지스트리에 저장하기 위해서는 Docker Hub, AWS, Google Cloud Platform 등 다양한 레지스트리 서비스를 사용할 수 있습니다.

Docker Hub을 사용하는 경우, 다음과 같은 명령어를 이용해 이미지를 레지스트리에 저장할 수 있습니다.

docker push 이미지이름

이미지 이름은 사용자명/이미지이름:태그의 형식으로 지정해야 합니다. 예를 들어, Docker Hub의 사용자명이 myname이고, 이미지 이름이 myapp인 경우 myname/myapp으로 이미지 이름을 지정할 수 있습니다.

3. 도커 이미지 가져와 컨테이너 생성

레지스트리에서 도커 이미지를 가져와 컨테이너를 생성하기 위해서는 다음과 같은 명령어를 이용합니다.

docker pull 이미지이름

이미지 이름은 사용자명/이미지이름:태그의 형식으로 지정합니다.

4. 컨테이너 실행

도커 이미지로부터 컨테이너를 생성한 후에는 다음과 같은 명령어를 이용해 컨테이너를 실행할 수 있습니다.

Docker run option 정보 및 WSL2 환경에서 Docker 설치하는 방법을 알고싶다면
WSL2 환경에서 Docker 설치 및 Jupyter lab 구동

docker run [옵션] 이미지이름

옵션은 컨테이너를 실행할 때 설정할 옵션을 지정합니다. -p 옵션은 호스트와 컨테이너 간 포트를 매핑하는데 사용됩니다.

예를 들어, 다음과 같은 명령어를 이용해 MySQL 이미지로부터 컨테이너를 생성하고 실행할 수 있습니다.

docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=비밀번호 -p 3306:3306 mysql:latest

위 명령어는 MySQL 이미지로부터 컨테이너를 생성하고 실행합니다. -d 옵션은 컨테이너를 백그라운드에서 실행하도록 설정합니다.


컨테이너와 이미지 관리

도커를 사용하면 컨테이너와 이미지를 관리할 수 있습니다. 컨테이너와 이미지를 관리하는 몇 가지 유용한 명령어를 소개하겠습니다.

컨테이너 관리

1. 컨테이너 생성 및 실행

컨테이너를 생성하고 실행하기 위해서는 docker run 명령어를 사용합니다. 이미지를 기반으로 컨테이너를 생성하고 실행할 수 있습니다.

# docker run 명령어 예시
docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
  • OPTIONS: 컨테이너를 생성하고 실행할 때 사용할 옵션을 지정합니다.
  • IMAGE: 컨테이너를 생성할 때 사용할 도커 이미지의 이름입니다.
  • TAG: 이미지의 태그를 지정합니다. 생략할 경우 latest 태그를 사용합니다.
  • DIGEST: 이미지의 다이제스트 값을 지정합니다. 태그와 다이제스트 중 하나를 사용해야 합니다.
  • COMMAND: 컨테이너 안에서 실행할 명령어입니다. 지정하지 않으면 이미지 안에서 설정된 기본 명령어를 사용합니다.
  • ARG: 명령어에 전달할 인자입니다.
    컨테이너를 생성하고 실행하는 명령어는 다음과 같습니다.
# 도커 이미지를 기반으로 컨테이너 생성 및 실행
docker run -d -p 8080:80 nginx:latest
  • -d : 컨테이너를 백그라운드에서 실행합니다.
  • -p : 호스트와 컨테이너의 포트를 매핑합니다. 호스트포트:컨테이너포트의 형식으로 지정합니다.

2. 컨테이너 목록 조회

# 현재 실행 중인 컨테이너 목록 조회
docker ps
  • -a 옵션을 사용하면 모든 컨테이너 목록을 조회할 수 있습니다.
# 모든 컨테이너 목록 조회
docker ps -a

3. 컨테이너 중지

# 컨테이너 중지
docker stop [OPTIONS]

도커 네트워크

도커 컨테이너는 가상의 네트워크 인터페이스를 가지고 있기 때문에, 도커 컨테이너 간에는 자유롭게 통신할 수 있습니다. 하지만 컨테이너가 호스트 머신의 네트워크 인터페이스에 직접 연결되어 있는 경우, 컨테이너 간 통신이 불가능합니다.

이러한 경우를 해결하기 위해서 도커 네트워크를 사용할 수 있습니다. 도커 네트워크는 가상의 네트워크 인터페이스를 제공하고, 도커 컨테이너를 이 가상의 네트워크 인터페이스에 연결하여 통신할 수 있도록 합니다.

도커 네트워크를 사용하기 위해서는 다음과 같은 명령어를 이용할 수 있습니다.

  • 네트워크 생성
docker network create --driver [네트워크 드라이버] [네트워크 이름]

# 혹은

docker network create [네트워크이름]
  • 네트워크 목록 확인
docker network ls
  • 네트워크 정보 확인
docker network inspect [네트워크 이름]
  • 컨테이너에 네트워크 연결
docker network connect [네트워크 이름] [컨테이너 이름 또는 ID]
  • 컨테이너에서 네트워크 연결 해제
docker network disconnect [네트워크 이름] [컨테이너 이름 또는 ID]

컨테이너를 생성할 때, --network 옵션을 이용하여 컨테이너가 속해야 할 네트워크를 지정할 수 있습니다. 예를 들어, my-network라는 네트워크를 생성하고, 이 네트워크에 속한 my-container-1과 my-container-2라는 이름의 컨테이너를 생성하고자 할 때, 다음과 같은 명령어를 이용합니다.

docker network create my-network

docker run -d --name my-container-1 --network my-network nginx

docker run -d --name my-container-2 --network my-network nginx

--network 옵션을 사용하지 않고, 컨테이너를 생성하면 기본적으로 bridge라는 이름의 네트워크에 속하게 됩니다.

컨테이너 간에 네트워크를 통해 서로 통신하게 하려면, 컨테이너 내부에서 사용되는 IP 주소를 이용하여 통신합니다. 예를 들어, my-container-1에서 my-container-2로 접근하기 위해서는 다음과 같은 명령어를 이용합니다.

docker exec -it my-container-1 /bin/bash
ping my-container-2

위 명령어는 my-container-1에서 my-container-2로 접근하여 ping을 수행하는 명령어입니다. my-container-1에서 my-container-2로 접근하기 위해서는 my-container-2의 IP 주소를 알아야 합니다. 이는 docker inspect 명령어를 이용하여 확인할 수 있습니다.

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my-container-2

위 명령어는 my-container-2의 IP 주소를 확인하는 명령어입니다. 이를 이용하여 my-container-1에서 my-container-2로 접근할 수 있습니다.

REFERENCE

profile
지혜는 지식에서 비롯된다

0개의 댓글