본문 바로가기
강의 실습/비전공자도 이해할 수 있는 Docker 입문 실전

[실습] FROM : 베이스 이미지 생성

by jint 2026. 5. 13.

1. JDK 17 베이스 이미지로 컨테이너 띄워보기
1) Dockerfile 생성
Docker Hub - openjdk : https://hub.docker.com/_/openjdk

 

openjdk - Official Image | Docker Hub

Docker Official Images are a curated set of Docker open source and drop-in solution repositories. Why Official Images? These images have clear documentation, promote best practices, and are designed for the most common use cases.

hub.docker.com


- docker-practice/Dockerfile

# JDK 17
# FROM openjdk:17-jdk # Deprecated 됨
FROM eclipse-temurin:17-jdk


2) Dockerfile 기반으로 이미지 생성
# docker build -t 이미지명:태그명 Dockerfile 존재하는 디렉토리 경로 : Dockerfile 기반으로 이미지 생성
태그명 생략시 latest 로 설정

- Windows PowerShell

# docker build -t sample .
# docker build -t sample:1.0 .
PS C:\Users\admin> cd docker-practice
PS C:\Users\admin\docker-practice> ls


    디렉터리: C:\Users\admin\docker-practice


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----      2026-05-13   오후 9:52             77 Dockerfile


PS C:\Users\admin\docker-practice> docker build -t my-jdk17-server .
[+] Building 16.3s (6/6) FINISHED                                                                                                                                                           docker:desktop-linux
 => [internal] load build definition from Dockerfile                                                                                                                                                        0.1s
 => => transferring dockerfile: 114B                                                                                                                                                                        0.0s
 => [internal] load metadata for docker.io/library/eclipse-temurin:17-jdk                                                                                                                                   2.4s
 => [auth] library/eclipse-temurin:pull token for registry-1.docker.io                                                                                                                                      0.0s
 => [internal] load .dockerignore                                                                                                                                                                           0.1s
 => => transferring context: 2B                                                                                                                                                                             0.0s
 => [1/1] FROM docker.io/library/eclipse-temurin:17-jdk@sha256:b04a8c5d46e210873ffd1af6ad5f4d62c69ed3a6736993556eae60bba1373a23                                                                            11.0s
 => => resolve docker.io/library/eclipse-temurin:17-jdk@sha256:b04a8c5d46e210873ffd1af6ad5f4d62c69ed3a6736993556eae60bba1373a23                                                                             0.0s
 => => sha256:6f5c5aa4e145204b113f983c003ff8ad6489394294ef95ec030bc94e3daded54 41.55MB / 41.55MB                                                                                                            3.0s
 => => sha256:f2355d8d10e06f236ec5ba36f4f0bafd8aac2409348bfc007beb10966c5c063b 158B / 158B                                                                                                                  0.7s
 => => sha256:a32c420591217dc7a625a084712f93306dad56d88f6154646e712a08453c9d6e 2.28kB / 2.28kB                                                                                                              0.9s
 => => sha256:0179dfb07a7de839d91eb0e16cd63a01695ffc321d3f980741a9fa1eab961a84 145.91MB / 145.91MB                                                                                                         10.7s
 => => sha256:1c24335ddd46023ff99bd665bd8ea6798464f7bbf501718edcf2eb4696e5f408 387B / 387B                                                                                                                  0.5s
 => => sha256:1074d15b60c97f22a99cde76dc483f254de86c640a1ff14b4e25d6360fc1e675 24.10MB / 24.10MB                                                                                                            2.1s
 => exporting to image                                                                                                                                                                                     13.3s
 => => exporting layers                                                                                                                                                                                     0.0s
 => => exporting manifest sha256:49341b6ba721580712b6c6a6fb947b8c0140fb753e485b935997cdbcfbfc462c                                                                                                           0.0s
 => => exporting config sha256:0b4a090763e7e549c6488fe430d461848f14e26d1afb615ae859b43a0de5883b                                                                                                             0.0s
 => => exporting attestation manifest sha256:be184c4427e9dbcac0b83c53d983de9c5d380aac7ceec4aacaa627f0dbc9fc58                                                                                               0.1s
 => => exporting manifest list sha256:0879f7908658fa0fcbdb20dae619834a0d49083ed5614529d0fc5700fb439c35                                                                                                      0.0s
 => => naming to docker.io/library/my-jdk17-server:latest                                                                                                                                                   0.0s
 => => unpacking to docker.io/library/my-jdk17-server:latest                                                                                                                                               13.1s

View build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/joifa6crkn0kiqrc6yq0obl0x
PS C:\Users\admin\docker-practice> docker image ls
                                                                                                                                                                                             i Info →   U  In Use
IMAGE                    ID             DISK USAGE   CONTENT SIZE   EXTRA
my-jdk17-server:latest   0879f7908658        682MB          212MB
PS C:\Users\admin\docker-practice> docker build -t my-jdk17-server:beta .
[+] Building 1.3s (5/5) FINISHED                                                                                                                                                            docker:desktop-linux
 => [internal] load build definition from Dockerfile                                                                                                                                                        0.0s
 => => transferring dockerfile: 114B                                                                                                                                                                        0.0s
 => [internal] load metadata for docker.io/library/eclipse-temurin:17-jdk                                                                                                                                   0.9s
 => [internal] load .dockerignore                                                                                                                                                                           0.0s
 => => transferring context: 2B                                                                                                                                                                             0.0s
 => CACHED [1/1] FROM docker.io/library/eclipse-temurin:17-jdk@sha256:b04a8c5d46e210873ffd1af6ad5f4d62c69ed3a6736993556eae60bba1373a23                                                                      0.0s
 => => resolve docker.io/library/eclipse-temurin:17-jdk@sha256:b04a8c5d46e210873ffd1af6ad5f4d62c69ed3a6736993556eae60bba1373a23                                                                             0.0s
 => exporting to image                                                                                                                                                                                      0.2s
 => => exporting layers                                                                                                                                                                                     0.0s
 => => exporting manifest sha256:49341b6ba721580712b6c6a6fb947b8c0140fb753e485b935997cdbcfbfc462c                                                                                                           0.0s
 => => exporting config sha256:0b4a090763e7e549c6488fe430d461848f14e26d1afb615ae859b43a0de5883b                                                                                                             0.0s
 => => exporting attestation manifest sha256:58f244cb8c0d3f63728d7f30cfdcb786dd7b4bcd3a9aedada491fca23bbdc92d                                                                                               0.1s
 => => exporting manifest list sha256:18e650b59b5262c26301011aba55222e10700bb83dbe84e35dff3ca856ffc728                                                                                                      0.0s
 => => naming to docker.io/library/my-jdk17-server:beta                                                                                                                                                     0.0s
 => => unpacking to docker.io/library/my-jdk17-server:beta                                                                                                                                                  0.0s

View build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/rxabol0u4jbb2iit57herd9kj
PS C:\Users\admin\docker-practice> docker image ls
                                                                                                                                                                                             i Info →   U  In Use
IMAGE                    ID             DISK USAGE   CONTENT SIZE   EXTRA
my-jdk17-server:beta     18e650b59b52        682MB          212MB
my-jdk17-server:latest   0879f7908658        682MB          212MB


3) 이미지 기반으로 컨테이너 띄우기
- Windows PowerShell

PS C:\Users\admin\docker-practice> docker run -d my-jdk17-server
969242a1b3f911055e8a858686c7bc636c81c612dafd850e050a542f7e77e9be


4) 컨테이너 조회
- Windows PowerShell

PS C:\Users\admin\docker-practice> docker ps # 실행되고 있는 컨테이너가 없다.
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
PS C:\Users\admin\docker-practice> docker ps -a # 확인해보니 컨테이너가 종료되어 있다.
CONTAINER ID   IMAGE             COMMAND                  CREATED          STATUS                      PORTS     NAMES
969242a1b3f9   my-jdk17-server   "/__cacert_entrypoin…"   31 seconds ago   Exited (0) 23 seconds ago             distracted_williamson
PS C:\Users\admin\docker-practice> docker logs 9692
May 13, 2026 1:15:51 PM java.util.prefs.FileSystemPreferences$1 run
INFO: Created user preferences directory.
|  Welcome to JShell -- Version 17.0.19
|  For an introduction type: /help intro

jshell>
What's next:
    View and search logs for all containers in one place
    with Docker Desktop's Logs view. docker-desktop://dashboard/logs


Docker 컨테이너는 내부적으로 필요한 명령을 다 수행하면 컨테이너가 자동으로 종료된다.

5) 컨테이너 내부에서 JDK 17 설치 확인
- Windows PowerShell

PS C:\Users\admin\docker-practice> docker exec -it 9692 bash

What's next:
    Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug 9692
    Learn more at https://docs.docker.com/go/debug-cli/
Error response from daemon: container 969242a1b3f911055e8a858686c7bc636c81c612dafd850e050a542f7e77e9be is not running


컨테이너가 실행되고 있지 않아서 볼 수 없다.
따라서 Dockerfile 에 명령어를 추가한다.

- docker-practice/Dockerfile

# JDK 17
# FROM openjdk:17-jdk # Deprecated 됨
FROM eclipse-temurin:17-jdk

ENTRYPOINT ["/bin/bash", "-c", "sleep 500"]


- Windows PowerShell

PS C:\Users\admin\docker-practice> docker build -t my-jdk17-server . # 이미지 빌드
[+] Building 1.8s (6/6) FINISHED                                                                                                                                                            docker:desktop-linux
 => [internal] load build definition from Dockerfile                                                                                                                                                        0.0s
 => => transferring dockerfile: 161B                                                                                                                                                                        0.0s
 => [internal] load metadata for docker.io/library/eclipse-temurin:17-jdk                                                                                                                                   1.3s
 => [auth] library/eclipse-temurin:pull token for registry-1.docker.io                                                                                                                                      0.0s
 => [internal] load .dockerignore                                                                                                                                                                           0.0s
 => => transferring context: 2B                                                                                                                                                                             0.0s
 => CACHED [1/1] FROM docker.io/library/eclipse-temurin:17-jdk@sha256:b04a8c5d46e210873ffd1af6ad5f4d62c69ed3a6736993556eae60bba1373a23                                                                      0.0s
 => => resolve docker.io/library/eclipse-temurin:17-jdk@sha256:b04a8c5d46e210873ffd1af6ad5f4d62c69ed3a6736993556eae60bba1373a23                                                                             0.0s
 => exporting to image                                                                                                                                                                                      0.2s
 => => exporting layers                                                                                                                                                                                     0.0s
 => => exporting manifest sha256:f2d296410575aa20f08fbea0da548af91854b8ab4df7957a0f32c54d0b0f65f0                                                                                                           0.0s
 => => exporting config sha256:6b557b6dc8c1c0440753eef8a7a3e7fb600b7a7c0b0710b7d328e334a50eb547                                                                                                             0.0s
 => => exporting attestation manifest sha256:db65b097d5b1b334d43fa725407428556fd844a40ca65f32bb1fe3442e8dac7b                                                                                               0.1s
 => => exporting manifest list sha256:09a2803e5d8e5b527e84210244101dfdf945e6ae377415502201a403a67350d1                                                                                                      0.0s
 => => naming to docker.io/library/my-jdk17-server:latest                                                                                                                                                   0.0s
 => => unpacking to docker.io/library/my-jdk17-server:latest                                                                                                                                                0.0s

View build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/roqpm5tlxlhy1rxwrx57c9iqv
PS C:\Users\admin\docker-practice> docker run -d my-jdk17-server # 이미지를 기반으로 컨테이너 생성 후 실행
e8f1ab86997c1f65d8c38faa262afad3205d79102e3f90e89f126a4c788893a9
PS C:\Users\admin\docker-practice> docker ps # 실행 중인 컨테이너 조회
CONTAINER ID   IMAGE             COMMAND                  CREATED         STATUS         PORTS     NAMES
e8f1ab86997c   my-jdk17-server   "/bin/bash -c 'sleep…"   8 seconds ago   Up 8 seconds             tender_ride
PS C:\Users\admin\docker-practice> docker logs e8f1

What's next:
    View and search logs for all containers in one place
    with Docker Desktop's Logs view. docker-desktop://dashboard/logs
PS C:\Users\admin\docker-practice> docker exec -it e8f1 bash # 컨테이너 접속
root@e8f1ab86997c:/# java -version # JDK 설치되어 있는 지 확인
openjdk version "17.0.19" 2026-04-21
OpenJDK Runtime Environment Temurin-17.0.19+10 (build 17.0.19+10)
OpenJDK 64-Bit Server VM Temurin-17.0.19+10 (build 17.0.19+10, mixed mode, sharing)
root@e8f1ab86997c:/# exit
exit

What's next:
    Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug e8f1
    Learn more at https://docs.docker.com/go/debug-cli/



2. Node 베이스 이미지로 컨테이너 띄워보기
1) Dockerfile 생성
Docker Hub - node : https://hub.docker.com/_/node

 

node - Official Image | Docker Hub

Docker Official Images are a curated set of Docker open source and drop-in solution repositories. Why Official Images? These images have clear documentation, promote best practices, and are designed for the most common use cases.

hub.docker.com


- docker-practice/Dockerfile

# Node
FROM node

ENTRYPOINT ["/bin/bash", "-c", "sleep 500"]


2) 이미지 생성 후 컨테이너 띄우기
- Windows PowerShell

PS C:\Users\admin\docker-practice> docker build -t my-node-server . # 이미지 생성
[+] Building 37.8s (6/6) FINISHED                                                                                                                                                           docker:desktop-linux
 => [internal] load build definition from Dockerfile                                                                                                                                                        0.0s
 => => transferring dockerfile: 186B                                                                                                                                                                        0.0s
 => [internal] load metadata for docker.io/library/node:latest                                                                                                                                              2.3s
 => [auth] library/node:pull token for registry-1.docker.io                                                                                                                                                 0.0s
 => [internal] load .dockerignore                                                                                                                                                                           0.0s
 => => transferring context: 2B                                                                                                                                                                             0.0s
 => [1/1] FROM docker.io/library/node:latest@sha256:f6f9fae352b319e817eec5efc7721b3f06bc53104f2f800d0f778f3915835804                                                                                       28.6s
 => => resolve docker.io/library/node:latest@sha256:f6f9fae352b319e817eec5efc7721b3f06bc53104f2f800d0f778f3915835804                                                                                        0.0s
 => => sha256:e522fcbb872d351bda998606f7c6b3cca894679694b79075b9c3be1969fa6e92 448B / 448B                                                                                                                  0.4s
 => => sha256:5470790761244112ed0b9ea9218282e5185dc7fd1e91840e855a32550e2ecd73 236.15MB / 236.15MB                                                                                                         28.3s
 => => sha256:caf6c0a95e34418907d5abfe604d08c5cc6bf9d689943856fcd842eb2be82c6c 25.62MB / 25.62MB                                                                                                            2.3s
 => => sha256:82a92b93bf7181c9d6b4525236a1a2fec85dc591d4deee481e828e707853f42c 67.79MB / 67.79MB                                                                                                            8.2s
 => => sha256:307f8152a55ef1e9eeb1acbbee7bc81232615329eaeb00d8dd93b46be297f34c 49.30MB / 49.30MB                                                                                                            8.9s
 => => sha256:9479445867dacd58352d8b0c3f6a6c1166f9ebe1d5c22303b96a9178f870c251 3.32kB / 3.32kB                                                                                                              0.5s
 => => sha256:a335255d0ec2da7ecdea3ce8387c3777928dea3f0cd33516b0d316c4ecc0d186 62.88MB / 62.88MB                                                                                                            5.5s
 => exporting to image                                                                                                                                                                                     34.9s
 => => exporting layers                                                                                                                                                                                     0.0s
 => => exporting manifest sha256:95e06b337b74e7f29897ea12f867acc3b8617bfcff3c16cd787c10d55c30d054                                                                                                           0.0s
 => => exporting config sha256:2511c11e1d30b9ca14278274f83cd28f75c43860bd67a5664ca694869dd990db                                                                                                             0.0s
 => => exporting attestation manifest sha256:7b0aa843fa57fcdd4af9478b2f233ced1d39aef3b566703960e54679fee9e6a7                                                                                               0.1s
 => => exporting manifest list sha256:9a1e49574c81a560be2cf78e6f1dc9cd563603ff75fb4072d081332e87641cb6                                                                                                      0.0s
 => => naming to docker.io/library/my-node-server:latest                                                                                                                                                    0.0s
 => => unpacking to docker.io/library/my-node-server:latest                                                                                                                                                34.7s

View build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/1bb9ue3w8097c18pgtbuj8zad
PS C:\Users\admin\docker-practice> docker image ls
                                                                                                                                                                                             i Info →   U  In Use
IMAGE                    ID             DISK USAGE   CONTENT SIZE   EXTRA
my-jdk17-server:beta     18e650b59b52        682MB          212MB    U
my-jdk17-server:latest   09a2803e5d8e        682MB          212MB    U
my-node-server:latest    9a1e49574c81       1.77GB          442MB
PS C:\Users\admin\docker-practice> docker run -d my-node-server # 이미지를 기반으로 컨테이너 생성 후 실행
10b3825e00f9b581524313e59a937d71703a9eda9e38560683cfbba30602192c
PS C:\Users\admin\docker-practice> docker ps # 실행 중인 컨테이너 조회
CONTAINER ID   IMAGE            COMMAND                  CREATED         STATUS         PORTS     NAMES
10b3825e00f9   my-node-server   "/bin/bash -c 'sleep…"   5 seconds ago   Up 4 seconds             pensive_ride
PS C:\Users\admin\docker-practice> docker exec -it 10b3 bash # 컨테이너 접속
root@10b3825e00f9:/# node -v # Node 설치되어 있는 지 확인
v26.1.0



참고링크 : https://www.inflearn.com/course/%EB%B9%84%EC%A0%84%EA%B3%B5%EC%9E%90-docker-%EC%9E%85%EB%AC%B8-%EC%8B%A4%EC%A0%84?cid=334085

 

비전공자도 이해할 수 있는 Docker 입문/실전| JSCODE 박재성 - 인프런 강의

현재 평점 4.9점 수강생 14,463명인 강의를 만나보세요. 비전공자 입장에서도 쉽게 이해할 수 있고, 실전에서 바로 적용 가능한 Docker 입문/실전 강의를 만들어봤습니다! Docker 기본 개념, Spring Boot를

www.inflearn.com

댓글