본문 바로가기

TIL 및 WIL/TIL (Today I Learned)

[TIL] 2022.08.08 (Docker 복습, Django에서 Docker 사용해보기)

오늘은 지난번에 공부해보았던 Docker에 대해 다시 복습해보는 시간을 가졌다.

 

Docker, 도커
- 컨테이너(Container) 기반의 가상화 플랫폼
- 개발 및 배포, 서비스 운영에서 실행환경, 코드, 라이브러리, 설정 파일 등을 관리하기 위한 도구
- 독립된 환경을 이용하여 하드웨어를 효율적으로 관리 및 활용하는 기술
- Container, Image, Registry로 구성되어 있다.

 

Docker

 

Docker에서 사용되는 개념들 3가지에 대해 알아보자면 컨테이너(Container), 이미지(Image), 레지스트리(Registry)가 있다.

 

Docker 개념 3가지

1. Container
- 애플리케이션의 개발, 실행, 배포 등을 위한 표준화된 단위의 패키지
- 해당 애플리케이션이 한 환경에서 빠르고 안정적으로 실행될 수 있게 해주는 표준 소프트웨어 장치

2. Image
- 컨테이너(Container)를 빌드하는 데 사용되는 읽기 전용 템플릿
- 애플리케이션을 저장하고 보내는 데 사용된다.
- 이미지는 변경할 수 없으며, 이미지를 변경하기 위해서는 새로운 이미지를 생성해야 된다.

3. Registry
- 이미지들을 업로드(push) 및 다운로드(pull)하기 위한 공간
- 이미지의 액세스 관리 및 보안 개선을 지원하고 이미지 배포를 관리할 수 있다.

 

이제 Docker Container부터 하나씩 차례대로 사용하는 명령어들에 대해 알아보는 시간을 가져보자.

처음 시작으로는 Docker Container에 관한 명령어이다.

 

Docker Container 실행하기
> docker run [options] [image_name] [command]

Docker Container 실행 명령어 확인하기
> docker run --help

실행 중인 Docker Container 확인하기
> docker ps

전체 Docker Container 확인하기
> docker ps -a

Docker Container 중지하기
> docker stop [container_id 또는 container_name]

Docker Container 강제 중지하기
> docker kill [container_id 또는 container_name]

Docker Container 다시 시작하기
> docker restart [container_id 또는 container_name]

Docker Container 삭제하기
> docker rm [container_id]

 

다음은 Docker Image에 관련된 명령어들을 알아 볼 것인데, Docker Image는 보통 Dockerfile이라는 이름을 가진 파일 내에서 코드처럼 작성하여 같이 사용하게 된다.

우선 맨 처음으로 Dockerfile에 대해서 알아보도록 하자.

 

Dockerfile
- Docker Image를 생성하기 위한 파일

명령어
- FROM : base 이미지를 지정, 보통 Dockerfile의 가장 최상단에 위치한다.
- ADD : 호스트 머신에 있는 파일 또는 폴더를 특정 위치에 저장한다.
- RUN : 명령 쉘(Shell)과 같이 커맨드를 실행하기 위해 사용한다, Docker에서는 보통 특정 소프트웨어를 설치하기 위해 사용한다.
- CMD : 이미지 실행 시 어떤 것이 기본으로 실행될 것인지 정의한다.

Dockerfile 사용 예시

 

이제 Docker Image를 관리하기 위한 명령어들에 대해 알아보도록 하자.

 

Docker Image 빌드하기
> docker build [options] [path]

Docker Image 빌드 옵션 확인하기
> docker build --help

Docker Image 확인하기
> docker images

Docker Image 삭제하기
> docker rmi [image_name]:[tag] 또는 [image_id]

 

위에서 언급한 컨테이너(Container)와 이미지(Image)는 사용 이후 필요가 없어졌다면 삭제하는 명령어를 통해 삭제하거나 Docker Desktop에서 사용이 끝난 컨테이너(Container)와 이미지(Image)를 삭제해주는 것이 좋다.

 

사용이 끝난 컨테이너(Container)와 이미지(Image)를 삭제하는 이유는 해당 컨테이너(Container)와 이미지(Image)가 많아지면 리소스에 부하가 늘어나므로 삭제하는 편이 좋다.

 

이제 다음으로는 volume과 bind mount 명령어에 대해 알아보도록 하자.

해당 기능들은 컨테이너(Container)가 종료될 때 DB 데이터를 유지할 수 있도록 하거나 다른 컨테이너(Container)끼리 데이터를 공유할 수 있도록 사용하는 명령어들이다.

 

volume 생성하기
> docker volume create [volume_name]

volume 목록 확인하기
> docker volume ls

확인하고 싶은 volume 상세 정보 확인하기
> docker volume inspect [volume_name]

bind mount 사용하기
> docker run -v [host_port]:[container_port] [image_name]

 

마지막으로 다수의 Docker Container를 정의하고 실행하기 위한 도구인 Docker Compose를 알아보도록 하자.

 

Docker Compose
- yaml 파일을 사용하여 필요한 옵션들을 설정하고 Container를 실행할 수 있다.
- yaml 파일 이름을 docker-compose.yaml으로 만들어준다면 Docker Compose 사용 시 기본으로 해당 파일을 사용하도록 지정한다.

명령어
Docker Container 띄우기 : docker-compose up
Docker Container 삭제하기 : docker-compose down

 

이외에도 더 많은 Docker 정보들이나 자세하게 정리 한 것을 보고 싶다면 다음 링크를 통해 알 수 있다.

 

Docker 정리 Link : https://sdrtst.tistory.com/139

 

[Docker] Docker 사용해보기

Docker에 대해 공부를 해보고, 실제 Django에서 Docker를 어떻게 사용하는지 알아보도록 했다. Docker, 도커 - 컨테이너(Container) 기반의 가상화 플랫폼 - 개발 및 배포, 서비스 운영에서 실행환경, 코드,

sdrtst.tistory.com

 

이제 Docker에 대한 것을 정리하고 복습해본 뒤 실제 Django 프로젝트에서 Docker를 적용시켜 관리하고자 지난번 JWT를 연습할 때 사용하였던 Django 코드를 가지고 연습해보기로 하였다.

 

우선 맨 처음으로 Dockerfile을 설정하여 Docker Image를, Docker Container를 생성하고 Docker Compose를 사용하여 해당 Container를 실행해보기로 하였다.

 

# Dockerfile

FROM python:3.9.12-alpine
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1

RUN apk update
RUN apk add build-base python3-dev py-pip jpeg-dev zlib-dev

COPY requirements.txt /usr/src/app/

WORKDIR /usr/src/app
RUN pip install -r requirements.txt

COPY . /usr/src/app/

Docker Images

 

Docker Container

# docker-compose.yml

version: "3.8"

services:
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    ports:
      - 8000:8000
    working_dir: /usr/src/app/
    volumes:
      - ./:/usr/src/app/

Django 웹 페이지 동작

 

이후 마지막으로 Docker Hub에 해당 Docker Image를 올려보았다.

 

Docker Hub에 Image push 하기
> docker push j1nu/docker_prac

Docker Hub

 

Docker Hub에도 정상적으로 올라가는 것을 볼 수 있었다.

 

https://sdrtst.tistory.com/140

 

[Docker] Django에서 Docker 사용해보기

이전에는 Flask에서 Docker를 연습해보는 시간을 가졌었는데, 이번에는 Django에서 Docker를 사용해보는 것을 연습해보도록 하겠다. 우선 Dockerfile에서 설정을 해준 뒤 Docker Image를 등록하기 위해 'docker

sdrtst.tistory.com

 

-

 

오늘은 Docker에 대해 정리하고 복습하는 시간과 Docker를 이용하여 Django 프로젝트를 실행하는 것을 진행해보았다.

 

아직은 Docker Container를 실행하여 해당 Django 프로젝트 웹 페이지를 여는 것밖에 시도해보지 않았지만 추후에 더 공부를 진행하여 EC2를 이용한 배포를 해보고자 한다.

 

해당 테스트용 프로젝트를 통해 연습을 끝내면 이후 최종 프로젝트를 배포하여 관리하는 것을 진행해보고 싶다.

 

:P