Docker Study (2018.06~)¶
개요¶
스터디 개요¶
- 기간 : 2018년 6월 26일 부터 약 5~7주
- 스터디 리더 : 한영빈(소프16)
- 교재 : 가장 빨리 만나는 Docker(원고 온라인상에 공개되어 있음), Docker Docs의 일부 문서
- 구성원 : 한영빈(소프16), 김희수(소프16), 고다경(소프14), 김유진(소프17), 김문수(소프17), 김경현(IT학부18), 김남수(컴공14)
- 스터디 모임 시각 : 수요일 오후 6시 ~ 오후 8시
- 모임 장소 : 동아리 랩실(필요에 따라 다른 장소도 가능)
스터디 방식¶
- 각자 미리 해당 주차 진도 공부해오기
- 매주 한명씩 돌아가면서, 해당 주차 진도를 상세히 공부하여 발표
- 매주 한명씩 돌아가며 해당 주차 스터디에서 다룬 내용을 위키에 기록 (해당 주차 발표자가 아닌 사람이 기록)
스터디 진도¶
각 주차별 진도에 필요에 따라 부가적인 내용이 추가될 수 있음.
- 1주차 : 스터디 개요 안내, 1~2장 / 발표자, 기록자 - 한영빈
- 2주차 : 3~5장 / 발표자 - 김유진, 기록자 - 고다경
- 3주차 : 6~7장 / 발표자 - 김희수, 기록자 - 김문수
- 4주차 : 8~9장 / 발표자 - 고다경, 기록자 - 김희수
- 5주차 : 10~14장 / 발표자 - 김남수, 기록자 - 김경현
- 6주차 : 16~19장 / 발표자 - 김문수, 기록자 - 김남수
1주차¶
- 출석 : 한영빈, 고다경, 김희수, 김유진
- 결석 : 김경현(아르바이트로 인해 불참), 김문수(장염으로 인해 병결)
스터디 진행 관련 결정 사항¶
- 위키 문서에 사용할 편집기 : Atom + Teletype
스터디에서 다룬 사항¶
- 슬라이드 자료 링크
- 가상머신(VM) 에 대한 소개
- 클라우드 컴퓨팅의 등장과 클라우드 환경에서의 가상머신
- 가상머신 이미지와 Immutable Infrastructure
- 컨테이너에 대한 소개와 컨테이너와 가상머신의 차이점
- 도커와 다른 컨테이너 이미지에 대한 간단한 소개
- 도커 이미지 구조에 대한 간단한 소개
- 도커 사용 사례
2주차¶
- 발표자 : 김유진 / 기록자 : 고다경
- 출석 : 한영빈, 고다경, 김희수, 김유진, 김남수
- 지각 : 김문수
-
결석 : 김경현(아르바이트로 인해 불참)
-
도커 기본 명령어(search, pull, images, run, ps, start, restart, attach, exec, stop, rm, rmi)
- Dockerfile 작성
- docker 이미지 히스토리 볼때
missing
은 무엇인가? - https://github.com/moby/moby/issues/20131
- docker build로 이미지 생성
- docker history로 이미지 히스토리
- docker cp 명령으로 파일 꺼내기
- docker commit 컨테이너 변경사항을 이미지로 생성
- docker diff 컨테이너 변경된 파일 확인
- docker inspect 세부 정보 확인
- Docker Multi Stage build
- https://docs.docker.com/develop/develop-images/multistage-build/#name-your-build-stages
3주차¶
- 발표자 : 김희수 / 기록자 : 김문수
- 출석 : 한영빈, 고다경, 김희수, 김남수
-
결석 : 김유진(집안 경조사로 인해 불참), 김경현(무단결석)
- dorkerfile 명령어(.dokerignore,FROM,MAINTAINER,RUN,CMD,ENTRYPOINT,EXPOSE,ENV,ADD,COPY,VOLUME,USER,WORKDIR,ONBUILD)
- entrypoint 와 cmd 의 차이점
- entrypoint: 컨테이너안에 명령어들을 넣어놓고 그 명령어들을 실행할때 사용
- cmd: 컨테이너안에 돌아가는 디폴트값
- docker link - docker ps 에 링크 정보가 나오지 않음.
docker inspect <컨테이너 이름>
으로 연결 정보 확인 가능.
- 다른 서버에 컨테이너 연결하기
--link
option 사용과 네트워크를 생성해 연결하는 방법 두가지가 있다.- 교재와 다르게
docker ps
로 조회시 연결 상태를 확인할 수 없음. - 다른 컨테이너와 연결하는것은 오케스트레이션이 더편함
4주차¶
- 발표자 : 고다경 / 기록자 : 김희수
- 출석 : 한영빈, 고다경, 김희수, 김문수, 김경현(화상)
- 결석 : 김유진(식중독), 김남수(개인 일정)
스터디에서 다룬 내용¶
- 슬라이드 자료 링크
- Docker로 애플리케이션 배포하기
-
서버 한 대에 배포하기
- 개발자 PC
- Git 설치 및 저장소 생성
- Node.js로 웹 서버 작성
- Dockerfile 작성
- SSH키 생성
~$ssh-keygen
- 서버 PC
- Git 설치 및 저장소 생성
- Docker 설치
- SSH키 설정
- 서버의 /home/<서버 사용자 계정> 디렉터리 아래에 .ssh 디렉터리를 생성하고, 권한을 설정합니다.
~$ mkdir .ssh # .ssh 디렉터리 생성 ~$ chmod 700 .ssh # .ssh 디렉터리 권한 설정
- authorized_keys파일 불러오고 권한 설정
$ chmod 600 authorized_keys
- 서버의 /home/<서버 사용자 계정> 디렉터리 아래에 .ssh 디렉터리를 생성하고, 권한을 설정합니다.
-
Git Hook 설정
- post-receive 파일 생성
#!/bin/bash APP_NAME=exampleapp APP_DIR=$HOME/$APP_NAME REVISION=$(expr substr $(git rev-parse --verify HEAD) 1 7) GIT_WORK_TREE=$APP_DIR git checkout -f cd $APP_DIR docker build --tag $APP_NAME:$REVISION . docker stop $APP_NAME docker rm $APP_NAME docker run -d --name $APP_NAME -p 80:80 $APP_NAME:$REVISION
- post-receive 파일 생성
-
개발자 PC에서 소스 Push하기
-
저장소 디렉터리로 이동한 뒤 git remote add 명령으로 origin 주소를 설정합니다. ~/exampleapp$ git remote add origin <서버 사용자 계정>@<서버 IP 주소 또는 도메인>:exampleapp
-
git push 명령으로 소스를 서버에 올립니다.
~/exampleapp$ git push origin master
- 웹 브라우저에서 서버IP주소로 접속
-
서버 여러 대에서 배포하기
할 필요 없음-
Kubernetes , docker-swarm을 쓰도록 하자.
-
cAdvisor 를 이용한 도커 컨테이너 모니터링
- cAdvisor = Container Advisor: 구글에서 개발한 컨테이너 모니터링 도구.
- 간단히 cAdvisor 이미지 받아서 컨테이너 실행하면 바로 모니터링 가능.
- 최근 1분간의 자료만 보여주므로, 긴 시간동안의 자료를 보려면 몇가지 프로그램 더 붙여야 함.
- InfluxDB(시계열 데이터용 데이터베이스), Grafana(대시보드) 등을 같이 사용. InfluxDB 대신 Elastic 많이 사용하기도 함.
- 아래 Docker Compose 파일을 이용하여 셋을 한번에 배포 가능.
version: "3" services: influx: image: influxdb volumes: - influx:/var/lib/influxdb environment: INFLUXDB_DB: cadvisor INFLUXDB_USER: cadvisor INFLUXDB_USER_PASSWORD: cadvisor cadvisor: image: google/cadvisor:latest ports: - 8080:8080 volumes: - /:/rootfs:ro - /var/run:/var/run:rw - /sys:/sys:ro - /var/lib/docker/:/var/lib/docker:ro - /dev/disk/:/dev/disk:ro links: - influx command: -logtostderr -docker_only -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influx:8086 restart: unless-stopped grafana: image: grafana/grafana:latest ports: - 4000:3000 volumes: - grafana:/var/lib/grafana links: - influx volumes: influx: driver: local grafana: driver: local
- Compose 파일 배포
docker-compose up
- Compose 파일 배포(백그라운드)
docker-compose up -d
- Compose 파일 문법 참조자료
5주차¶
- 발표자 : 김남수 / 기록자 : 김경현(?)
- 출석 : 한영빈, 김희수, 김남수, 김문수
- 지각 : 고다경, 김경현
- 결석 : 김유진(무단결석)
스터디에서 다룬 내용¶
- google cloud에서 Docker 사용
-
Google Compute Engine
- 이 문서 를 참고하여 직접 도커 설치
- 도커 활성화 작업
sudo systemctl enable docker
- 도커 데몬 활성화(시스템 시작시 도커 시작)sudo systemctl start docker
- 도커 데몬 시작sudo systemctl status docker
- 도커 데몬 상태 확인
- Kubernetes로 구축
- (AWS는 간단히 하는 경우 Beanstalk 사용 가능)
-
Docker remote API
:
Docker를 원격에서 TCP 소켓을 사용하는 경우 사용함:
HTTP REST 형식으로 구현된 API- docker 데몬을 제어할 수 있음
- http rest 형식
- curl 명령어를 통해 쉽게 사용가능 (page 205 참고)
- (유닉스 계열 : 서버에 요청을 보내는 명령어)
- pip을 이용하여 api 라이브러리를 받을 수 있음
6주차¶
- 발표자 : 김문수 / 기록자 : 김남수
- 출석 : 김문수, 김경현, 고다경, 김남수
- 지각 : 한영빈
- 결석 : 김유진(무단결석), 김희수(제사)
스터디에서 다룬 내용¶
Docker로 워드프레스 구축¶
- 워드프레스 Docker 이미지 생성
- 미리 mysql 데이터베이스를 생성해주어야함.
- mysql 데이터베이스 Dockerfile 작성하기
- 워드프레스 컨테이너를 생성할때
-LINK
옵션을 사용하여 db 컨테이너를 연결 그리고-p
옵션을 사용하여 외부에서 접근할 수 있도록 설정.
Docker로 Django 구축¶
- Django 이미지, db 이미지 두개를 만듬.(워드프레스 구축과정과 일치)
Docker 활용 시나리오¶
- 1
- 서버 필요할때만 서버 인스턴스 생성 (항상 서버 안 켜놔도 됨)
- 클라우드 서비스에서 제공하는 기능과 조합하여 좀 더 편리한 환경 구축가능
-
2
- DEVOPS는 개발, 테스트, 운영에 이르는 전구간을 자동화, 배포주기 짧고 표준화된 도구사용하여 커뮤니케이션비용울 줄이는 환경을 뜻함.
-
3
- Docker만 설치되어있으면 어디든지 Docker 컨테이너를 생성할 수 있기 때문에 사내 에서 클라우드 서비스, 또는 다른 클라우드 서비스로 쉽게 이전가능
- 4
- 테스트 용도
- 간단하게 테스트하는 경우
docker run
명령의--rm
옵션을 사용함.- (
exit
명령으로 빠져나오면 컨테이너가 바로 삭제됨)
- (