[Docker]도커 설치 및 사용해보기

김윤섭·2024년 7월 9일
3
post-thumbnail

도커란?

애플리케이션을 컨테이너라는 독립된 환경에 패키징하여 어디서나 일관되게 실행할 수 있게 해주는 플랫폼

컨테이너란?

애플리케이션과 그 실행에 필요한 모든 종속성을 하나의 패키지로 묶은 독립적이고 이식성 높은 실행 단위

Docker와 VMware의 비교

특성DockerVMware
가상화 방식컨테이너 기반 가상화하이퍼바이저 기반 가상화
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 환경에 많이 익숙해지는 것을 목표로 삼아야겠다.

2개의 댓글

comment-user-thumbnail
2024년 7월 10일

도커와 VMware 비교 부분이 인상적이네요
도커 이미지도 귀여워요

1개의 답글