서버&네트워크/도커

[도커] Docker 기초 개념 정리

Joo.v7 2025. 9. 28. 18:49

1. 도커 구조

  • 도커 클라이언트: 도커에 명령을 내릴 수 있는 CLI 도구.
  • 도커 호스트: 도커를 설치한 서버.
  • 도커 레지스트리: 도커 이미지를 저장하거나 배포하는 시스템. ex) Docker Hub
  • 도커 이미지: 컨테이너 형태로 SW를 배포하기 위해 필요한 모든 요소(코드, 라이브러리, 설정 등)를 실행할 수 있는 포멧으로 컴파일 및 빌드한 패키지.
  • 도커 컨테이너: 도커 이미지를 실행할 수 있는 인스턴스.

 

* 도커 컨테이너 실행

클라이언트가 run 명령어를 입력하면, 도커 호스트의 데몬이 실행 명령을 요청받고 도커 호스트에 있는 이미지를 컨테이너 형태로 실행한다.

 

출처: https://choincnp.tistory.com/69

 


2. docker run hello-world 실행 과정

  1. docker run hello-world에서 docker: hello-world 컨테이너를 실행한다.
  2. 로컬에서 'hello-world:latest' 라는 이미지를 찾을 수 없다. (이미지 이름: 태그 이름)
  3. library/hello-world에서 해당 이미지를 pull 받겠다.
joo@ubuntu-server01:~$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
17eec7bbc9d7: Pull complete
Digest: sha256:54e66cc1dd1fcb1c3c58bd8017914dbed8701e2d8c74d9262e26bd9cc1642d31
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

3. 도커 기초 명령어

  1. 도커 이미지 다운로드 (태그 이름을 안쓰면 자동으로 'latest' 적용)
    • docker image pull [이미지 이름:태그 이름]
  2. 도커 이미지 목록 확인
    • docker image ls
  3. 도커 이미지 삭제
    • docker image rm [이미지 이름]
    • docker image rm [이미지 ID]
  4. 도커 이미지 변경 - commit: 실행 중인 컨테이너를 새로운 이미지로 생성하는 명령어.
    • docker container commit [기존 컨테이너 ID] [새로운 이미지 이름]
  5. 도커 컨테이너 실행
    • docker container run [이미지 이름]
  6. 도커 컨테이너 목록 확인
    • docker container ls
  7. 실행 중인 컨테이너 내부 접속/나가기
    • docker container run -it [이미지 이름]
    • docker container attach [컨테이너 ID]
    • exit
  8. 컨테이너 실행/종료
    • docker container start [컨테이너 ID]
    • docker container stop [컨테이너 ID]
  9. 컨테이너 삭제
    • docker container rm [컨테이너 ID]

https://docs.docker.com/reference/cli/docker/

 

docker

 

docs.docker.com


4. 도커 컨테이너 네트워크

(1) 도커 컨테이너 네트워크 구조

도커 호스트에 설치된 도커가 컨테이너를 관리한다.

 

아래 그림은 도커 호스트와 컨테이너 간의 네트워크 구조다.

컨테이너 내부에는 자체적으로 eth0 인터페이스를 가지고 있다.

도커 호스트에는 docker0, enp0s3, veth007a900 인터페이스들을 가지고 있다.

  • docker0:도커 호스트와 컨테이너를 연결하는 다리 역할.
  • enp0s3: 도커 호스트 자체적으로 보유한 네트워크 인터페이스.
  • veth: 컨테이너 내부의 eth0과 도커 호스트의 docker0를 연결하는 역할.

출처: https://joont92.github.io/docker/network-%EA%B5%AC%EC%A1%B0/


(2) 도커 네트워크 확인

도커에서는 기본적으로 bridge, host, none 이라는 세 가지 네트워크 드라이버를 제공한다.

  • bridge 드라이버: 컨테이너를 생성할 때 제공하는 기본 드라이버, 각 컨테이너는 각자의 네트워크 인터페이스를 가진다.
    • -- network=bridge
      ex) 기본 네트워크 드라이브이므로, 따로 옵션을 사용하지 않아도 적용된다.
  • host 드라이버: 컨테이너를 생성할 때 컨테이너 자체적으로 네트워크 인터페이스를 가지지 않고 호스트 네트워크 인터페이스를 공유한다.
    • --network=host
      ex) docker container run -it --network=host [이미지 이름]
  • none 드라이버: 실행한 컨테이너가 네트워크 인터페이스를 가지지 않아, 컨테이너 외부와의 통신이 불가능하다.
    • --network=none
      ex) docker container run -it --network=none [이미지 이름]


5. 도커 스토리지

도커 컨테이너가 삭제되면, 컨테이너 내부에 존재하는 파일도 함께 삭제된다.

 

도커 스토리지는 도커 컨테이너에서 생성되는 데이터를 보존하기 위해 사용된다.

 

도커 스토리지에는 3가지 종류가 있다.

  • bind mount: 도커 호스트 디렉터리와 컨테이너 디렉터리를 연결시켜 데이터를 보관하는 방식.
  • volume: 도커를 활용해 볼륨을 생성한 후, 컨테이너의 디렉터리와 공유하는 방식. (컨테이너를 삭제해도 데이터가 유지된다)
  • tmpfs: 도커 호스트 메모리에 파일이 저장되는 방식. (컨테이너를 삭제하면 해당 파일도 함께 삭제된다.)

출처: https://bcho.tistory.com/1360

 

 

* 도커 설치하기

2025.09.21 - [개발환경 설정] - [쿠버네티스] 우분투(리눅스) 환경에서 Docker와 Kubernetes 환경설정

 

[쿠버네티스] 우분투(리눅스) 환경에서 Docker와 Kubernetes 환경설정

1. Docker 설치* 도커 기초 개념2025.09.28 - [도커] - [도커] 도커(Docker) 기초 개념 정리 [도커] 도커(Docker) 기초 개념 정리1. 도커 구조도커 클라이언트: 도커에 명령을 내릴 수 있는 CLI 도구.도커 호스트

lightningtech.tistory.com


참고