Docker

Docker - 이미지 빌드, 컨테이너 실행 및 관리

최 수빈 2025. 2. 12. 16:46

 

Docker 이미지 빌드

docker build -t 이미지이름:태그 Dockerfile경로

 

예시코드

docker build -t myapp:1.0

-t 옵션 : 이미지에 이름과 태그 지정

. (현재 디렉토리) : Dockerfile이 있는 경로

 

Docker 컨테이너 실행

docker run -p 호스트포트:컨테이너포트 이미지이름:태그

 

예시코드

docker run -p 8000:8000 myapp:1.0

-p 8000:8000 : 호스트의 8000번 포트와 컨테이너의 8000번 포트 연결

myapp:1.0 : 실행할 도커 이미지 지정

 

 

*빌드 과정

  1. Dockerfile 읽기
    작성된 Dockerfile을 기반으로 명령어 실행
  2. 베이스 이미지 다운로드
    정의된 FROM 이미지가 로컬에 없으면 도커 허브에서 다운로드
  3. 명령어 실행
    Dockerfile의 각 명령어를 순차적으로 실행
  4. 레이어 캐싱
    이전에 실행된 단계가 변경되지 않았다면 해당 단계를 캐시에서 가져옴
  5. 이미지 생성
    최종적으로 완성된 도커 이미지 생성

 

생성된 이미지 확인

docker images

 

 

도커 이미지 관리

 

이미지 삭제

docker rmi 이미지 이름 또는 ID

 

 

이미지 태그 변경 

docker tag 기존 이미지 이름:기존 태그 새 이미지 이름:새태그

 

예시 코드

docker tag myapp:1.0 myapp:latest

 

  • Docker는 프로젝트 코드가 변경될 경우, 새로운 이미지를 빌드해야 함
  • COPY 명령어는 해당 시점의 코드 내용을 기반으로 이미지를 생성
  • 보통 태그(tag)를 활용하여 버전을 관리(v1, latest 등)

 

이미지 저장  및 로드

 

이미지를 파일로 저장

docker save -o myapp.tar myapp:1.0

 

파일에서 이미지 로드

docker lead -i myapp.tr

 

 

왜 Dockerfile이 아니라 이미지를 공유할까?

 Dockerfile을 공유하면 새롭게 빌드 과정이 필요하지만, 이미지를 공유하면 바로 실행 가능.

 보안 문제 : Dockerfile은 소스 코드가 노출될 가능성이 있지만, 이미지 자체는 내부를 확인하기 어렵다.

 

빌드 컨텍스트 관리

COPY로 불필요한 파일을 복사하지 않도록 .dockerignore 파일 설정

 

 

REPOSITORY TAG IMAGE ID CREATED SIZE
myapp 1.0 a1b2c3d4e5f6 5 minutes ago 123MB
python 3.10-slim d1e2f3g4h5i6 2 days ago 23MB

 

REPOSITORY : 이미지 이름

TAG : 이미지 태그

IMAGE ID : 이미지의 고유 ID

SIZE : 이미지 크기

 

 

-p 8000:8000 : 호스트와 컨테이너의 포트 연결

myapp:1.0 : 실행할 이미지 지정

 

 

*Docker Tags와 Image ID

  • 같은 파일로 만든 Docker 이미지는 같은 IMAGE ID를 가짐
  • 다른 파일로 만든 경우, IMAGE ID가 달라짐
  • digest 개념을 활용하여 Git처럼 버전 관리 가능
  • 레이어 구조 : 최상단 레이어만 변경되므로 캐시를 활용해 빌드 속도 최적화

 

 

Docker 컨테이너 관리

 

 

실행 중인 컨테이너 확인

docker ps

 

모든 컨테이너 확인 (중지된 컨테이너 포함)

docker ps -a

 

실행 중인 컨테이너 중지

docker stop 컨테이너ID 또는 이름

 

컨테이너 삭제

docker rm 컨테이너ID 또는 이름

 

사용하지 않는 모든 컨테이너 삭제

docker system prune

 

컨테이너 내부 포트와 호스트 시스템의 포트 연결 ( 포트 매핑)

p 호스트 포트:컨테이너 포트

 

예시코드

docker run -d -p 8000:8000 myapp:1.0

컨테이너를 백그라운드에서 실행, 호스트의 8000번 포트-컨테이너의 8000번 포트 연결

 

*-d 옵션을 추가하면 터미널을 점유하지 않고 백그라운드에서 실행됨

 

docker logs 컨테이너ID 컨테이너 실행 로그 확인
docker exec -it 컨테이너ID bash 실행 중인 컨테이너 내부 접속

 

 

Docker Hub에 이미지 푸시

 

1. 로그인

docker login

 

2. 이미지 빌드

docker build -t 유저이름/이미지이름:태그 .

 

3. Docker Hub로 푸시

docker push 유저이름/이미지이름:태그

 

컨테이너 확인 및 종료

 

실행 중인 컨테이너 목록 확인

docker ps

 

컨테이너 중지

docker stop 컨테이너ID 또는 이름

 

 

 

'Docker' 카테고리의 다른 글

Docker - Compose  (0) 2025.02.19
Docker  (0) 2024.12.24
Virtual Machines(VMs) / Containers  (2) 2024.12.15