Docker는 애플리케이션을 개발, 배포, 실행을 용이하게 하는 오픈 소스 플랫폼이다. 컨테이너를 통해 소프트웨어를 표준화된 유닛으로 패키징하며, 컨테이너에는 라이브러리, 시스템 도구, 코드 등 소프트웨어를 실행하기 위한 모든 것이 포함된다.
VMware와 같은 가상화 도구는 Hypervisor 위에 가상PC들을 설치할 수 있고 Host Operating System의 OS(운영체제)와 상관없이 원하는 OS를 설치할 수 있다. Hypervisor. 이 때 가상PC등은 물리적 본체를 따로 두는것이 아니고 내 PC의 본체를 빌려 쓰는 형태이다.
Docker도 가상PC의 개념과 거의 유사한데 차이점이 있다면 경량화가 되어있다.
(불필요한건 다 빠져있고 실행속도가 압도적으로 빠름, VMware같은 걸로 Linux 이미지를 띄우면 거의 1.5GB로 굉장히 용량이 큰데 Docker 프로그램(엔진)을 설치하여 그 위에 프로그램(가상 PC)들을 띄우게 되는것이다. ex)리눅스만 호환되는 Redis는 Docker에서 설치 시 운영체제인 리눅스까지 패키징되어 설치된다.)
어떻게 극단적인 경량화가 가능했을까?
Host의 운영체제의 상당부분을 빌려쓰고, 가상PC의 운영체제는 거의 깡통이다. 따라서 매우 경량화 된 가상 PC가 된 것. 도커에선 이를 컨테이너라고 부름.(컨테이너에는 운영체제까지 패키징 되어있음).
도커는 VM에 비해 HOST의 OS를 공유하는 컨테이너로서, 윈도우와 같이 리눅스환경과 다를경우 경량화된 OS를 설치하여 실행하며 일반적으로 경량화 alpine 리눅스 사용한다. VM에 비해 경량화된 가상화 서버로서 빠른 부팅속도와 더 나은 성능을 보임.
docker run -d -p 8080:80 nginx
리눅스의 배포판으로는 Ubuntu, Redhat 등이 있는데 Docker는 alpine 리눅스로 매우 경량화 되어있는 배포판을 사용한다. 리눅스 설치 → Ubuntu 이미지 다운로드 → VMware 위에서 설치. 마찬가지로 Nginix 이미지(압축파일)를 다운로드 받고 도커 위에서 설치를 한다. 이 때 Docker 이미지는 Docker Hub에 모여있다.
docker run -d -p 6379:6379 redis 1. 이미지가 없다면 다운로드 2. 이미지가 있다면 있는걸로 컨테이너 실행.
내 PC의 powershell에서 docker의 redis에 접속하는 방법:
1. docker exec -it 컨테이너ID redis-cli
2. docker exec -it 컨테이너ID /bin/sh → redis-cli.
즉, 도커파일 + 원본소스코드(Spring)로 도커 이미지를 만들고, 해당 도커 이미지로 도커 컨테이너를 실행하게 되는 것. 우리의 실습에서는 도커파일을 어떻게 생성하고, 이로 어떻게 도커 이미지를 만드는지, 또 이를 어떻게 도커 컨테이너로 실행하는지를 학습.

| 요소 | 설명 |
|---|---|
| 도커 이미지(Image) | 컨테이너를 실행하기 위한 압축파일과 같은 개념. 애플리케이션과 모든 필요한 설정을 포함하는 불변의 템플릿이며, 도커는 image 기반으로 동작한다. pull 예시: docker pull nginx |
| 컨테이너(Container) | 도커가 도커이미지를 통해 애플리케이션을 실행한 공간. |
| 도커 데몬(Daemon) | 이미지, 컨테이너, 네트워크 등의 관리를 담당하며, 쉽게 생각해 도커 프로그램 그 자체로서, 도커 사용을 위해 먼저 설치필요. |
| 도커 허브(Docker Hub) | 다양한 도커 이미지를 찾고 공유할 수 있는 저장소. |
| 도커파일(Dockerfile) | Docker 이미지를 빌드하기 위한 명령어와 설정을 포함하는 텍스트 파일. |
docker run -d -p 8080:80 nginx → 가상PC를 실행하며 Nginx 컨테이너를 실행한다는 뜻.
docker run -d -p 8080:80 nginx
d: 백그라운드 실행-p: 포트 지정 (외부포트:내부포트)nginx:버전명 (제외시 최신버전)컨테이너 목록 조회
docker ps # 실행중
docker ps -a # 종료된 포함
버전 지정 예시
docker run -d -p 6379:6379 redis:3.1.2 # 직접 지정
docker run -d -p 6379:6379 redis:latest # 최신 버전
이미지 빌드
docker build -t java-test:1.0 -f [도커파일위치] [빌드컨텍스트위치]
docker build -t java-test:1.0 -f Docker [빌드컨텍스트위치] # -f 생략 가능
PowerShell에서 docker run 명령어 실행 과정을 보여주며, nginx 이미지 pull부터 컨테이너 생성까지 완료된 로그
localhost:8089에서 접근한 nginx 웰컴 페이지로, 성공적으로 설치 및 실행된 것을 확인
빌드컨텍스트: Docker가 참조할 파일/디렉토리 위치 (
.으로 현재 위치).
Docker Desktop의 Containers 탭에서 실행 중인 nginx 컨테이너(my_nginx) 상태와 리소스 사용량 출력
MariaDB
docker run --name board_mariadb -e MYSQL_ROOT_PASSWORD=test1234 -d -p 3306:3306 mariadb:latest
--name: 컨테이너명 지정-e: 환경변수 (root 비밀번호).Redis
docker run --name myredis -d -p 6379:6379 redis
| 명령어 | 설명 |
|---|---|
| docker run | docker run -d -p 8080:8080 이미지명:태그명 |
| 포트 매핑 | 8080:80 = 호스트 8080 → 컨테이너 80. 포트매핑 없으면 외부 접근 불가 |
| 이미지 관리 | docker pull nginxdocker images (로컬 목록)docker rmi 이미지ID (삭제)docker build -t demospring:v1.0 . |
| 컨테이너 제어 | docker stop 컨테이너IDdocker start 컨테이너IDdocker rm 컨테이너ID (stop 상태)docker rm -f 컨테이너ID (강제)docker rm -f $(docker ps -a -q) (전체 삭제, q=ID만) |

docker exec -it 컨테이너ID /bin/sh # 또는 /bin/bash
-i: interactive (stdin open)-t: 터미널 (가상콘솔)/bin/sh 사용.직접 프로그램 접속
docker exec -it 컨테이너ID mariadb -u root -p
docker exec -it 컨테이너ID redis-cli
# 또는 sh 접속 후 redis-cli
docker logs 컨테이너ID
docker logs --tail 20 컨테이너ID # 최근 20줄
docker logs -f 컨테이너ID # 실시간