[Docker] Docker Image 다운로드 및 Container 실행, 환경변수 적용
by 우와한개발자
1. Docker Image란?
- Docker Image는 컨테이너를 실행하는 데 필요한 모든 것을 패키징한 읽기 전용 파일
- 파일시스템 (File System)
- 라이브러리 (Library)
- 실행 가능한 파일 (Executable)
- 환경변수 (Environment Variable)
- 이미지 자체는 ReadOnly(읽기 전용)로 변경 불가
- 이미지는 직접 만들 수도 있고, Docker Hub에서 가져다 쓸 수도 있음
- Dockerfile을 이용해서 빌드/생성
- 컨테이너(Container) : 이미지를 실제로 실행한 상태
Dockerfile ----> Docker Image ----> Docker Container
↑ ↑
(build) (run)
1) 레이어(Layer) 구조
- Docker Image는 하나의 파일이 아니라 여러 개의 레이어로 구성
- 각 레이어는 이전 레이어로부터의 변경 사항만 저장하며, 계층 구조로 쌓임
- 이미지를 다운로드할 때 이미지 전체를 통째로 받는 것이 아니라 필요한 레이어만 내려받음
- 이미 다운로드한 레이어는 캐시에 저장되어 중복 다운로드를 방지함
# 예시
이미지(5GB)와 B 이미지(6GB)가 공통 레이어를 공유한다면,
단순 합산인 11GB가 아니라 공통 레이어 5GB + 추가 레이어 1GB = 실제 6GB처럼
저장 공간을 절약가능
2. Docker Image 다운로드
- docker image pull 명령어로 Docker Hub(Docker Registry)에서 이미지 다운로드
- 다운받을 이미지의 버전을 명시하지 않으면 자동으로 가장 최신 버전 다운로드
docker image pull nginx #docker image pull nginx:latest 와 같음
# 실행 결과
Using default tag: latest
latest: Pulling from library/nginx
c29f5b76f736: Pull complete # ← 각 줄이 하나의 레이어
e19db8451adb: Pull complete
24ff42a0d907: Pull complete
c558df217949: Pull complete
976e8f6b25dd: Pull complete
6c78b0ba1a32: Pull complete
84cade77a831: Pull complete
Status: Downloaded newer image for nginx:latest
- Pull complete로 표시되는 각 줄이 하나의 레이어. (nginx는 총 7개의 레이어로 구성되어 있음을 확인가능)
1) 이미지 목록 조회
- docker image ls
docker image ls
# 실행 결과
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 97662d24417b 32 hours ago 192MB
2) 이미지 삭제
- docker image rm 이미지명
docker image rm nginx:latest
3. Docker 환경 변수 (Environment Variable)
- 도커 환경변수는 이미지를 컨테이너로 실행할 때, 애플리케이션에 필요한 설정 값을 전달하여 컨테이너의 동작을 구성하고 제어하는 데 사용
1) 환경변수를 사용하는 이유
- 애플리케이션 설정 (DB 연결정보, API 키, 포트번호)
- 보안 및 비밀 정보 관리 (SECRET 키, API 키, 비밀번호, 토큰)
- 다양한 환경 지원 (개발과 운영에 같은 이미지 사용 가능)
2) 환경변수를 사용하는 방법
① Dockerfile 내부 (ENV 명령 사용)
- 이미지 빌드 시 기본값을 고정해야 할 때 주로 사용
ENV API_KEY=my-secret-api-key
② 컨테이너 실행 시 (-e 옵션 사용)
- 임시로 또는 테스트 목적으로 값을 전달할 때 주로 사용
docker run -e ORACLE_PASSWORD=oracle ...
③ docker-compose.yml 파일 사용
- 여러 컨테이너를 함께 관리할 때 주로 사용
version: '3'
services:
myapp:
image: myapp
environment:
- API_KEY=my-secret-api-key
4. Docker Container 실행
- 이미지를 내려받았으면 docker run 명령어로 컨테이너 실행
docker run -d --name my_container -p 8080:80 nginx
1) 주요 옵션
| 옵션 | 설명 |
| -d | 백그라운드(detach) 모드로 실행 |
| --name | 컨테이너 이름 지정 |
| -p 호스트포트:컨테이너포트 | 포트 연결 (외부 접근용) |
| -e | 환경변수 전달 |
| -i | 표준 입력 활성화 |
| -t | 터미널 할당 |
| -v | 볼륨 마운트 |
| --network | 네트워크 연결 |
2)실행 중인 컨테이너 확인
- docker container ls
docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
09a2d2fd72d0 nginx "/docker-entrypoint.…" 15 seconds ago Up 12 seconds 0.0.0.0:8080->80/tcp my_container
- 이후 브라우저에서 http://[리눅스 IP]:8080으로 접속하면 nginx 서버 실행을 확인가능
5. 컨테이너로 이미지 생성
- 컨테이너를 삭제하면 내부의 모든 데이터도 함께 사라짐.
- 컨테이너를 운영하는 동안 변경된 데이터를 유지하고 싶다면 해당 컨테이너를 새로운 이미지로 저장가능
- docker commit
# 전체 흐름
컨테이너 실행 → 내부에서 작업/변경
↓
docker commit → 이미지로 저장
↓
docker tag → dockerhub용 이름으로 변경
↓
docker push → dockerhub에 업로드
1) 컨테이너 → 이미지 변환
- docker commit
docker commit 컨테이너이름 새로운이미지이름
# 예시
docker commit my_container new_image
2) 이미지 이름 지정 및 수정
- docker tag
- dockerhub에 업로드하려면 “계정이름/이미지이름:태그” 형식
# 기존 이미지에 새 태그 붙이기
docker tag 원본이미지[:태그] 새이미지[:태그]
# Docker Hub 업로드용 태그 지정
docker tag 로컬이미지[:태그] DockerHub계정명/저장소명[:태그]
docker tag myapp:latest oowaa/myapp:1.0'인프라' 카테고리의 다른 글
| [Docker] Docker Registry GC(가비지컬렉션)와 인증 설정하기 (0) | 2026.03.16 |
|---|---|
| [Docker] Docker Registry란? private registry 구축하기 (0) | 2026.03.16 |
| [Docker] Dockerfile이란? 주요 명령어와 이미지 생성 (0) | 2026.03.14 |
| [Docker] Docker 명령어 정리 - image, container 명령어와 run 옵션 (0) | 2026.03.13 |
| [Docker] Docker란? 개념과 특징, 아키텍처와 주요 용어 정리 (0) | 2026.03.13 |
블로그의 정보
우와한개발자 님의 블로그
우와한개발자