[실습] 도커 실습 1 - 컨테이너 연동, 파일 복사, 볼륨 마운트, 도커 이미지 생성
필기자
2024-09-21 10:40
1,584
0
본문
목차
- 컨테이너 연동
- 파일 복사
- 볼륨 마운트
- 도커 이미지 생성
컨테이너 연동
컨테이너 연동 실습 시나리오
- network 구성
- mysql 컨테이너 설치
- 워드프레스 컨테이너 설치
- 워드프레스 <-> mysql 연동
워드 프레스
- 웹 사이트를 만들기 위한 소프트웨어
- 워드프레스가 동작하려면 워드프레스 프로그램 외에도 아파치, 데이터베이스, PHP 런타임 필요
- 워드프레스 공식 이미지에 워드프레스 프로그램(본체)와 아파치, PHP 런타임 포함
- 워드프레스는 데이터베이스 중 MySQL 및 MariaDB를 지원
도커 네트워크 생성
- 워드프레스 프로그램이 MySQL에 저장된 데이터를 읽고 쓰기 위해 두 컨테이너가 연결되어야 함
- 가상 네트워크를 생성하고 이 네트워크에 두 개의 컨테이너를 소속시켜 두 컨테이너를 연결
#네트워크 생성
docker network create wordpress000net1
MySQL 컨테이너 생성
- 데이터베이스 서버를 미리 구축하고 설정한 후 워드프레스 컨테이너와 연동하여 사용하기 위해 MySQL 컨테이너를 먼저 생성
- 컨테이너가 중지되었을 때 자동 재시작 옵션 : --restart unless-stopped
#MySQL 컨테이너 생성
docker run --name mysql000ex11 -dit --net=wordpress000net1 -e MYSQL_ROOT_PASSWORD=myrootpass -e MYSQL_DATABASE=wordpress000db -e MYSQL_USER=wordpress000kun -e MYSQL_PASSWORD=wkunpass mysql:8.0 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-authentication-plugin=mysql_native_password
MySQL 컨테이너 생성시 각 옵션 및 인자의 역할
- MySQL 데이터베이스를 초기화하고 워드프레스와 연동하기 위해 필요한 설정을 지정
옵션 및 인자 | 의미 |
--net=wordpress000net1 | ‘wordpress000net1’ 네트워크에 컨테이너 연결 |
-e MYSQL_ROOT_PASSWORD=myrootpass | MySQL 루트 계정의 비밀번호를 ‘myrootpass’로 설정 |
-e MYSQL_DATABASE=wordpress000db | MySQL 데이터베이스의 이름을 ‘wordpress000db’로 설정 |
-e MYSQL_USER=wordpress000kun | MySQL에 생성할 사용자 계정의 이름을 ‘wordpress000kun’으로 설정 |
-e MYSQL_PASSWORD=wkunpass | 위 사용자 계정의 비밀번호를 ‘wkunpass’로 설정 |
--character-set-server=utf8mb4 | MySQL 서버의 기본 문자셋을 ‘utf8mb4’로 설정 문자셋은 다양한 언어와 이모지를 지원하는 유니코드 문자셋 |
--collation-server=utf8mb4_unicode_ci | MySQL 서버의 기본 콜레이션(정렬 규칙)을 ‘utf8mb4_unicode_ci’로 설정 콜레이션은 문자열 비교와 정렬 방식을 지정, 유니코드 문자열의 비교를 위해 사용 정렬 규칙은 문자열을 비교하고 정렬하는 방식을 정의함 utf8mb4_unicode_ci는 유니코드 문자 정렬을 기준으로 하며, 대소문자를 구분하지 않고 비교 및 정렬하는 Case Insensitive(CI) 방식 |
--default-authentication-plugin=mysql_native_password | MySQL 사용자 계정의 기본 인증 플러그인을 mysql_native_password로 설정 - caching_sha2_password : SHA-256, 8.0부터 지원 강력한 암호화 - mysql_native_password : SHA-1, 5.0부터 지원, 구버전 - auth_socket : 운영체제 계정, 로컬 연결 - auth_pam : 운영체제 계정, PAM(Pluggable Authentication Modules) 즉, 생체인식, OTP 등등 연결 |
워드프레스 컨테이너 생성
#워드프레스 컨테이너 생성
docker run --name wordpress000ex12 -dit --net=wordpress000net1 -p 8085:80 -e WORDPRESS_DB_HOST=mysql000ex11 -e WORDPRESS_DB_NAME=wordpress000db -e WORDPRESS_DB_USER=wordpress000kun -e WORDPRESS_DB_PASSWORD=wkunpass wordpress
워드프레스 컨테이너 생성시 각 옵션 및 인자의 역할
- 워드프레스와 MySQL 간의 연동을 위해 설정한 데이터베이스 정보를 워드프레스 컨테이너에 전달
옵션 및 인자 | 의미 |
--net=wordpress000net1 | ‘wordpress000net1’ 네트워크에 컨테이너 연결 |
-p 8085:80 | 호스트의 8085 포트와 컨테이너의 80 포트를 매핑하여 외부에서 컨테이너에 접근 가능 |
-e WORDPRESS_DB_HOST=mysql000ex11 | 워드프레스가 사용할 MySQL 데이터베이스 호스트의 주소를 ‘mysql000ex11’로 설정 |
-e WORDPRESS_DB_NAME=wordpress000db | 워드프레스가 사용할 데이터베이스의 이름을 ‘wordpress000db‘로 설정 |
-e WORDPRESS_DB_USER=wordpress000kun | 워드프레스와 연결할 데이터베이스 사용자 계정의 이름을 ‘wordpress000kun’로 설정 |
-e WORDPRESS_DB_PASSWORD=wkunpass | 위 사용자 계정의 비밀번호를 ‘wkunpass’로 설정 |
웹 브라우저를 통해 로컬호스트와 해당 포트번호로 접속 워드프레스 초기 화면
워드프레스 가입
- 정보를 입력한 후 '워드프레스 설치' 버튼 클릭
MySQL 컨테이너 내부에 접속하여 워드프레스와 연동이 되어 있는지 가입한 계정 정보 확인
- 컨테이너에서 리눅스 명령어를 실행하려면 우리 명령을 전달하는 프로그램인 셸(Shell)이 필요
#MySQL 컨테이너 내부로 들어가서 'bash'라는 셸 프로그램 실행
docker exec -it mysql000ex11 bash
#MySQL 데이터베이스 서버에 'wordpress000kun' 사용자로 접속
mysql -u wordpress000kun -p
계정 정보가 있는 데이터베이스 및 테이블 확인
#사용할 데이터베이스 선택
use wordpress000db;
#계정에 있는 모든 테이블 확인
SHOW TABLES;
계정 정보가 있는 테이블 확인
#계정 정보가 있는 테이블 확인
SELECT * FROM wp_users;
도커 명령어 실행을 위해 MySQL 서버 및 컨테이너에서 나가기
#나가기
exit
워드프레스 사이트 구축 정리
- 컨테이너 종료
- docker stop mysql000ex11
- docker stop wordpress000ex12
- 컨테이너 삭제
- docker rm mysql000ex11
- docker rm wordpress000ex12
- 이미지 삭제
- docker image rm mysql
- docker image rm wordpress
- 네트워크 삭제
- docker network rm wordpress000net1
워드프레스 사이트 시스템 구성 및 데이터 흐름
- 윈도우(호스트) == 가상 NAT 라우터 (게이트웨이 IP: 192.168.135.1)
- 역할: VMware의 NAT 라우터로서 외부 네트워크와 내부 네트워크 간의 IP 변환(NAT)을 수행한다.
- 기능: 외부에서 들어오는 요청을 가상 네트워크로 전달하고, 내부 네트워크에서 나가는 트래픽을 외부 네트워크로 변환하여 전달한다.
- 입력 포트 IP: 172.25.80.1 (윈도우 랜카드의 IP)
- 출력 포트 IP: 192.168.135.1 (VMware 내부 네트워크의 게이트웨이 IP)
- 가상 스위치 (VMware 네트워크 내)
- 역할: 윈도우(호스트)와 우분투(게스트) 간의 네트워크 트래픽을 스위칭한다.
- 기능: VMware 내부에서 호스트와 게스트 간의 패킷을 MAC 주소 기반으로 전달하며, 물리적 스위치처럼 작동한다.
- 우분투(게스트) == 가상 NAT 라우터 (게이트웨이 IP: 172.18.0.1)
- 역할: Docker 네트워크 내부의 NAT 라우터로, 내부 컨테이너 간 패킷 라우팅을 수행하고, IP 변환을 통해 외부와 통신한다.
- 입력 포트 IP: 192.168.135.130 (VMware 우분투 IP)
- 출력 포트 IP: 172.18.0.1 (Docker 가상 네트워크의 게이트웨이 IP)
- NAT 기능
- 내부 IP를 외부에 숨기고, 외부에서 들어오는 트래픽을 내부 적절한 IP로 전달한다.
- 포트포워(Port Forword) 기능
- NAT 기능의 일부이다.
- 외부 특정 포트로 들어오는 트래픽을 내부의 특정 IP와 포트로 전달
- docker run --name wordpress000ex12 -dit --net=wordpress000net1 -p 8085:80 ...
- 8085 포트의 패킷을 -> wordpress000ex12:80으로 즉 결정된 IP와포트(172.18.0.3:80)로 패킷을 전달한다.
- docker run --name wordpress000ex12 -dit --net=wordpress000net1 -p 8085:80 ...
- 가상의 스위치 (Docker 네트워크 내)
- 역할: Docker 네트워크 내부에서 컨테이너 간 패킷을 전달하는 스위치 역할을 한다.
- 기능: Docker 네트워크 내에서 각 컨테이너 간의 트래픽을 관리하고 MAC 주소를 기반으로 전달한다.
- 워드프레스 컨테이너 (IP: 172.18.0.3)
- 역할: 웹 애플리케이션 제공 컨테이너로, Docker 네트워크에서 실행된다.
- 기능: 웹 요청을 처리하고, 데이터베이스와 통신한다.
- MySQL 컨테이너 (IP: 172.18.0.4)
- 역할: 데이터베이스 제공 컨테이너로, 워드프레스 컨테이너와 통신한다.
- 기능: 데이터 저장 및 조회 작업을 처리한다.
파일 복사
컨테이너 내부와 호스트 간에 파일을 복사하는 작업의 필요성
- 데이터 복원
- 컨테이너 안의 데이터를 호스트로 백업하거나, 호스트에서 데이터를 컨테이너로 복원할 때 필요
- 중요한 데이터를 보존하고 컨테이너가 삭제되더라도 안전하게 데이터를 유지
- 파일 공유
- 호스트와 컨테이너 간 파일 공유 시 사용
- 컨테이너 내에서 생성된 결과물이나 로그 파일 등을 호스트에서 확인하고 사용
- 컨테이너에서 생성된 파일을 호스트에서 사용해야 할 때
파일 복사 명령어
- 파일 복사는 양방향 모두 가능
- 컨테이너로 파일을 복사하는 커맨드 사용 예(호스트 -> 컨테이너)
- docker cp [호스트_경로] [컨테이너_이름] : [컨테이너_경로]
- 호스트로 파일을 복사하는 커맨드 사용 예(컨테이너 -> 호스트)
- docker cp [컨테이너_이름] : [컨테이너_경로] [호스트_경로]
컨테이너와 호스트 간에 파일 복사 실습
- 호스트의 html 파일을 아파치 컨테이너 내부로 복사하여 초기 화면 변경
디렉토리 생성 및 html 파일 생성
#홈 디렉토리 아래 '~/example_html' 디렉토리 생성
mkdir ~/example_html
#nano 텍스트 에디터를 사용 '~/example_html' 디렉토리에 새로운 HTML 파일 생성
nano ~/example_html/index.html
html 내용 작성
<html>
<meta charset="utf-8"/>
<body>
<div> 안녕하세요! </div>
</body>
</html>
아파치 컨테이너 생성
#아파치 컨테이너 생성
docker run --name apa000ex19 -d -p 8089:80 httpd
웹 브라우저를 통해 로컬호스트와 해당 포트번호로 접속
복사 명령어로 호스트에서 컨테이너로 index.html 파일 복사
#'~/example_html/index.html' 파일을 아파치 컨테이너인 'apa000ex19'의 '/usr/local/apache2/htdocs/' 경로로 복사
#아파치 컨테이너의 경로는 아파치 서버가 웹 브라우저에 제공하는 웹 루트 디렉토리
docker cp ~/example_html/index.html apa000ex19:/usr/local/apache2/htdocs/
웹 브라우저에서 로컬호스트와 지정된 포트 번호로 접속하여 업데이트된 초기 화면을 확인
볼륨 & 마운트
컨테이너의 휘발성
- 컨테이너가 시작되고 실행되는 동안에는 컨테이너 내의 모든 데이터 및 상태가 보존
- 컨테이너가 삭제되면 컨테이너 내부의 데이터와 상태는 사라짐(파일, 프로세스 상태, 메모리 내용 등)
- 컨테이너의 휘발성을 극복하기 위해 볼륨이라는 저장 공간을 이용해 데이터의 영속성을 보장
도커 볼륨(Docker Volume)
- 컨테이너와 호스트 머신 간 데이터를 안전하게 저장, 관리 및 공유하기 위한 독립적인 저장 공간
- 도커 엔진에 의해 관리되며 호스트 머신의 파일 시스템과는 분리되어 작동
- 데이터의 영속성을 보장하고 여러 컨테이너 간에 데이터를 공유 및 백업이 가능
데이터 퍼시스턴시(data persistency)
- 데이터를 옮기는 작업 대신 처음부터 컨테이너 외부에 데이터를 보관하고 이를 컨테이너에서 사용하는 개념
- 바인드 마운트, 도커 볼륨
마운트
- 데이터 퍼시스턴시 구현 방법, 즉 마운트는 데이터시스턴시를 구현하는 방법임
- 호스트의 파일 시스템이나 볼륨을 도커 컨테이너 내부의 특정 경로에 연결하는 작업
마운트의 종류
- 바인드 마운트(Bind Mount)
- 호스트 머신의 디렉토리를 컨테이너 내부에 마운트하여 데이터를 실시간으로 동기화하는 방식
- 주로 개발 중인 소스 코드나 파일을 컨테이너와 컴퓨터 간에 실시간으로 공유하고 변경 내용을 바로 확인할 때 사용
- 개발 작업을 편리하게 하고 컨테이너와 호스트 간에 데이터를 손쉽게 주고받을 수 있음
- 도커 볼륨(Docker Volume)
- 볼륨은 컨테이너에 디스크 형태로 마운트되어 안전하게 데이터를 저장하고 공유하는 방식
- 데이터베이스나 중요한 설정 파일과 같은 컨테이너 안의 파일을 안전하게 보관하고 다른 컨테이너와 공유할 때 사용
- 컨테이너 간 데이터를 안전하게 공유하고 영속성을 확보
바인드 마운트 실습
- 호스트 머신에 디렉토리 생성 후 컨테이너의 내부 경로와 마운트 및 초기 화면 변경
#홈 디렉토리 아래 마운트 할 디렉토리 생성
mkdir ~/apa_folder
#디렉토리와 마운트하는 아파치 컨테이너 생성
#'~/apa_folder' 디렉토리를 아파치 컨테이너의 '/usr/local/apache2/htdocs' 경로로 연결
docker run --name apa000ex20 -d -p 8090:80 -v ~/apa_folder:/usr/local/apache2/htdocs httpd
웹 브라우저에서 로컬호스트와 지정된 포트 번호로 접속하여 초기 화면 확인
- http://localhost:8090
- 아무 파일도 없는 경우 "It works"와 같은 기본 초기 화면이 출력되지만, 폴더가 마운트되면 해당 폴더 내의 파일 및 디렉토리 목록이 "Index of /" 초기 화면에 표시
마운트된 디렉토리 경로에 HTML 파일을 넣어 초기 화면을 실시간으로 변경
#nano 텍스트 에디터를 사용 '~/apa_folder' 디렉토리에 새로운 HTML 파일 생성
nano ~/apa_folder/index.html
- 작성 후 변경 사항 저장 에디터 종료
<html>
<meta charset="utf-8"/>
<body>
<div> 안녕하세요! </div>
</body>
</html>
웹 브라우저에서 로컬호스트와 지정된 포트 번호로 접속하여 업데이트된 초기 화면을 확인
볼륨 마운트 실습
- 볼륨 생성 후 컨테이너의 내부 경로와 마운트 및 초기 화면 변경
#볼륨 생성
docker volume create apa000vol1
#볼륨을 마운트하는 아파치 컨테이너를 생성
docker run --name apa000ex21 -d -p 8091:80 -v apa000vol1:/usr/local/apache2/htdocs httpd
docker exec -it apa000ex21 /bin/bash -c "chown -R $(id -u):$(id -g) /usr/local/apache2/htdocs"
docker stop apa000ex21
docker rm apa000ex21
docker run --name apa000ex21 -d -p 8091:80 -v apa000vol1:/usr/local/apache2/htdocs --user $(id -u):$(id -g) httpd
#볼륨 상세 정보 확인
docker volume inspect apa000vol1
#컨테이너 상세 정보 확인
docker container inspect apa000ex21
#볼륨 경로에서 'index.html' 파일 변경
nano /var/lib/docker/volumes/apa000vol1/_data/index.html
- 기존 초기 화면 html
<html>
<body>
<h1>It works!</h1>
</body>
</html>
- 업데이트된 초기 화면 html
<html>
<body>
<h1>Hello World!</h1>
</body>
</html>
웹 브라우저에서 로컬호스트와 지정된 포트 번호로 접속하여 업데이트된 초기 화면을 확인
도커 이미지 생성
컨테이너에서 이미지를 추출해 생성 실습
#아파치 컨테이너 생성
docker run --name apa000ex22 -d -p 8092:80 httpd
#컨테이너에서 현재 실행 중인 상태를 그대로 새로운 이미지로 생성
#docker commit [컨테이너_이름] [새로운_이미지_이름]
docker commit apa000ex22 ex22_original1
#이미지 목록 확인
docker image ls
Dockerfile
- 도커 이미지를 빌드하기 위한 텍스트 기반의 스크립트 또는 설정 파일
- docker 스크립트를 재료 폴더에 컨테이너에 넣을 파일과 함께 두어 이미지 생성
- docker build -t ex22_original2 [재료_폴더_경로]
Dockerfile로 이미지 생성 실습
#Dockerfile을 홈 디렉토리 아래 'apa_folder' 디렉토리에 생성
nano ~/apa_folder/dockerfile
FROM httpd
COPY index.html /usr/local/apache2/htdocs/
# /tmp 디렉토리를 생성하고 권한을 설정합니다.
RUN mkdir -p /tmp && chmod 1777 /tmp
# 패키지 관리자를 업데이트하고 패키지를 설치합니다.
RUN apt-get update && \
apt-get install -y apt-utils
#Dockerfile로 이미지 생성
#docker build -t [이미지_이름_지정] [재료_폴더_경로]
docker build -t ex22_original2 ~/apa_folder
특수 권한
-
SetUID (4xxx):
- 주로 파일에 사용된다.
- 파일 사용자가 해당 파일의 소유자의 권한으로 파일을 사용할 수 있다.
- 디렉토리에서는 거의 사용되지 않는다.
-
SetGID (2xxx):
- 파일이나 디렉토리에 사용된다.
- 파일에 적용되면, 파일을 사용자가 해당 파일의 소유자의 그룹 권한으로 파일을 사용할 수 있다
- 디렉토리에서는 SetGID가 설정되면, 그 디렉토리 내에서 생성된 파일들이 그 디렉토리의 그룹 소유권을 물려받는다.
-
Sticky bit (1xxx):
- 주로 디렉토리에 사용된다.
- 디렉토리 내에서 파일을 생성한 사용자만 그 파일을 삭제할 수 있도록 제한한다.
#이미지 목록 확인
docker image ls
#생성 이미지로 컨테이너 생성
docker run --name ex22 -d -p 8099:80 ex22_original2웹 브라우저에서 로컬호스트와 지정된 포트 번호로 접속하여 업데이트된 초기 화면을 확인
컨테이너 개조
- 컨테이너를 실행 중인 상태에서 컨테이너 내부의 파일 시스템, 환경 변수, 네트워크 설정 등을 변경하는 작업
컨테이너를 개조하는 방법
- 마운트와 파일 복사를 이용
- 컨테이너에서 리눅스 명령어 실행
컨테이너에서 명령어를 실행하려면 셸이 필요
- 컨테이너는 가장 일반적으로 사용되는 셸인 'bash'가 설치 되어 있음
- 컨테이너를 아무 설정 없이 실행하면 bash가 동작하지 않는 상태로 실행되기 때문에 bash를 실행해 명령을 입력받을 수 있는 상태로 만들어야 함
- 'bash'를 실행하려면 '/bin/bash' 인자를 전달해야 함
- docker run 또는 docker exec 커맨드와 함께 사용
docker exec
- 컨테이너 속에서 명령어를 실행하는 커맨드
- 'bash' 없이 어느 정도 명령을 직접 전달할 수는 있지만 초기 설정이 없어 동작하지 않는 경우도 있기 때문에 기본적으로는 셸을 통해 명령을 실행
- docker exec -it [컨테이너_이름] /bin/bash
docker run
- docker run -dit [이미지_이름] /bin/bash
- docker run 명령어를 사용해 bash 실행 시, 컨테이너는 실행 중이지만, 기본 패키지(예: Apache 등)는 실행되지 않음.
- 수동으로 기본 패키지를 실행하여야 함.
- 예, service apache2 start 또는 apachectl start (이미지와 배포판에 따라 명령어가 다를 수 있음)
- docker run은 기본 사용만 권장, bash 실행이 필요할 경우 docker exec 사용여 컨테이너 내부로 접속 권장
도커 엔진 명령(도커 엔진 관리 범위)
- 도커 엔진의 시작/종료
- sudo systemctl start docker
- sudo systemctl stop docker 등
- 네트워크, 디스크 설정, 실행중인 컨테이너 목록 확인 등 컨테이너 전체에 대한 관리 작업
- docker network create
- docker volume create
- docker ps 등
컨테이너 내부에서 실행하는 명령
- 컨테이너 속 새로운 소프트웨어 추가
docker exec -it [컨테이너_ID 또는 이름] /bin/bash
apt-get update
apt-get install nano # 예: nano 텍스트 편집기 설치
- 컨테이너 속 소프트웨어의 실행/종료/설정 변경
#Apache 서버 시작
docker exec -it [컨테이너_ID 또는 이름] service apache2 start
Nginx 서버 종료
docker exec -it [컨테이너_ID 또는 이름] service nginx stop
- 컨테이너 안과 밖의 파일 복사/이동/삭제 작업
#Apache 서버 시작
docker exec -it [컨테이너_ID 또는 이름] service apache2 start
Nginx 서버 종료
#호스트에서 컨테이너 내부로 파일 복사
docker cp [호스트_파일경로] [컨테이너_ID]:[컨테이너_경로]
#컨테이너 내부에서 호스트로 파일 복사
docker cp [컨테이너_ID]:[컨테이너_파일경로] [호스트_경로]
#컨테이너 내부에서 파일 삭제
docker exec -it [컨테이너_ID 또는 이름] rm /path/to/file
이미지 생성시 커밋(Commit)과 빌드(Build)의 차이
- 커밋 (Commit)
- 사용 목적: 현재 실행 중인 컨테이너의 상태를 새로운 이미지로 저장하는 과정.
- 동작 방식: 현재 컨테이너의 파일 시스템과 그 상태(설치된 패키지, 생성된 파일 등)를 그대로 이미지에 반영.
- 컨테이너 상태: 컨테이너 내부에서 일어난 변경 사항이 이미지에 포함됨.
- 파일 포함: 실행 중인 컨테이너에서 발생한 모든 변경 사항이 이미지에 포함됨.
- 관리 가능성: 변경 사항이 즉시 이미지에 저장되지만, 변경 이력 관리나 기록이 어려움.
- 재현 가능성: 재현 가능성은 떨어지며, 체계적인 관리가 어렵다.
- 주요 사용 상황:
- 컨테이너 내부에서 작업한 내용을 즉시 저장하고 싶을 때,
- 컨테이너 상태를 보존하고 이후에 동일 상태로 복원하고 싶을 때.
- 빌드 (Build)
- 사용 목적: Dockerfile을 사용하여 새로운 이미지를 체계적으로 생성하는 과정.
- 동작 방식: Dockerfile에 명시된 명령어들을 순차적으로 실행하여 이미지를 빌드함.
- 컨테이너 상태: 컨테이너의 현재 상태와는 무관하게, Dockerfile에 명시된 내용만으로 이미지가 생성됨.
- 파일 포함: Dockerfile에 명시된 파일 복사(COPY), 패키지 설치(RUN apt-get install) 등의 작업만 이미지에 포함됨.
- 관리 가능성: Dockerfile을 통해 이미지를 체계적으로 관리하고, 동일한 환경에서 이미지를 재생산할 수 있음.
- 재현 가능성: 빌드 과정이 Dockerfile에 명확히 기록되므로 재현 가능한 이미지 생성이 가능.
- 주요 사용 상황:
- 일관된 개발 환경을 유지해야 할 때,
- 새롭게 이미지를 만들거나 여러 환경에서 동일한 설정을 배포할 때.
- 주의 : 두 방식 모두 마운트 된 파일으나 폴더는 이미지에 포함시키지 않음.
댓글목록0