Day 69 - Docker

haxxru log;·2026년 7월 6일
post-thumbnail

이 글은 2026년 06월 30일 작성된 글입니다.

Docker를 학습하면서 컨테이너의 포트 매핑부터 네트워크 통신, 바인드 마운트, Dockerfile 작성, 이미지 빌드와 레이어 구조까지 학습했다. 특히 컨테이너 간 통신 방식과 Docker Image가 생성되는 과정을 중심으로 정리했다.


1. 포트 매핑

Docker 컨테이너는 외부와 격리되어 실행되므로, 서비스를 외부에서 사용하려면 포트를 연결해야 한다.

핵심

  • -p : 호스트 포트와 컨테이너 포트를 직접 연결
  • -P : 노출된 포트를 임의의 호스트 포트에 자동 연결
  • 외부에서 서비스에 접근하려면 포트 매핑이 필수이다.
docker run -d -p 8080:80 nginx
옵션설명
-p원하는 포트를 직접 매핑
-PDocker가 임의의 포트를 자동 할당

2. 컨테이너 정보 확인

실행 중인 컨테이너의 설정과 네트워크 정보를 확인할 수 있다.

핵심

  • 컨테이너 ID 확인
  • IP 주소 확인
  • 포트 매핑 확인
  • 환경 변수 및 실행 정보 확인
docker inspect mynginx

특정 정보만 확인할 수도 있다.

docker inspect mynginx | grep '"IPAddress"'

3. 컨테이너 내부 작업

실행 중인 컨테이너에 접속하거나 파일을 복사할 수 있다.

핵심

  • docker exec : 컨테이너 내부 명령 실행
  • docker cp : 호스트 ↔ 컨테이너 파일 복사
  • 웹루트에 HTML을 추가하여 즉시 서비스 가능
docker exec -it mynginx bash
docker cp index.html mynginx:/usr/share/nginx/html/

4. 바인드 마운트

호스트 디렉터리와 컨테이너 디렉터리를 연결하는 기능이다.

핵심

  • 호스트에서 수정하면 즉시 반영
  • 컨테이너 삭제 후에도 파일 유지
  • 개발 환경에서 매우 유용
docker run \
-v ./html:/usr/share/nginx/html

장점

  • 실시간 반영
  • 파일 유지
  • 코드 관리 편리

5. 컨테이너 네트워크

컨테이너끼리 다양한 방법으로 통신할 수 있다.

핵심

  • 기본 Bridge Network 제공
  • 사용자 정의 Network 생성 가능
  • IP 또는 컨테이너 이름으로 통신 가능
docker network create common

통신 방식

방식특징
Bridge기본 네트워크
User Network컨테이너 이름(DNS) 지원
Host Port호스트 포트를 통해 통신
host.docker.internal호스트 OS 접근

6. docker exec와 docker cp 활용

컨테이너 내부를 직접 수정하지 않아도 필요한 파일을 쉽게 관리할 수 있다.

핵심

  • 컨테이너 접속 없이 파일 복사 가능
  • 호스트와 컨테이너 간 양방향 복사 지원
  • 웹 리소스 관리에 자주 사용
docker cp sub.html mynginx:/usr/share/nginx/html/

7. Docker Image와 Dockerfile

Docker 이미지는 애플리케이션뿐 아니라 실행 환경까지 함께 포함하는 패키지이다.

핵심

  • 실행 환경까지 함께 배포
  • Dockerfile을 기반으로 이미지 생성
  • 동일한 환경을 어디서나 재현 가능
FROM nginx:latest

COPY source/index.html /usr/share/nginx/html/

이미지 생성

docker build -t myname/nginx:1 .

8. Docker Image Layer

Docker 이미지는 여러 개의 Layer로 구성된다.

핵심

  • 모든 Layer는 Immutable(불변)
  • Dockerfile 한 줄마다 Layer 생성
  • 변경되지 않은 Layer는 재사용
FROM nginx:latest
COPY source/index.html /usr/share/nginx/html/
RUN apt-get update

주요 Layer

명령어역할
FROM기본 이미지
COPY파일 복사
RUN명령 실행

9. Docker Cache

Docker는 변경되지 않은 Layer를 캐시하여 빌드 시간을 줄인다.

핵심

  • 변경된 Layer부터 다시 빌드
  • 이전 Layer는 그대로 재사용
  • Dockerfile 작성 순서가 중요

예시

FROM
 ↓
COPY
 ↓
RUN
  • COPY가 변경되면 이후 RUN도 다시 실행된다.
  • 아무것도 변경되지 않았다면 모든 Layer가 캐시를 사용한다.

✅ 정리

  • Docker 컨테이너는 포트 매핑을 통해 외부와 통신할 수 있다.
  • docker inspect, docker exec, docker cp를 이용하면 실행 중인 컨테이너를 쉽게 관리할 수 있다.
  • 바인드 마운트를 사용하면 호스트와 컨테이너가 동일한 파일을 공유하여 개발이 편리해진다.
  • 사용자 정의 네트워크를 사용하면 컨테이너 이름만으로도 통신할 수 있다.
  • host.docker.internal을 이용하면 컨테이너에서 호스트 OS의 서비스에도 접근할 수 있다.
  • Docker Image는 애플리케이션뿐 아니라 실행 환경까지 함께 포함하여 동일한 실행 환경을 보장한다.
  • Dockerfile의 각 명령은 하나의 Layer를 생성하며, Layer 구조 덕분에 캐시를 효율적으로 활용할 수 있다.
  • Docker의 네트워크와 이미지 구조를 이해하면 개발과 배포 환경을 더욱 안정적으로 관리할 수 있다.

0개의 댓글