22. 앱 컨테이너에서
데이터베이스 컨테이너를 찾을 수 있게 하자 (1/2)
$ docker run -it --rm
--name db
-e POSTGRES_DB=djangosample
-e POSTGRES_USER=sampleuser
-e POSTGRES_PASSWORD=samplesecret
postgres:9.6.1
--name 으로 데이터베이스 컨테이너의 이름을 db 라고 설정
-e 로 환경 변수 설정
(각 환경 변수에 대해서는 dockerhub의 공식 postgres:9.6.1 이미지 참고)
26. 앱 코드 디렉터리를 앱 컨테이너 내부로 연결하자
$ docker run -it --rm
-p 8000:8000
--link db
-e DJANGO_DB_HOST=db
-e DJANGO_DEBUG=True
--volume=$(pwd):/app/
django-sample
./manage.py runserver 0:8000
--volume 을 통해 현재 디렉터리를 컨테이너 안으로 연결
30. 1. db 컨테이너 실행
$ docker run -it --rm
--name db
-e POSTGRES_DB=djangosample
-e POSTGRES_USER=sampleuser
-e POSTGRES_PASSWORD=samplesecret
--volume=$(pwd)/docker/data:/var/lib/postgresql/data
postgres:9.6.1
42. 도커 vs. 도커 컴포즈
Dockerfile vs. Dockerfile-dev : 서버 구성을 문서화한 것(=클래스 선언이 들어
있는 파일)
docker build vs. docker-compose build : 도커 이미지 만들기(=클래스 선언을 애
플리케이션에 로드)
docker run 의 옵션들 vs. docker-compose.yml : 이미지에 붙이는 장식들(=인스
턴스의 변수들)
docker run vs. docker-compose up : 장식 붙은 이미지를 실제로 실행(=인스턴스
생성)
컨테이너 대신 서비스라고 부름(한 서비스에 컨테이너를 여러 개 띄울 수도 있음)
71. Dockerfile vs. Dockerfile‐dev (1/2)
# 개발 서버용 Dockerfile-dev에서 뺄 부분들
# 앱 코드 복사
ADD ./app/ /app/
# Django 정적 파일 수집
RUN ./manage.py collectstatic --noinput
# 서버 실행 명령
CMD ['supervisord', '-n']
72. Dockerfile vs. Dockerfile‐dev (2/2)
# 개발용 Dockerfile-dev에 추가할 부분들
# 개발 환경 구성에 필요한 파일 복사
COPY ./requirements-dev.txt /app/requirements-dev.txt
RUN pip install -r requirements-dev.txt
# 개발 서버 실행에 필요한 파일 복사
ADD compose/django/start-dev.sh /start-dev.sh
RUN chmod +x /*.sh
78. ps
현재 개발 환경에서 실행 중인 서비스 확인
$ docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------------
djangosample_db_1 /docker-entrypoint.sh postgres Up 5432/tcp
djangosample_django_1 /start-dev.sh Up 0.0.0.0:8000->8000/tc
80. down
서비스, 네트워크 삭제
서비스를 초기화할 때 사용
$ docker-compose down --volume
Removing myproject_django_1 ... done
Removing myproject_db_1 ... done
Removing network djangosample_default
Removing volume django_sample_db_dev
down --volume : 볼륨까지 삭제
81. exec
실행 중인 컨테이너에서 명령어 실행
$ docker-compose exec django ./manage.py makemigrations
...
$ docker-compose exec node npm run test
> expresssample@0.1.0 test /www/service
> mocha $(find test -name '*.spec.js')
...
비슷한 명령어 run : 새 컨테이너 실행(‐‐rm 옵션을 적어야 컨테이너 찌꺼기가 남지 않음)
82. logs ‐f
서비스 로그 확인
$ docker-compose logs django
Attaching to djangosample_django_1
django_1 | System check identified no issues (0 silenced).
django_1 | February 13, 2017 - 16:32:28
django_1 | Django version 1.10.4, using settings 'djangosample.settings'
django_1 | Starting development server at http://0.0.0.0:8000/
django_1 | Quit the server with CONTROL-C.
-f : 로그 팔로잉
89. ERROR: 'No space left on device'
/Users/LOGIN_ID/Library/Containers/com.docker.docker/Data/co
m.docker.driver.amd64‐linux/Docker.qcow2
기본 max 값이 64GiB
파일 삭제하거나 Docker for Mac에서 Reset