Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Docker

張旭
October 10, 2016

 Docker

Just another docker intro.

張旭

October 10, 2016
Tweet

More Decks by 張旭

Other Decks in Technology

Transcript

  1. Docker 的特色 - 1 • 作業系統層級的虛擬化產品 • 實作涉及 Linux Kernel

    功能 • 100% 原生硬體的效能 • 虛擬主機等級的隔離及資源分配 • 應用程式等級的輕量及方便
  2. Docker 的特色 - 2 • 在呼叫 Linux 的核心提供的虛擬化模組時,0.9 版前還需依賴 LXC、libvirt

    及 systemd-nspawn 的功能,0.9 版之後,就預設 使用自己開發的 libcontainter 來呼叫。 • 由唯讀的多層次映像檔 (Image) 做為模板 (產生 Container) • 產生 Container 後,保持最上層可寫入 (用來提供服務)
  3. Container 技術發展史 • 1979 - chroot • 2008 - LXC

    • 2013 - LMCTFY (Let Me Contain That For You - Google) • 2013 - Docker • 2014 - Rocket • 2016 - Windows Containers
  4. LXC (LinuX Containers) • Kernel Namespaces - PID, User, Mount,

    Network 隔離 • Cgroups - CPU, Memory, Disk I/O 隔離 • Chroot - File System 隔離 Docker 0.9 以後已經改用自行開發的 libcontainter 來實作。
  5. Docker is more than LXC • AUFS - Another Union

    File System,相當於把 Host (Server) 的目錄當成 Guest (Container) 的 Disk。 • Base Image - 透過 base image,可以在 Docker上執行各種 的 Distribution Linux 而不受限於 Host 的 OS 種類,Image 裡面其實就是一堆必要檔案的集合。
  6. Docker 術語 - Image A Docker image is a read-only

    template. • 唯讀的映像檔 • 相當於 VM 的樣板機 • 不可變更的 (immutable)
  7. Docker 術語 - Container A Docker container holds everything that

    is needed for an application to run. Each container is created from a Docker image. • 以 Image 為基板,放到記憶體中執行的 • Docker 執行起來的最小單位 • Container 裡面必須有一個前景 (foreground) 執行的程式
  8. Docker 術語 - Registry Docker registries hold images. • 存放

    Image 的倉庫 • 類似 Github 之於 Git Repository 的角色
  9. Docker 安裝 - Mac $ brew install docker-machine $ brew

    install docker https://docs.docker.com/docker-for-mac 原生的,會把 docker-compose 也裝起來,COOL
  10. Docker 安裝 - Ubuntu 14.04 $ sudo apt-get install apt-transport-https

    ca-certificates $ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D $ sudo vim /etc/apt/sources.list.d/docker.list deb https://apt.dockerproject.org/repo ubuntu-trusty main $ sudo apt-get update $ sudo apt-get purge lxc-docker $ sudo apt-get install docker-engine
  11. Docker 安裝 - CentOS $ sudo vim /etc/yum.repos.d/docker.repo $ sudo

    yum install docker-engine [docker-repo] name=Docker Repository baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/ enabled=1 gpgcheck=1 gpgkey=https://yum.dockerproject.org/gpg
  12. Dockerfile - 1 • 想象 Dockerfile 是一道食譜,大家根據食譜就可以烹調 (docker build) 出同樣一道菜

    (Docker Image) 來。 • 可以勉強將 Dockerfile 先想像成 Ruby 的 Gemfile、 NodeJS 的 package.json 來理解, 但 Dockerfile 絕不僅僅 是宣告相依套件而已。 • Dockerfile 手冊 :https://docs.docker.com/engine/reference/builder/
  13. Dockerfile - 2 FROM centos:6 MAINTAINER zx1986 <[email protected]> EXPOSE 80

    3306 USER root ENV LANG en_US.UTF-8 ENV TZ=Asia/Taipei RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone RUN rpm -iUvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm RUN yum -y update && yum -y groupinstall "Development Tools" RUN yum -y update && yum -y install python-pip && pip install meld3==1.0.0 supervisor CMD ["/usr/bin/supervisord"] • 一個簡單的 Dockerfile 範例
  14. Docker 常用指令 • docker images • docker pull ubuntu •

    docker run -it ubuntu bash • docker ps -a • docker stop • docker rm
  15. docker-compose 安裝 $ curl -L https://github.com/docker/compose/releases/download/1.8.1/docker-co mpose-`uname -s`-`uname -m` >

    docker-compose $ chmod a+x docker-compose $ mv docker-compose /usr/local/bin/ $ docker-compose --version
  16. docker-compose.yml • yaml 格式 (YAML Ain't Markup Language) • 給

    docker-compose 指令看的設定檔。 • 根據 docker-compose.yml 的設定,docker-compose 可以一次啓 動多個 docker container,並設定之間的互通關聯、資料共享等。 • docker-compose 背後其實很多個 docker 指令的組合、搭配,類似 git-flow 工具的背後其實是很多 git 指令的組合。 • docker-compose.yml 手冊: https://docs.docker.com/compose/compose-file/
  17. docker-compose 常用指令 • docker-compose up -d • docker-compose ps •

    docker-compose restart • docker-compose logs -f • docker-compose stop • docker-compose rm
  18. Microservice - Martin Fowler • 微服務架構 (各自專注做好一件事) • 怎樣算是 Microservice?

    ◦ 兩個 Pizza 可以餵飽的團隊 (人數) ◦ 兩週可以開發完成的項目 (時間)
  19. Container 到底該專一還是多工? • 專注於單一應用 (服務) 才符合 Docker 的精神? • 把

    Docker 當成 VM 那樣使用? • Container 裡面要跑其他多個背景服務 (daemon) 怎麼辦? 推薦閱讀 http://phusion.github.io/baseimage-docker