[Docker] 이미지 만들기

2023. 10. 22. 16:44· ♾️DevOps/Docker
목차
  1. commit 커맨드
  2. Dockerfile 스크립트
  3. 참고 자료

 

같은 구성의 컨테이너를 여러 개 만들거나, 다른 컴퓨터나 서버로 컨테이너를 이동시켜야 하는 경우들이 있다.

이 때 컨테이너 자체를 그대로 복제할 수는 없기 때문에 컨테이너를 이미지로 변환한 후 추출해서 옮겨야 한다고 한다.

 

컨테이너를 이미지로 변환시키기 위해서는 commit 커맨드를 이용해야 하고,

컨테이너가 없는 상태에서 이미지를 만들기 위해서는 Dockerfile 스크립트를 이용해야 한다.

 

 

 

commit 커맨드

  • 컨테이너 -> 이미지 변환
  • 기존 컨테이너를 복제하거나 이동해야 할 때 편리
  • docker commit 컨테이너_이름 새로운_이미지_이름

 

 

[실습해보기 - Apache]

 

1️⃣ 아파치 컨테이너 생성

docker run --name apa000ex22 -d -p 8092:80 httpd
  • docker (container) run : 도커 이미지를 내려받고 컨테이너를 생성해 실행함 (docker image pull, docker container create, docker container start 3개의 명령어를 하나로 합친 것과 같음)
  • -- name apa000ex22 : 컨테이너 이름. 원하는 대로 지어도 됨.
  • - d : 백그라운드 실행. detach.
  • - p 8092:80 : 포트 번호 지정. publish. 호스트의 8092번 포트와 컨테이너의 80번 포트를 연결함.
  • httpd : Apache 컨테이너의 이미지 이름

  • docker ps (= docker container ls) : 컨테이너 목록 출력

 

2️⃣ 컨테이너 -> 이미지 변환 (commit) 및 확인

docker commit apa000ex22 ex22_original1
  • docker commit : 도커 컨텐이너를 이미지로 변환
  • apa000ex22 : 컨테이너 이름
  • ex22_original1 : 생성할 이미지 이름

  • docker image ls : 이미지 목록 출력

 

 

 

Dockerfile 스크립트

  • Dockerfile 스크립트를 빌드해 이미지 생성
  • Dockerfile 스크립트에는 토대가 될 이미지나 실행할 명령어 등을 작성한다.
  • 재료 폴더에 Dockerfile과 이미지의 재료들, 컨테이너에 넣을 파일을 함께 두고 빌드한다.
  • docker build -t 생성할_이미지_이름 재료_폴더_경로
  • Dockerfile 스크립트 예시
FROM 이미지_이름
COPY 원본_경로 대상_경로
RUN 리눅스_명령어
...
  • 주요 Dockerfile 인스트럭션
Dockerfile 인스트럭션 내용
FROM 토대가 되는 이미지 지정
ADD 이미지에 파일이나 폴더를 추가
COPY 이미지에 파일이나 폴더를 추가
RUN 이미지를 빌드할 때 실행할 명령어 지정
CMD 컨테이너를 실행할 때 실행할 명령어 지정
ENTRYPOINT 컨테이너를 실행할 때 실행할 명령어 강제 지정
ONBUILD 이 이미지를 기반으로 다른 이미지를 빌드할 때 실행할 명령어 지정
EXPOSE 이미지가 통신에 사용할 포트를 명시적으로 지정
VOLUME 퍼시스턴시 데이터를 저장할 경로를 명시적으로 지정
ENV 환경변수를 정의
WORKDIR RUN, CMD, ENTRYPOINT, ADD, COPY에 정의된 명령어를 실행하는 작업 디렉터리 지정
SHELL 빌드 시 사용할 셸 변경
LABEL 이름이나 버전, 저작자 정보 설정
USER RUN, CMD, ENTRYPOINT에 정의된 명령어를 실행하는 사용자 또는 그룹 지정
ARG docker build 커맨드를 사용할 때 입력받을 수 있는 인자 선언
STOPSIGNAL docker stop 커맨드를 사용할 때 컨테이너 안에서 실행 중인 프로그램에 전달되는 시그널 변경
HEALTHCHECK 컨테이너 헬스체크 방법을 커스터마이징

 

 

[실습해보기 - Apache]

 

1️⃣ 재료 폴더에 재료 준비

      'apa_folder' 이름의 폴더 안에 index.html 파일 배치하기 

 

 

2️⃣ Dockerfile 스크립트 작성

      ※ 파일 이름은 'Dockerfile'이어야 한다!! DockerFile (X)  dockerfile (X)

      ※ 파일 확장명이 보이도록 설정했을 때 .txt 확장명이 없어야 한다.

httpd 이미지 안에 1번에서 배치한 index.html 파일을 추가한다.
확장명 보이도록 설정하는 방법

 

3️⃣ 이미지 빌드 및 확인

docker build -t ex22_original2 C:\Users\heoyu\Documents\apa_folder
  • docker (image) build : 도커 이미지 생성
  • -t : 특수 키를 사용 가능하도록 함. tty.
  • ex22_original2 : 생성할 이미지 이름
  • C:\Users\(사용자명)\Documents\apa_folder : 재료 폴더 경로

  • docker image ls : 이미지 목록 출력

 

 

 

 

참고 자료

📓 그림과 실습으로 배우는 도커 & 쿠버네티스

 

그림과 실습으로 배우는 도커 & 쿠버네티스: 개념과 작동 원리가 쏙쏙 이해되는 완벽 입문서

컨테이너나 도커를 도통 이해하기 어려운 분들을 위한 본격 도커 입문서! 이 책은 컨테이너 기술이 어렵게 느껴지는 엔지니어나 백엔드 기술에 자신이 없는 분들을 위한 도커 입문서입니다. 자

wikibook.co.kr

 

  1. commit 커맨드
  2. Dockerfile 스크립트
  3. 참고 자료
'♾️DevOps/Docker' 카테고리의 다른 글
  • [Docker] registry 구축 및 이미지 업로드 - 1)로컬 비공개 2)도커허브 공개/비공개
  • [Docker] 컨테이너 내에서 bash 사용하기
  • [Docker] 스토리지 마운트 (볼륨 마운트 & 바인드 마운트)
  • [Docker] 도커란?! 정의, 용어, 동작원리, 장단점, 명령어
유댕둥당
유댕둥당
유댕둥당
유댕's log
유댕둥당
글쓰기 관리자
전체
오늘
어제
  • 카테고리 (78)
    • 🖥️Computer Science (34)
      • 알고리즘 (34)
    • 🔠Language (5)
      • Java (0)
      • Kotlin (3)
      • C (2)
    • 📥SQL (7)
      • Oracle (6)
    • ♾️DevOps (7)
      • Docker (7)
      • Kubernetes (0)
    • 🐱Git (5)
    • 📁PJT (2)
    • 🧑‍💻Lecture (7)
      • SSAFY (3)
      • 스파르타 코딩클럽 (4)
    • 🎁일상 (11)
      • 국내여행 (4)
      • 해외여행 (0)
      • 일본생활 (7)

블로그 메뉴

  • 👉인스타(SSAFYcial) @ssafycial_yujung
  • 👉인스타(개인) @ik_yu_jung

공지사항

인기 글

태그

  • 썬플라워
  • 도커
  • MySQL
  • Oracle
  • docker
  • 자전거탄풍경
  • 워드프레스
  • 독도박물관
  • 오라클
  • 일본
  • dockerfile
  • 회원가입
  • C언어
  • 티스토리챌린지
  • 라인모
  • 컨테이너
  • 볼륨
  • 오블완
  • 통신사
  • SQL

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
유댕둥당
[Docker] 이미지 만들기
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.