애플리케이션을 컨테이너라는 독립된 환경에 패키징하여 어디서나 일관되게 실행할 수 있게 해주는 플랫폼
애플리케이션과 그 실행에 필요한 모든 종속성을 하나의 패키지로 묶은 독립적이고 이식성 높은 실행 단위
| 특성 | Docker | VMware |
|---|---|---|
| 가상화 방식 | 컨테이너 기반 가상화 | 하이퍼바이저 기반 가상화 |
| OS 커널 | 호스트 OS 커널 공유 | 각 VM마다 독립적인 OS 커널 |
| 리소스 사용 | 경량화, 효율적 | 상대적으로 높은 리소스 사용 |
| 성능 | 빠른 실행 속도 | 상대적으로 느린 부팅 및 실행 |
| 격리 수준 | 프로세스 수준 격리 | 하드웨어 수준 완전 격리 |
| 이식성 | 매우 높음 | 상대적으로 낮음 |
| 시작 시간 | 초 단위 | 분 단위 |
| 이미지 크기 | MB 단위 (일반적으로) | GB 단위 |
| 주요 사용 목적 | 애플리케이션 배포, 마이크로서비스 | 서버 가상화, 다양한 OS 실행 |
| 운영체제 지원 | 주로 Linux 기반 | 다양한 OS 지원 |
| 보안 | 컨테이너 간 격리, 호스트 의존 | 강력한 격리, 높은 보안성 |
| 관리 용이성 | 간편한 버전 관리 및 배포 | 복잡한 설정 및 관리 필요 |
| 개발 환경 일관성 | 매우 높음 | 중간 |
| 클라우드 호환성 | 높음 | 중간 |
https://docs.docker.com/desktop/install/mac-install/
사이트에서 본인의 환경에 맞는 버전의 도커를 설치한다.



Common Commands:
run Create and run a new container from an image
exec Execute a command in a running container
ps List containers
build Build an image from a Dockerfile
pull Download an image from a registry
push Upload an image to a registry
images List images
login Log in to a registry
logout Log out from a registry
search Search Docker Hub for images
version Show the Docker version information
info Display system-wide information
도커가 설치된것을 확인했으면 여러가지 실습을 진행해볼수 있다.

# 'hello-world' 이미지를 사용하여 컨테이너를 실행합니다.
# 이 명령어는 Docker가 제대로 설치되었는지 확인하는 간단한 테스트입니다.
docker run hello-world
# Ubuntu 이미지를 사용하여 백그라운드에서 'sleep 1000' 명령어를 실행하는 컨테이너를 생성합니다.
docker run -d --name test-container ubuntu sleep 1000
# 실행 중인 'test-container' 컨테이너 내에서 bash 셸을 실행합니다.
docker exec -it test-container /bin/bash
# 현재 실행 중인 모든 컨테이너의 목록을 출력합니다.
docker ps
# 간단한 Dockerfile을 작성하여, Ubuntu 이미지 위에 curl 패키지를 설치하는 이미지를 빌드합니다.
echo -e "FROM ubuntu\nRUN apt-get update && apt-get install -y curl" > Dockerfile
# Dockerfile을 사용하여 'my-ubuntu'라는 이름의 이미지를 빌드합니다.
docker build -t my-ubuntu .
레지스트리에서 이미지 다운로드
# 'alpine' 이미지를 Docker Hub에서 다운로드합니다.
docker pull alpine
레지스트리에 이미지 업로드
# 'my-ubuntu' 이미지를 Docker Hub에 업로드할 수 있도록 태깅합니다.
docker tag my-ubuntu:latest my-dockerhub-username/my-ubuntu:latest
# Docker Hub에 로그인합니다.
docker login
# 태그된 이미지를 Docker Hub에 업로드합니다.
docker push my-dockerhub-username/my-ubuntu:latest
# 로컬에 저장된 모든 Docker 이미지의 목록을 출력합니다.
docker images
# Docker 레지스트리에 로그인합니다.
docker login
# Docker 레지스트리에서 로그아웃합니다.
docker logout
# Docker Hub에서 'nginx' 이미지를 검색합니다.
docker search nginx
Docker 버전 정보 확인
# Docker의 버전 정보를 출력합니다.
docker version
# Docker 시스템의 전반적인 정보를 출력합니다.
docker info
docke run -it python /bin/bash
# 베이스 이미지로 Python 3.8 사용
FROM python:3.8-slim
# 작업 디렉토리를 설정
WORKDIR /app
# 필요한 파일들을 컨테이너에 복사
COPY . /app
# 필요한 패키지들을 설치
RUN pip install --no-cache-dir flask
# 애플리케이션을 실행
CMD ["python", "app.py"]
vim timer_script.py
이 과정은 ide를 이용해도 된다.
import time
def run_timer(seconds):
for i in range(seconds):
print(f"도커가 실행 중입니다. {i+1}초 동안...")
time.sleep(1)
print("도커 컨테이너가 종료됩니다.")
if __name__ == "__main__":
run_timer(100) # 100초 동안 실행
도커 이미지 빌드
docker build -t timer-container .
컨테이너 실행
docker run --name my-timer timer-container
실행전 상태

컨테이너가 실행중

실행을 마치고 종료하면 실행중인 컨테이너가 없으므로 아무것도 안보이게 된다.

도커 앱을 통해서도 GUI를 통해 컨테이너 목록을 볼 수 있다.

docker를 많이 들어보기는 했으나 직접 사용해보면서 왜 쓰는지에 대한 고민을 많이 해보게 되었다.
그전까지는 잘 몰랐었던 컨테이너의 개념을 명확하게 알 수 있었다.
일단은 리눅스와 CLI 환경에 많이 익숙해지는 것을 목표로 삼아야겠다.
도커와 VMware 비교 부분이 인상적이네요
도커 이미지도 귀여워요