Docker容器的原理與實踐(上)

本文來自網易雲社區java

 

虛擬化

是一種資源管理技術,將計算機的各類資源予以抽象、轉換後呈現出來, 打破實體結構間的不可切割的障礙,使用戶能夠比本來更好的方式來應用這些資源。linux

Hypervisornginx

  • 一種運行在基礎物理服務器和操做系統之間的中間軟件層,可容許多個操做系統和應用共享硬件。
  • Hypervisor能夠捕獲CPU的指令,爲指令訪問硬件控制器和外設充當中介。

兩種模型docker

  • 本地虛擬化
    hypervisor直接運行在硬件之上,在hypervisor上面是虛擬機
    • 特色
      • 須要硬件支持
      • 虛擬機監視器做爲主操做系統
      • 運行效率高

 

  • 主機虛擬化
    hypervisor運行在操做系統之上
    • 特色
      • VMM做爲應用程序運行在主操做系統中
      • 運行效率通常比本地虛擬化低

幾種分類vim

  • 硬件仿真
    將一個OS(Host)的服務轉換並顯示成另一個OS(Guest)

    • 優勢
      • Guest OS無需修改,不須要等到硬件實際可用時就可對本身的實際代碼進行驗證
    • 缺點
      • 須要模擬指令,速度很是慢

 

  • 全虛擬化
    在硬件和Guest OS之間捕獲和處理那些對虛擬機敏感的指令,使客戶操做系統無須修改就能運行

+ 優勢     + Guest OS無需修改,速度和功能都很是不錯+ 缺點     + 基於Hosted模式的全虛擬產品性能不是特別優異
  • 半虛擬化
    與全虛擬化有些相似,也是利用Hypervisor實現對底層硬件的共享訪問,在Hypervisor上面運行的Guest OS已經集成與半虛擬化有關的代碼,包含縮短硬件訪問過程所需的驅動程序,經過這種方法無須從新編譯和捕獲特權指令,性能接近物理機

+ 優勢     + 與全虛擬化相比,架構更精簡,經過修改Guest OS能夠最大限度的減小處理開銷+ 缺點     + 須要對Guest OS修改
  • 硬件輔助虛擬化
    Intel/AMD硬件產商對集成了優化hypervisor的指令集來提升性能(Intel的VT,AMD的AMD-V)
    • 優勢
      • 經過引入硬件技術,是虛擬化技術更接近物理機

 

  • 操做系統級虛擬化
    操做系統提供一組空間彼此隔離,應用被限制在每一個用戶空間裏
+ 優勢     + 幾乎沒有任何開銷,由於只是共享OS和主機而沒有經過虛擬機+ 缺點     + 缺少靈活性,不能在任意OS上面實施,用戶共享主機和OS須要注意版本

虛擬化與容器差別centos

 

虛擬化的好處服務器

  • 更高的資源利用率
  • 下降管理成本
  • 提升使用靈活性

Docker的優點架構

  • 輕量,秒級的快速啓動速度
  • 簡單、易用、活躍的社區
  • 標準統一的打包、部署、運行方案
  • 鏡像支持增量分發,易於部署
  • 性能尤爲是內存和IO的開銷

虛擬化產品概覽app

 

Docker容器實戰

Build, Ship, and Run Any App, Anywhere運維

安裝

Docker Toolbox

Toolbox使用Machine和VirtualBox在虛擬機中建立了一個引擎來運行容器

Docker For MAC

  • Hypervisor Framework
    • 輕量級的OS X虛擬化解決方案
    • 提供C API用於在用戶端虛擬化技術交互
    • 支持版本
      • OSX 10.10.3及以上
      • 2010及以後的Mac (須要CPU 支持EPT)

 

  • bhyve FreeBSD下的虛擬技術
  • xhyve
    • 基於Hypervisor.framework,徹底運行在用戶態
    • 很小230k,不依賴於其餘軟件和庫
    • 是bhyve的OS X移植版,Mac上玩Linux多了一種選擇

 

  • HyperKit 基於xhyve/bhyve,構建在Hypervisor.framework之上,OSX上運行的輕量級虛擬化工具包,是Docker For MAC的核心組件

操做演示

環境信息查看

  • docker info
  • docker version

生命週期管理

  • docker create
  • docker run
  • docker start
  • docker stop
  • docker restart
  • docker pause
  • docker unpause
  • docker rm
  • docker kill
  • docker exec

鏡像倉庫命令

  • docker login
  • docker logout
  • docker pull
  • docker push
  • docker search

鏡像管理

  • docker images
  • docker rmi
  • docker commit
  • docker build
  • docker tag

運維命令

  • docker attach
  • docker inspect
  • docker port
  • docker rename
  • docker stats
  • docker top

資源管理

  • docker volume
docker run -itd -v /volumedata:/volume --name busybox-volume busybox
docker volume create --name hellodocker run -it  -v hello:/world --name busybox-volume-hello busybox
  • docker network

系統日誌

  • docker history
  • docker logs

docker-machine

部署經常使用系統

部署advisor監控()

docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:rw \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--publish=8080:8080 \
--detach=true \
--name=cadvisor \
google/cadvisor:latest

部署私有倉庫()

docker run -d -p 50001:5000 \ 
--restart=always \
-v ~/dockermapping/registry:/var/lib/registry \
--name registry registry

設置受信倉庫和鏡像倉庫

/etc/default/docker/var/lib/boot2docker/etc/sysconfig/docker

 

Dockerfile構建

Dockerfile是對鏡像建立過程的描述腳本

例子1:構建JDK8鏡像
FROM centos:latest
MAINTAINER CZL
ADD jdk-8u131-linux-x64.tar.gz /opt
RUN ln -s /opt/jdk1.8.0_131/ /opt/jdk
ENV JAVA_HOME /opt/jdk
ENV PATH $JAVA_HOME/bin;$PATH
CMD /opt/jdk/bin/java -version

例子2:構建包含consul-template的nginx鏡像
FROM nginx:1.13.1MAINTAINER czl
RUN apt-get update
RUN apt-get -qqy install wget unzip vim iputils-ping curl
RUN wget https://releases.hashicorp.com/consul-template/0.18.3/consul-template_0.18.3_linux_amd64.zipRUN unzip consul-template_0.18.3_linux_amd64.zip
RUN mv consul-template /usr/local/bin/ADD ./start.sh /usr/local/bin/start.sh
RUN chmod +x /usr/local/bin/start.sh
CMD [ "/usr/local/bin/start.sh" ]

Maven插件構建

<plugin>    <groupId>com.spotify</groupId>    <artifactId>docker-maven-plugin</artifactId>    <version>0.4.13</version>    <executions>        <execution>            <id>build-image</id>            <phase>package</phase>            <goals>                <goal>build</goal>            </goals>        </execution>    </executions>    <configuration>        <imageName>${docker.registry}/${project.artifactId}:${project.version}</imageName>        <dockerDirectory>${project.build.outputDirectory}</dockerDirectory>        <!--<dockerHost>https://192.168.99.100:2376</dockerHost>-->        <!--<dockerCertPath>${basedir}/certs</dockerCertPath>-->        <resources>            <resource>                <directory>${project.build.directory}</directory>                <include>${project.build.finalName}.jar</include>            </resource>        </resources>    </configuration></plugin>

Docker Compose編排

version: '2'services:  consul-server:    hostname: consul-server    image: consul    mem_limit: 640m    ports:      - "8400:8400"      - "8500:8500"      - "8600:53/udp"  nginx-server:    hostname: nginx-server    image: mydocker.com:50001/nginx-consul-template    ports:      - "81:80"    volumes:      - ~/xuexibao/czllearnworkspace/document/docker-compose/nginx-consul-template/mapping/:/data    command: [sh,"/data/start.sh"]
networks:  default:    external:      name: eureka-network

 

網易雲容器服務爲用戶提供了無服務器容器,讓企業可以快速部署業務,輕鬆運維服務。容器服務支持彈性伸縮、垂直擴容、灰度升級、服務發現、服務編排、錯誤恢復及性能監測等功能。

 

本文來自網易雲社區,經做者陳志良受權發佈。

原文:Docker容器的原理與實踐(上)

瞭解 網易雲 :

網易雲官網:https://www.163yun.com

網易雲社區:

新用戶大禮包:https://www.163yun.com/gift

 

更多網易研發、產品、運營經驗分享請訪問網易雲社區

相關文章
相關標籤/搜索