보안관련 패키지 설치 시 오류 발생가능
DB관련 패키지 설치 시 오류 발생가능
이미지 관련 패키지 설치 시 오류 발생가능
권한관련 패키지 설치 시 오류 발생가능
sudo pip install
같은 위험한 접근법이나 brew install
같은 번잡한 과정은 해결책이 될 수 없음.
또한 배포할 때는 {이런 노가다 과정들을}
한 번 더 해야한다.
소프트웨어가 성장 => 의존하는 패키지 증가 => 문제가 발생할 지점들이 많아짐
(ex: 상호 의존하는 패키지들의 버전 충돌)
비단 백엔드뿐만 아니라 프론트엔드 같은 경우에도 webpack설정 package_json에 상기된 여러 의존성 파일들이 똑같은 원인으로 여러 오류가 발생이 가능합니다.
다양한 프로그램, 실행환경을 컨테이너로 추상화하여, 배포 및 관리를 단순하게 도와주는 도구입니다.
컨테이너? 선박화물 규격화 vs 도커 컨테이너? 프로그램(서버) 규격화
docker run -it python:3
: 도커로 파이썬3(최신버전) 실행
docker ps
docker logs [CONTAINER ID]
: : 실행 중인 파이썬3의 로그를 살펴보기
docker exec -it
: 실행 중인 파이썬3에 접속해보기
python:3 == 도커 이미지
실행중인 파이썬3(컨테이너아이디)== 컨테이너
클래스(이미지)와 인스턴스(컨테이너)같은 느낌
도커 안에 모두 넣을 수 있다!
도커파일(Dockerfile)을 이용해 나만의 도커 이미지를 만들 수 있다.
예제
FROM python:3
RUN apt-get update && apt-get -y install \
libpq-dev
ADD ./djangosmaple
WORKDIR /app
CMD ["python", "manange.py", "runserver", "0:8000"]
이미지를 만들고(도커파일을 다 만들고 난 후에)
예제
git clone [리포지토리 주소]
cd django-smaple-for-compose <-- 이동할 디렉토리
docker build -t my-django <-- 빌드업시작(프로젝트이름)
컨테이너 실행
예제
docker run -d \
--env POSTGRES_DB = djangosample \
--env POSTGRES_USER = smapleuser \
--env POSTGRES_PASSWORD = samplesecret \
--name db \
postgres
docker run -it \
--env DJANGO_DEBURG = True \
--env DJANGO_DB_HOST = postgres \
--link db:postgres \
--publish 8000:8000 \
my-django
open http://127.0.0.1:8000
--name db : 컨테이너의 이름을 db로 지정합니다
--link db:postgres : db컨테이너에 접근할 때, postgres라는 이름을 사용합니다
--publish 8000:8000 : 로컬 8000포트를 컨테이너 8000포트에 연결합니다
mkdir data
docker run -d \
--env POSTGRES_DB = djangosample \
--env POSTGRES_USER = smapleuser \
--env POSTGRES_PASSWORD = samplesecret \
--name db \
--volume data: var/lib/postgresql/data \ <-- 새로추가
postgres
mkdir data
docker run -d \
--env POSTGRES_DB = djangosample \
--env POSTGRES_USER = smapleuser \
--env POSTGRES_PASSWORD = samplesecret \
--name db \
--volume data: var/lib/postgresql/data \ <-- 새로추가
-- rm <-- 새로추가2
postgres
docker run -it \
--env DJANGO_DEBURG = True \
--env DJANGO_DB_HOST = postgres \
--link db:postgres \
--publish 8000:8000 \
--volume `pwd` : /app \ <-- 새로추가
my-django
이런 복잡한 명령어들을 docker-compose up
으로 심플하게 실행가능
비밀은 docker-compose.yml
에서 미리 위의 내용들을 적어두기
docker-compose ps
docker-compose up
docker-compose up -d
docker -compose exec django manage.py
docker -compose exec django bash
등등..
docker -compose down
#docker-compose.yml
django:
...
stdin_open:true
tty: true
#docker attach CONAINER_ID
도커서버가 print('예제') 출력이 느린이유? 파이썬 버퍼가 잡고있어서!
ENV PYTHONUNBUFFERED 0
설정 추가
Dockerfile을 수정했다면..?
docker-compose up --build
docker-compose.yml을 수정했다면..?
docker-compose up --force-recreate
/Dockerfile : 배포용
/compose/django/Dockerfile-dev : 개발용
Docker for OSX에서 사용하는 가상 디스크가 꽉 차서 발생하는 문제
Docker for OSX의 환경설정 -> Reset탭 -> Reset Disk Image