본문 바로가기

GitOps/Docker

[Docker] 이미지

이미지

관련 명령어

  • docker image tag <이미지> <이름>: 이미지 이름 지정
  • docker container commit <컨테이너>: 컨테이너로부터 이미지 생성
  • docker image pull <이미지>: image를 regstry로부터 pull
  • docker image ls: 이미지 목록 확인

기존 컨테이너로 이미지 생성 예제

# 컨테이너 실행
docker run -it ubuntu /bin/bash

# ubuntu에 figlet 설치 (컨테이너 내부에서 실행하는 명령어)
apt-get update
apt-get install -y figlet
exit

# 컨테이너를 통해 이미지 생성
docker container commit <CONTAINER_ID>

# 생성된 이미지 태그 지정
docker image tag <IMAGE_ID> figlet

 


Dockerfile

  • 이미지를 빌드하기 위한 일종의 지침서
  • 텍스트 파일 형태이기에 형상 관리에도 용이함

Dockerfile 기본 지시어

  • FROM <이미지>: 기본 이미지
  • RUN <명령>: 이미지를 빌드할 때 실행되는 명령 (보통 라이브러리 설치에 사용)
  • COPY <로컬 경로> <컨테이너 내부 경로>: 로컬 경로에서 컨테이너 경로로 파일 전송
  • WORKDIR <컨테이너 내부 경로>: 컨테이너가 시작될 때의 경로 지정
  • CMD <명령>: 컨테이너가 시작될 때 실행할 명령. docker run 명령에서 넣는 명령어로 오버라이드 가능

Dockerfile 추가 지시어

  • ENTRYPOINT <명령>: 컨테이너가 시작될 때 실행할 명령. CMD와는 달리 오버라이드가 불가능해서 반드시 실행된다. (--entrypoint 옵션으로 강제 오버라이드 가능)
  • ARG <변수명>=<기본값>: 빌드 시 사용할 매개 변수 설정. 기본값을 설정하고, build 명령에서 --build-arg 옵션으로 오버라이드 가능.
  • ENV <변수명>=<기본값>: 컨테이너 내부 환경 변수 설정. 기본값을 설정하고, run 명령에서 -e 옵션으로 오버라이드 가능
  • USER <사용자명>: 특정 유저로 설정해서 컨테이너 실행 가능. 지정하지 않으면 root.
  • EXPOSE <포트 번호>: 도커 내 애플리케이션이 사용하는 포트

Dockerfile로 이미지 생성 예제

// hello.js
var os = require("os");
var hostname = os.hostname();
console.log("hello from " + hostname);
# Dockerfile
FROM alpine
RUN apk update && apk add nodejs
COPY . /app
WORKDIR /app
CMD ["node","index.js"]
# 위의 두 파일(hello.js, Dockerfile)은 /app 디렉토리에 있다고 가정
# Dockerfile을 이용해서 build
docker image build -t hello:v0.1 .

# build된 이미지를 실행
docker run hello:v0.1

 


이미지 계층

  • docker image history <이미지 ID>: 계층 확인 가능
  • 버전을 변경해서 다시 빌드한다면, 도커 레이어는 변경된 부분만 업데이트하고 나머지는 캐시를 사용.

hello.js의 변경에 영향을 받지 않은 계층(RUN)은 캐시된 계층을 사용한 것을 볼 수 있다.

Inspection

  • docker image inspect <이미지 ID or 이름>: 이미지에 대한 정보 확인 가능
  • --format 옵션을 사용해서 특정 정보만 검색할 수도 있다.

 

'GitOps > Docker' 카테고리의 다른 글

[Docker] 도커 네트워크  (0) 2025.01.12
[Docker] 웹사이트 배포  (0) 2025.01.12
[Docker] 컨테이너  (0) 2025.01.10
[Docker] 개념  (0) 2025.01.09