Docker 설치 및 사용 방법을 소개합니다.
목차
Toggle도커(Docker) 정의
도커는 리눅스의 응용 프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는 오픈소스 프로젝트입니다.
컨테이너란?
도커 컨테이너는 일종의 소프트웨어를 소프트웨어의 실행에 필요한 모든 것을 포함하는 완전한 파일 시스템 안에 넣습니다.
여기에는 코드, 런타임, 시스템 도구, 시스템 라이브러리 등 서버에 설치되는 것들이 포함됩니다. 이는 실행 중인 환경에 관계 없이 언제나 동일하게 실행됩니다.
Docker 설치
- Docker를 설치할 centos 서버에 접속합니다.
$ ssh -i dev.pem [email protected]
- 설치한 yum 관련 라이브러리를 설치합니다.
$ sudo yum install -y yum-utils
$ sudo yum-config-manager \\
–add-repo \\
<https://download.docker.com/linux/centos/docker-ce.repo>
- Docker를 설치합니다.
$ sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
- Docker가 정상적으로 설치되었는지 확인합니다.
$ yum list docker-ce –showduplicates | sort -r
- 도커를 실행합니다.
$ sudo systemctl start docker
$ sudo systemctl enable docker
- 도커가 정상적으로 실행되었는지 확인합니다.
$ sudo docker version
$ sudo docker ps
사용 방법
1> 모듈리스트 만들기
- 가상환경에서 설치한 라이브러리들을 리스트로 만들어 저장합니다.
$ pip freeze > requirements.txt
2> 도커 설정 파일을 만듭니다
- Docker 설치 용 Dockfile 만들기
#pull official base image
FROM python:3.8.0-silm-buster
#set work directory
WORKDIR /usr/src/app
#set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
COPY . /usr/src/app
#install dependecies
RUN pip install --upgrade pip
RUN pip install -r requirement.txt
3> 도커 컴포즈 파일 만들기
- docker-compse.yml
version: '3'
services:
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- ./:/usr/src/app/
ports:
- 8000:8000
env_file:
- ./.env.dev
4> settings.py 수정하고 개발환경 파일 작성하기
5> 도커 컨테이너 실행하기
$ docker-compose build
$ docker-compose up -d # 백그라운드 실행
$ docker image ls
$ docker container ls
$ docker-compose down # 실행 중인 도커 중지
PostgreSQL 사용하기- Docker 설치
1> docker-compose.yml
version: '3'
services:
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- ./:/usr/src/app/
ports:
- 8000:8000
env_file:
- ./.env.dev
depends_on:
- db
db:
image: postgres:12.0-alpine
volumnes:
- postgres_data:/var/lib/postgresql/data/
environment:
- POSTGRES_USER=do_it_django_db_user
- POSTGRES_PASSWORD=do_it_django_db_password
- POSTGRES_DB=do_it_django_dev
volumes:
postgres_data:
2> settings.py와 .env.dev 파일 수정하기
3> PostgreSQL DB 마이그레이션하기
$ docker-compose exec web python manage.py migrate
Gunicorn과 Nignx 사용
- 대규모 서비스 : Apache, Nginx 사용
- Guicorn : 웹서버 소프트웨어와 장고를 연결하기 위한 WSGI(Web Server gateway interface)
1> Gunicorn을 사용하기 위해 도커 이미지 수정하기
- docket-compose.yml
version: '3'
services:
web:
build: .
command: gunicorn do_it_django_prj.wsgi:application --bind 0.0.0.0:8000
volumes:
- ./:/usr/src/app/
ports:
- 8000:8000
env_file:
- ./.env.dev
depends_on:
- db
db:
image: postgres:12.0-alpine
volumnes:
- postgres_data:/var/lib/postgresql/data/
environment:
- POSTGRES_USER=do_it_django_db_user
- POSTGRES_PASSWORD=do_it_django_db_password
- POSTGRES_DB=do_it_django_dev
volumes:
postgres_data:
- 이미지 반영
$ pip install gunicorn
$ pip freeze > requirements.txt
$ docker-compose up –build
2> 정적 파일 서비스하기
배포용 도커 파일 만들기
1> docker-compose 파일을 개발용과 배포용으로 분리하기
$ docker-compose -f docker-compse.dev.yml up
version: '3'
services:
web:
build: .
command: gunicorn do_it_django_prj.wsgi:application --bind 0.0.0.0:8000
volumes:
- ./:/usr/src/app/
ports:
- 8000:8000
env_file:
- ./.env.prod
depends_on:
- db
db:
image: postgres:12.0-alpine
volumnes:
- postgres_data:/var/lib/postgresql/data/
~~environment:
- POSTGRES_USER=do_it_django_db_user
- POSTGRES_PASSWORD=do_it_django_db_password
- POSTGRES_DB=do_it_django_dev~~
env_file:
- ./.env.prod.db
volumes:
postgres_data:
2>환경설정 파일 분리하기
- 실행되었던 컨테이너 내리고, 관련된 볼륨도 삭제 ‘-v’
$ docker-compose down -v
3> 배포용 도커 컨터이너 실행하기
$ docker-compose up -d
- 로그 보기
$ docker-compose logs