Docker 기초

이상민·2023년 4월 25일
0

가상화

가상화는 소프트웨어를 사용하여 프로세서, 메모리, 스토리지 등과 같은 단일 컴퓨터의 하드웨어 요소를 일반적으로 가상 머신(VM)이라고 하는 다수의 가상 컴퓨터로 분할할 수 있도록 해주는 컴퓨터 하드웨어 상의 추상화 계층을 구축합니다. 실제 기반 컴퓨터 하드웨어의 단지 일부에서만 실행됨에도 불구하고, 각각의 VM은 자체 운영체제(OS)를 실행하며 마치 독립적인 컴퓨터인 것처럼 작동합니다.

쉽게 말해 가상화란 한대의 컴퓨터를 다수의 컴퓨터 처럼 분할하여 사용할 수 있게 해주는 것을 말함

가상화의 목적

가상화는 다양한 목적으로 사용 되지만 내 입장에서 예를 들면 프로젝트를 많이 진행할때 사용한다. 다양한 프로젝트를 진행하다보면 각 프로젝트마다 필요한 라이브러리, 서버 등 다르기 때문에 관리하기 힘들다.
이 때 가상화를 사용하면 간편하게 프로젝트를 관리하고 유지할 수 있다.

Container


Docker는 container라는 기술을 사용한다. container기술을 사용하기전에 가상화 방법 중 하나로 Virtual Machines라는 기술을 사용했는데 왼쪽 그림 처럼 각각의 VM에 OS를 설치해야하기 때문에 리소스를 많이 사용한다.
반면 container는 Host OS하나에 따로 추가적인 OS를 설치하지 않아도 사용할 수 있다.

Docker 소개

Docker image

  • 컨테이너를 실행할 때 사용할 수 있는 템플릿 (Read only)
  • image를 다른사람에게 공유하고 다른사람의 image를 사용할 수 있다.

Docker Container

  • Docker Image를 활용해 실행된 인스턴스 (write 가능)

Docker 실습

MySQL 실행하기

  • mysql8 버전의 이미지 다운
docker pull mysql:8
  • 다운받은 이미지 확인
docker images
  • Docker 실행하기
# 처음실행
docker run --name '컨테이너 이름지정' -e '환경변수 설정' -d -p '포트지정' '이미지 이름: 태그'

--name: 컨테이너 이름 지정, 지정하지 않으면 랜덤으로 지정
-e: 사용하는 이미지에 따라 설정이 다름(MySQL: 환경 변수를 통해 Root계정의 비밀번호를 설정)
-d: 데몬 백그라운드 모드 형태로 실행 이 설정을 하지 않으면, 현재 실행하는 셀 위에서 컨테이너 실행 컨테이너를 나가면 실행 종료
-p: 포트 지정 로컬 호스트 포트로 접근시 컨테이너 포트로 연결되도록 설정

#처음이 아닐때
docker run '이미지 이름:태그'
  • 실행중인 도커 컨테이너 확인
docker ps

  • Docker 실행하기 (MySQL 실행)
    mysql이 실행 되고 있는지 확인하기 위해 컨테이너에 진입,ssh에 접속하는 것과 유사
docker exec -it '컨테이너 이름(혹은 ID)' /bin/bash

Docker 기본 명령어들

Docker Image 만들기

간단한 pytorch example 코드를 실행하는 Docker Image생성하는 실습

1. 폴더를 하나 만들고,poetry 세팅과 torch 관련패키지 설치

  • mkder 02-docker
  • cd 02-docker
  • python -V # python 3.10.6
  • poetry init
  • poetry add torch torchvision

2. 폴더 안에 dockerfile 만들고 아래 코드 입력

#From '이미지 이름: 태그'
#이미지 빌드에 사용할 베이스 이미지 지정, 보통 도커이미지를 만들때 베이스 이미지에 설정을 추가해서 만듦


FROM pytorch/pytorch:1.13.1-cuda11.6-cudnn8-runtime 

#로컬 디렉토리 파일을 컨테이너에 옯기겠다는 의미
# COPY '로컬 디렉토리' '컨테이너 내 디렉토리'
# 컨테이너는 자체적인 파일 시스템과 디렉토리를 가짐 COPY 명령어는 Dockerfile이 존재하는 경로 기준 로컬 디렉토리를 컨테이너 내부의 디렉토리로 복사
#.: Docker file이 존재하는 경로
#/app: 컨테이너의 경로
#현재 dockerfile의 경로를 컨테이너 내부 /app으로 복사
COPY . /app

#WORKDIR '컨테이너 내 디렉토리': 도커파일의 RUN,CMD, ENTRYPOINT 등의 명령어를 실행할 컨테이너 경로 지정
WORKDIR /app
# 이라인 부터 실행 되는 명령어는 컨테이너 내부의 /app에서 실행
#ENV: 컨테이너 내 환경변 수 지정
ENV PYTHONPATH=/app
ENV PYTHONUNBUFFERED=1

#실행할 리눅스 명령어, 연속으로 명령어 실행시 &&로 실행
RUN pip install pip==23.0.1 && \
    pip install poetry==1.2.1 && \
    poetry export -o requirements.txt && \
    pip install -r requirements.txt 

#CMD ['실행할 명령어','인자']
CMD ["python", "main.py"]

이후 bulid 명령어 하고 docker.hub 사용하든 push하든 말든 하쇼

profile
잘하자

0개의 댓글