이미지
- 기본 개념은 이 글에서
관련 명령어
- 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>: 계층 확인 가능
- 버전을 변경해서 다시 빌드한다면, 도커 레이어는 변경된 부분만 업데이트하고 나머지는 캐시를 사용.
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 |