Docker學習筆記

基礎知識與準備:linux

1、基礎知識:docker

1.Docker runtimeubuntu

  runtime是容器真正運行的地方。藉助JAVA中JVM的概念來理解。vim

  lxc、runc、rkt是目前主流的三種容器runtime。瀏覽器

  •   lxc是Linux上老牌的容器runtime。Docker最初也是用lxc做爲runtime的。
  •   runc是Docker本身開發的runtime。目前Docker的默認runtime。符合oci規範。
  •   rkt是CoreOS開發的容器runtime。符合oci規範,於是可以運行Docker的容器。

2.容器管理工具安全

  lxd是lxc對應的管理工具。服務器

  runc的管理工具是Docker engine,包括後臺deamon和cli兩部分,咱們一般提到的Docker通常就是指docker engine。網絡

  rkt的管理工具是rkt cli。curl

3.容器定義工具

  docker image是Docker容器的模板,runtime根據docker image來建立容器。

  dockerfile是包含若干個命令的文本文件,能夠經過該文件建立出docker image。

  定義過程:dockerfile--->docker image--->container

4.容器倉庫(Registry)

  Registry分爲共有和私有兩種:

  Docker Registry  :私有倉庫

  Docker Hub:共有倉庫(私有收費)

  Quay.io :另外一個共有倉庫

5.容器OS

  除了在傳統的Linux、MACOS、Windows上運行容器,目前也存在一些容器OS,例如CoreOS、Atomic、Ubuntu Core等。

  好比傳統操做系統,容器操做系統體積更小,啓動更快。

6.容器平臺

  1.容器編排引擎:docker swarm、kubernetes、mesos+marathon等。

  2.容器管理平臺:Rancher、ContainerShip等。

  3.基於容器的PaaS:Deis、Flynn、Dokku等。

7.容器網絡

  docker network

  flannel

  weave

  calico

8.服務發現

  etcd

  consul

  zookeeper

9.監控

  docker ps/top/stats

  docker stats API

  sysdig

  cAdvisor/Heapster

  Weave Scope

10.數據管理、日誌管理和安全性

  數據管理:REX-Ray

  日誌管理:docker logs、logspout

  安全性:OpenSCAP

  

2、實驗環境準備

1.環境選擇

  管理工具:Docker engine

  runtime:runc,Docker默認runtime

  操做系統:Ubuntu16.04

2.安裝Docker(Docker CE版,即Community Edition社區版,Docker EE爲Enterprise Edition收費版)

  • Ubuntu主機可以上網
  • 更新國內apt源(例如aliyun的源)
  • 安裝包,容許apt命令HTTPS訪問Docker源:sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
  • 添加Docker官方GPG key:curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  • 將Docker的源添加到/etc/apt/source.list中:sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
  • 安裝Docker:sudo apt-get update & sudo apt-get install docker-ce 

3.運行第一個容器

  sudo docker run -d -p 80:80 httpd

  上述命令中-d表明在後臺運行容器,-p表示端口映射(容器端口80映射到host的端口80),httpd爲docker image名。

  使用host的瀏覽器輸入http://localhost:80,顯示It works,表示容器運行成功。

4.鏡像下載加速

  若是docker在下載鏡像時很慢(服務器在國外)能夠按如下步驟使用代理:

  • 在daocloud.io註冊一個用戶
  • 登陸後在菜單中點擊「加速器」
  • 複製命令在host中執行
  • 重啓docker deamon。sudo systemctl restart docker.service

 

容器使用:

1、構建鏡像

  構建鏡像有兩種方式:docker commit和利用dockerfile來建立。

  

  docker commit:

  1.運行容器。

  2.修改容器。

  3.將容器保存爲新的鏡像。

  過程:

  • hanxinda@ubuntu:~$ sudo docker run -it ubuntu  :運行一個ubuntu容器
  • root@98c2e3571740:/# apt-get install -y vim :在容器中安裝vim
  • hanxinda@ubuntu:~$ sudo docker ps : 在另外一個窗口中查看當前容器列表
  • hanxinda@ubuntu:~$ sudo docker commit stoic_murdock ubuntu-with-vim

 不建議使用docker commit來建立鏡像,由於這是一種手工建立鏡像的方式,容易出錯,效率低且可重複性弱。更重要的是其餘用戶不知道該鏡像是怎麼建立出來的,是否存在惡意程序,即沒法對鏡像進行審計,存在安全隱患。(dockerfile建立的容器可查看建立過程)

  

  dockerfile:

  dockerfile是一個文本文件,記錄了構建鏡像的全部步驟。

  例如:

    FROM ubuntu     #表示使用ubuntu鏡像做爲基礎鏡像

    RUN apt-get update && apt-get install -y vim  #在ubuntu鏡像中更新源(ubuntu鏡像中的源是默認的ubuntu官方源),並安裝vim

  sudo docker image ls :查看本地鏡像: 

  

  sudo docker history [image name] :查看某個鏡像的建立過程:

  

  dockerfile中經常使用命令:

  • FROM : 指定base鏡像
  • MAINTAINER : 做者或其餘信息(任意字符)
  • COPY : 將文件從build context複製到鏡像。(build context即dockerfile存放目錄),兩種形式COPY src dst或COPY ["src","dst"]
  • ADD :與COPY相似。不一樣的是若是src文件是歸檔文件(tar、zip、tgz、xz等),文件會被自動解壓到dst
  • ENV :設置環境變量,環境變量可被後面的指令使用,例如:ENV MY_VERSION 1.3 RUN apt-get install -y mypackage=$MY_VERSION
  • EXPOSE :指定容器中的進程監聽某個端口,Docker能夠將該端口暴露出來。在後續的容器網絡部分討論。
  • VOLUME : 將文件或目錄聲明爲volume,在容器存儲部分討論。
  • WORKDIR:爲後面的RUN、CMD、ENTRYPOINT、ADD或COPY指令設置鏡像中的當前工做目錄。
  • RUN:在容器中運行指定的命令。
  • CMD:容器啓動時運行指定的命令。Dockerfile中能夠有多個CMD指令,但只有最後一個生效,CMD能夠被docker run後的參數替換。
  • ENTRYPOINT:設置容器啓動時運行的命令。Dockerfile中能夠有多個ENTRYPOINT指令,但只有最後一個生效,CMD或docker run以後的參數能夠被當作參數傳遞給ENTRYPOINT。

 2、分發鏡像

  三種方式:

  1.使用一樣的dockerfile在其餘host中構建鏡像。

  2.上傳鏡像到公共Registry上,例如Docker Hub。

  3.上傳鏡像到私有Registry上,供本地Host使用。

  

  給鏡像命名:

    一個特定鏡像的名字由兩部分組成:repository和tag。

    [image name] = [repository] : [tag]

    若是執行docker build時沒有指定tag,則會使用默認tag latest。至關於docker build -t ubuntu-with-vim:latest

    Tag一般用來指定鏡像的版本信息,可是當心latest只是一個默認tag,不必定是指最新的版本。可是在Docker Hub中,約定將latest做爲最新穩定版本的別名,但不是強制規定。因此咱們在使用鏡像時最好避免使用latest,明確指定某個tag,例如httpd:2.3,ubuntu:xenial等。

 

  使用公共Registry:

    將鏡像上傳到Docker Hub中:

    1.首先在Docker Hub註冊一個帳號。

    2.在Docker Hub上登陸,docker login -u leokale

    3.修改鏡像的repository,使之與Docker Hub帳號匹配。 docker tag leokale/httpd:v1

    4.將鏡像上傳到Docker Hub上,docker push leokale/httpd:v1

  搭建本地Registry:

    1.啓動一個registry容器。docker run -d -p 5000:5000 -v /myregistry:/var/lib/registry registry:2

相關文章
相關標籤/搜索