Docker Study

깊이있는 삽질 Ubuntu Korea Community Wiki
이동: 둘러보기, 검색

2016년 9월 21일[편집]

Network : pdf 파일 보름 내로 다시 만들어서 드립니다.
Clustering & network -> Swarm(https://docs.docker.com/swarm/)
container 생성 후 동작 중간에 자원 performance 조절은 불가
docker run 옵션에서 제공하며, lxd에 비해 cgroup을 통해 조절되는 parameter의 양이 적음.

Storage : https://docs.docker.com/engine/userguide/storagedriver/selectadriver/
You can set the storage driver by passing the --storage-driver=<name> option to the dockerd command line, or by setting the option on the DOCKER_OPTS line in the /etc/default/docker file. -> 우분투 버그
/etc/docker/ 에 daemon.json 파일을 생성하고 { "storage driver : zfs" } 입력하고 저장
storage drive는 여러가지가 제공되나, host machine에서는 하나만 사용해야 함.

AUFS http://www.joinc.co.kr/w/man/12/docker/aufs
union mount
CoW : 변경점만 write한다 whitout : Image layer는 R/O이니
whiteout이 마치 지워진것처럼 인식하게 함.
아직 rename은 특정 조건에서 제대로 안될수도 있음.

ZFS http://www.howtogeek.com/175159/an-introduction-to-the-z-file-system-zfs-for-linux/
https://docs.docker.com/engine/userguide/storagedriver/zfs-driver/

Security https://docs.docker.com/engine/security/security/

도커 컨테이너는 보통 제한된 Capability 를 가지고 실행된다.

capability 는 root/non-root 디렉터리를 fine-grained 접근 제어 시스템으로 바꾼다. (루트 기반의 시스템 관리 권한은 각 앱이나 프로세스별 권한으로 세분화 한다.) 예 : 웹서버가 80번 포트에 바인드 할때, 루트로 바인드 하지 않고, net_bind_service 같은 전용 권한으로 바인드 한다.

보통의 서버는 많은 프로세스를 루트 권한으로 실행해야 하는 경우가 많다.

도커 컨테이너 내부에서 대부분의 경우 루트 권한이 필요하지 않다. ssh 연결은 도커 호스트 머신에 의해 실행된다. cron 은 플렛폼 전체적으로 실행되기 보단, 사용자 프로세스로 실행되어야 한다 로그 관리는 도커 또는 Loggy, Splunk 같은 제3자 서비스로 관리된다. 하드웨어 관리는 udev 로 실행 되어야 한다. 네트워크 관리는 도커 컨테이너 밖에서 일어난다.

그러므로 컨테이너의 루트는 호스트의 루트보다 훨씬 적은 privileges 를 가지고 있다. 예를 들어 아래와 같은 것이 가능해진다. 모든 마운트 작업 거부 raw 소켓 접근 거부 일부 파일시스템 작업 거부 모듈 로딩 거부 (기타 등등...)

이는 침입자가 컨테이너에서 루트로 상승을 한다 해도 큰 영향을 주지 않음을 의미한다. 도커 컨체이너에서는 기본적으로 아래와 같이 필요한 capability 를 제외하고 모두 드롭한다.

Linux Capability : http://man7.org/linux/man-pages/man7/capabilities.7.html Arch Wiki - Capability : https://wiki.archlinux.org/index.php/Capabilities Docker Docs - Linux Kernel Capabilities : https://docs.docker.com/engine/security/security/#/linux-kernel-capabilities Default Docker Container Capability List - https://github.com/docker/docker/blob/master/oci/defaults_linux.go#L64-L79 Docker Run Reference - Capability 추가 및 제거 옵션 : https://docs.docker.com/engine/reference/run/#/runtime-privilege-and-linux-capabilities


2016년 9월 7일[편집]

LXD 소개, 기본 사용법, 구조.

http://www.ubuntu.com/cloud/lxd

공유 문서 https://docs.google.com/document/d/1Hza6Me_xQU5XWhhCkki3vP7EEJgUEaoAHr34oqWjTcw/edit?usp=sharing

2016년 8월 31일[편집]

Android App on ChromeBook 관련 기사 http://www.androidauthority.com/run-android-apps-chromebook-703248/

Google I/O Chromebook 관련 영상 https://youtu.be/yDy1WWUdlY8?t=4m40s 이 영상에서 Android App들을 돌리는 시연 영상이 공개됨

Tech Bits - Running Android apps in Docker using Googles ARC Welder http://thshaw.blogspot.kr/2015/07/running-android-apps-in-docker-using.html

https://chrome.googleblog.com/2016/05/the-google-play-store-coming-to.html

https://support.google.com/chromebook/answer/1086915

https://insights.ubuntu.com/2016/06/14/universal-snap-packages-launch-on-multiple-linux-distros/

http://snapcraft.io/

https://blog.jessfraz.com/post/docker-containers-on-the-desktop/

2016년 8월 24일[편집]

  • 유용 링크: https://github.com/wscherphof/oracle-12c#build < 설명: OracledbOracle Linux 7 Docker image에서 설치하고 돌릴 수 있게 Dockerfile들을 제공한다. 자세한 것은 직접 방문해서 보면 된다. 친절하게 다 안내가 되어있다. 개발자가 사용한 OracledbOracle Database 12c Enterprise Edition Release 12.1.0.2.0 에서 실험이 진행되었다.

Oracle에서 아예 공식 블로그와 자사 Github에 Oracle DB를 컨테이너 상에서 매우 쉽게 돌릴수 있도록 설명서와 프로그램들을 짜서 동봉 하였다. 그냥 다운로드 해서 쓰면 된다. 나머지 서비스나 라이선스 문제는 알아서 하면 될 것이다. 링크: https://blogs.oracle.com/developer/entry/creating_and_oracle_database_docker

설명 간단 요약: 블로그 내용을 간단하게 요약하면 먼저 oracle.com에서 자신이 쓸 DB의 버젼과 일반용, 기업용을 상세히 고려해서 자신에게 맞는 것을 다운로드 한다. 그 다음에 docker-images-master/OracleDatabase/dockerfiles라는 폴더에 Oracle DB 버젼으로 이름지어진 폴더들이 있다. 자신의 버젼에 맞는 폴더에 다운로드한 모든 걸 옮겨 넣은 후에 OracleDatabase에

buildDockerImage.sh 라는 것을 실행 시킨다. 실행 거부가 되면 해당 shell 스크립트 파일의 속성-권한-> 파일을 실행 프로그램으로 실행을 체크, 아니면 간단하게 chmod +x buildDockerImage.sh 하면 된다.

그다음 이걸 실행 시키면서 반드시 옵션을 주어야 한다. 일반용인지 기업용인지를 반드시 명시하면 이미지가 자동 빌드된다. 그러면 반드시 docker 에서 Oracle DB 이미지가 보여야 한다. ./buildDockerImage.sh --help 를 통해 어떤 옵션을 줄 수 있는지 보면 된다.(필자의 경우 -e 옵션으로 기업용 버젼을 설치해 보았다.)

다 만들어진 이미지를 이제 Port 1521로 호스트와 연결 지어주면 끝난다. 하지만 비밀번호가 자동 생성 되는데 run 명령어를 입력하는 순간 첫 줄에 비밀번호가 무엇인지 보이게 된다. 반드시 그 비밀번호를 빨리 소유한다. 안 그럼 다시 만들어야 한다. sqldeveloper로 연결해 보면 아주 재대로 돌아가는 것을 볼 수 있을 것이다.

2016년 8월 17일[편집]

1) /lib/systemd/system/docker.service 파일 수정

[Service] section 에 
EnvironmentFile=-/etc/default/docker <- 추가
ExecStart=/usr/bin/dockerd $DOCKER_OPTS -H fd:// <- 수정

2) /etc/default/docker 파일 수정

DOCKER_OPTS="-H tcp://0.0.0.0:4243" 추가

3) 서비스 재시작

- systemctl daemon-reload
- service docker stop/start

2016년 8월 10일[편집]

Example graphite usage.png

  • <모니터링 서버 주소>/grafana 로 접속하면, grafana 로 데이터를 볼 수 있음.

Example grafana usage.png

2016년 8월 3일[편집]

출석 : 한영빈, 이희찬, 심장훈, 장태희

    • snapshot? commit으로 사용 하면 되지만 개념이 미묘하게 차이가 있는 듯.
    • 파일들의 위치 : /var/lib/docker -> containers, volumes
    • 완벽한 sandbox 형태를 제공하지는 않는다. 접근이 가능하기 때문에 Host가 파일 변경은 수월하나 보안적으로는 취약함.
    • CMD + ENTRYPOINT
    • CMD는 Dockerfile에서 한 번만 정의 가능 / ENTRYPOINT는 Dockerfile에서 한 번만, 명령어에서 옵션을 주면 CMD 옵션을 덮어쓰게 됨.
  • 다음 주 8, 9 해오기

2016년 7월 27일[편집]

커리큘럼 작성[편집]

- Windows, OS X: Kitematic(Docker에서 공식적으로 권장함.) --> https://kitematic.com/

- 운영체제 전부 지원:Simple Docker UI.--> https://chrome.google.com/webstore/detail/simple-docker-ui/jfaelnolkgonnjdlkfokjadedkacbnib?hl=ko(2016-7-27일 기준으로 Windows용 Docker Beta 버젼을 쓴다면 조금 설정이 바로 보고 쓰기에 좀 번거롭다. Windows 사용자라면 Kitematic을 쓰는게 훨씬 편하다.)

  • 1주차 : 1 ~5장 Docker 살펴보기
  • 2주차 : 5 ~7장
  • 3주차 : 8 ~9장
  • 4주차 : 10 ~ 15장
  • 5주차 : 16 ~ 20장
  • 6주차 :
  • 7주차 :
  • 8주차 :

- 장훈님 : container의 성능 자체에 관심 /

  • version : 1.10 stable로 맞추기
  • http://m.blog.daum.net/sunwookim77/104
  • docker 다운 받은 image를 삭제 하고 싶으면 image를 사용한 모든 container를 서비스 중지하고 삭제 하여야 함.
  • sudo docker exec -i -t hello-nginx /bin/bash -> -i -t 옵션이 뒤에 가면 먹히지 않는다. 옵션 지정 위치가 중요.