快捷搜索:

您的位置:澳门新葡4473网站 > 项目 > Docker系列一:Docker的介绍和安装

Docker系列一:Docker的介绍和安装

发布时间:2019-11-08 05:25编辑:项目浏览(96)

    Docker介绍

    Docker是指容器化本领,用于帮忙创制和实验Linux Container。依靠Docker,你能够将容器充任重量轻、模块化的虚构机来接纳,同一时间,你还将获取惊人的八面驶风,进而完毕对容器的迅猛成立、计划和复制,并能将其从多个情况顺遂迁移至其余一个条件。

    Docker官网:

    Github Docker 源码:

    底工特性

    • 听说C/S架构应用程序
    • 模块化
    • 层与镜像版本调节
    • 扶持回滚
    • 火速布署

    Docker的利用项景

    • Web 应用的自动化打包和发布。
    • 自动化测量检验和缕缕集成、发表。
    • 在服务型情况中布局和调动数据库或其余的后台应用。
    • 起来编写翻译大概扩大现成的OpenShift或Cloud Foundry平台来搭建本身的PaaS情状。

    Docker根底架构图

    图片 1

    • Docker 使用客商端-服务器 (C/S) 架构格局,使用远程API来管理和开创Docker容器
    • Docker 容器通过 Docker 镜像来创建
    • DOCKER_HOST:真正运转容器的主机
    • Containers:容器,独立运转的二个或风流罗曼蒂克组接纳
    • Images:镜像,用于创设 Docker 容器的沙盘
    • Registry:镜像旅馆

    镜像image与容器Container区别

    • 镜疑似静态的,不会运维
    • 容器则是动态的,有生命周期

    Docker容器镜像站:

    Docker object

    • image
    • containers
    • networks
    • volumes
    • plugins

    add by zhj:

    Docker的安装

          能够省略的感到docker是对LXC(Linux Container卡塔 尔(阿拉伯语:قطر‎封装,它提供风姿浪漫种比LXC高端的API。Docker使用Go语言开垦,利用了Linux提供的LXC,AUFS,namespace和cgroup技巧。落成了文件系统,能源和网络的割裂,最后指标是落成近似PaaS平台的使用隔断。最大的优势在于相比较重量级设想机如KVM、Xen、VMWare、VirtualBox来说运转快,据有财富小,迁移也非常方便。docker近年来只运维在Linux上,可是这些Linux能够是地点说的重量级虚拟机,也足以是直接基于裸机的Linux。按docker公司高端软件程序猿Jerome Petazzoni的传道:“重量级” 的虚拟化包括KVM、Xen、VMWare、VirtualBox以致任何的设想化系统。“轻量级”指的就是OpenVZ、VServer、(LXC卡塔尔国containers,zones等等。小编以为,“重量级”的设想化拉动IaaS(正是大家常常说道的“云”卡塔尔的前行,而“轻量级“设想化则有支持PaaS的演变,这一个方便更管见所及地进行“云”计划。docker使用情况参见:几个Docker的实在应用途景 和 Docker 的使用途景在何地?

    直接在CentOS上安装Docker

    第风流洒脱安装以前先卸载早先的旧版本:

    $ sudo yum remove docker 
                      docker-client 
                      docker-client-latest 
                      docker-common 
                      docker-latest 
                      docker-latest-logrotate 
                      docker-logrotate 
                      docker-selinux 
                      docker-engine-selinux 
                      docker-engine
    

    安装docker依赖包:

    $ sudo yum install -y yum-utils 
      device-mapper-persistent-data 
      lvm2
    

    增加docker源(假使Docker官方下载的快慢太慢也得以动用Ali的镜像源:

    $ sudo yum-config-manager 
        --add-repo 
        https://download.docker.com/linux/centos/docker-ce.repo
    

    安装docker:

    $ sudo yum install docker-ce
    

    设置完直接开发银行docker就可以:

    ~]# systemctl start docker
    

    使用docker version 能够看出大家设置docker的版本

    ~]# docker version 
    Client:
     Version:      18.03.1-ce
     API version:  1.37
     Go version:   go1.9.5
     Git commit:   9ee9f40
     Built:        Thu Apr 26 07:20:16 2018
     OS/Arch:      linux/amd64
     Experimental: false
     Orchestrator: swarm
    
    Server:
     Engine:
      Version:      18.03.1-ce
      API version:  1.37 (minimum version 1.12)
      Go version:   go1.9.5
      Git commit:   9ee9f40
      Built:        Thu Apr 26 07:23:58 2018
      OS/Arch:      linux/amd64
      Experimental: false
    

          别的,美团网技艺公司的Docker连串之风度翩翩:入门介绍 也不错。

    接纳Vagrant + Virtual Box急忙搭建Docker情形

    Vagrant介绍
    Vagrant是二个基于Ruby的工具,用于创设和配备设想化开采景况。它 使用Oracle的开源VirtualBox虚构化系统,使用 Chef创设自动化设想情状。我们能够利用它来干如下那个事:

    • 成立和删除设想机
    • 布置设想机械运输转参数
    • 拘禁设想机械运输维处境
    • 机关配置和装置开辟景况
    • 卷入和散发设想机械运输维蒙受

    Vagrant的运作,要求信任某项具体的设想化手艺,最平淡无奇的有VirtualBox以致VMWare五款,开始的大器晚成段时代,Vagrant只扶持VirtualBox,后来才参与了VMWare的支撑。

    Vagrant安装和使用

    Vagrant是依靠别的虚构化付加物来创设设想机的,这里大家采纳开源产物Virtual 博克斯,大家先安装Virtual Box和Vagrant:

    • Virtual Box下载地址:
    • Vagrant下载地址:

    下载好之后先使用vagrant init centos/7扭转私下认可的Vagrntfile,然后利用vagrant up就可以自行创制虚拟机,大家为了安插Docker情况需求改换下Vagrantfile,在创立虚构机的时候自动安装docker意况(配置config.vm.provision "shell"选拔卡塔 尔(英语:State of Qatar)并且根据本身的渴求安顿虚构机的局面和网络。

    自家的Vagrantfile配置如下

    # -*- mode: ruby -*-
    # vi: set ft=ruby :
    
    Vagrant.require_version ">= 1.6.0"
    
    boxes = [
        {
            :name => "docker-1",
        :eth1 => "172.16.56.11",
            :mem => "1024",
            :cpu => "1"
        }
    ]
    
    Vagrant.configure(2) do |config|
    
      config.vm.box = "centos/7"
      boxes.each do |opts|
        config.vm.define opts[:name] do |config|
          config.vm.hostname = opts[:name]
          config.vm.provider "vmware_fusion" do |v|
            v.vmx["memsize"] = opts[:mem]
            v.vmx["numvcpus"] = opts[:cpu]
          end
          config.vm.provider "virtualbox" do |v|
            v.customize ["modifyvm", :id, "--memory", opts[:mem]]
            v.customize ["modifyvm", :id, "--cpus", opts[:cpu]]
          end
          config.vm.network :public_network, ip: opts[:eth1]
        end
      end
    
    #  config.vm.synced_folder "../sync", "/home/vagrant/sync"
    
      config.vm.provision "shell", inline: <<-SHELL
          yum -y install wget
          wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
          yum makecache
          yum install -y yum-utils device-mapper-persistent-data lvm2
          yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
          yum makecache fast
          yum -y install docker-ce
          sudo systemctl start docker
      SHELL
    end
    

    其后采纳vagrant up创造就可以

    λ vagrant up
    Bringing machine 'docker-1' up with 'virtualbox' provider...
    ==> docker-1: Importing base box 'centos/7'...
    
     [KProgress: 20%
     [KProgress: 40%
     [KProgress: 90%
     [K==> docker-1: Matching MAC address for NAT networking...
    ==> docker-1: Checking if box 'centos/7' is up to date...
    ==> docker-1: Setting the name of the VM: docker-1_docker-1_1534247086153_83300
    ==> docker-1: Clearing any previously set network interfaces...
    ==> docker-1: Preparing network interfaces based on configuration...
        docker-1: Adapter 1: nat
        docker-1: Adapter 2: bridged
    ==> docker-1: Forwarding ports...
        docker-1: 22 (guest) => 2222 (host) (adapter 1)
    ==> docker-1: Running 'pre-boot' VM customizations...
    ==> docker-1: Booting VM...
    ==> docker-1: Waiting for machine to boot. This may take a few minutes...
        docker-1: SSH address: 127.0.0.1:2222
        docker-1: SSH username: vagrant
        docker-1: SSH auth method: private key
        docker-1: 
        docker-1: Vagrant insecure key detected. Vagrant will automatically replace
        docker-1: this with a newly generated keypair for better security.
        docker-1: 
        docker-1: Inserting generated public key within guest...
    ==> docker-1: Machine booted and ready!
    ==> docker-1: Checking for guest additions in VM...
    
    ...
    

    在此个进度中Vagrant会帮大家成立好意气风发台Centos 7的虚构机并设置好Docker意况,使用vagrant ssh一贯登入虚构机

    λ vagrant ssh
    Last login: Wed Aug 15 15:54:32 2018 from 10.0.2.2
    [vagrant@docker-1 ~]$ sudo docker version
    Client:
     Version:           18.06.0-ce
     API version:       1.38
     Go version:        go1.10.3
     Git commit:        0ffa825
     Built:             Wed Jul 18 19:08:18 2018
     OS/Arch:           linux/amd64
     Experimental:      false
    
    Server:
     Engine:
      Version:          18.06.0-ce
      API version:      1.38 (minimum version 1.12)
      Go version:       go1.10.3
      Git commit:       0ffa825
      Built:            Wed Jul 18 19:10:42 2018
      OS/Arch:          linux/amd64
      Experimental:     false
    [vagrant@docker-1 ~]$
    

    Vagrantfile中有生机勃勃项config.vm.synced_folder可以配备当守田件夹同步到设想机,挂载当半夏件夹到设想机中要求VBoxAdditions的支撑,那个能够在虚构机起来未来在安装,也得以参照vagrant-vbguest那几个插件的应用,这几个成效比较相符开拓人士,能够在地点编写代码而在Linux境况中调理代码运营。

    Docker和vagrant都以新近才起来领悟学习的,有何样错误也许不没有错地点还请大家指正,有如何不懂的也得以合作沟通。

     

     

    图片 2

    多少个月以前,红帽(Red Hat卡塔 尔(阿拉伯语:قطر‎公布了在 Docker 技巧上和 dotCloud 建立经合关系。在那时,作者并从未时间去学学有关 Docker 的知识,所以在后天,趁着这些 30 天的挑衅,作者调整去上学一下 Docker 毕竟是何许的。那篇博文并非说今后怎么在 OpenShift 上用 Docker 的。请阅读由 迈克 McGrath 撰写的 "关于 OpenShift 和 Docker 的手艺思忖"。也能够看看这么些 Stackoverflow 的问题,通晓一下 Docker 和 OpenShift 的差别。

    什么是 Docker?

    Docker 提供了二个得以运作你的应用程序的封套(envelope),可能说容器。它原来是 dotCloud 运维的一个非正式项目,并在前些时候开源了。它吸引了大气的关心和斟酌,引致dotCloud 把它重命名到 Docker Inc。它最早是用 Go 语言编写的,它就约等于是加在 LXC(LinuX Containers,linux 容器卡塔 尔(英语:State of Qatar)上的管道,允许开拓者在越来越高档期的顺序的定义上干活。

    Docker 扩大了 Linux 容器(Linux Containers卡塔 尔(英语:State of Qatar),或着说 LXC,通过二个高档案的次序的 API 为经过单独提供了二个轻量级的设想景况。Docker 利用了 LXC, cgroups 和 Linux 本身的木本。和人生观的设想机不相同的是,一个Docker 容器并不含有多少个单身的操作系统,而是基于已有个别幼功设备中操作系统提供的机能来运作的。这里有三个 Stackoverflow 的答案,里面极度详尽清楚地陈述了具备Docker 分歧于纯粹的 LXC 的作用特色

    Docker 会像贰个可移植的器皿引擎那样行事。它把应用程序及具备程序的依赖情形打包到三个虚构容器中,这几个编造容器能够运营在别的生龙活虎种 Linux 服务器上。那大大地加强了程序运转的圆滑和可移植性,无论需不要求许可、是在公共云还是私密云、是否裸机意况等等。

    Docker 由上边那个组合:

    1. Docker 服务器守护程序(server daemon卡塔尔,用于管理全部的容器。
    2. Docker 命令行顾客端,用于控克制务器守护程序。
    3. Docker 镜像:查找和浏览 docker 容器镜像。它也拜候这里拿到:

    自个儿怎么要珍爱那么些?

    Docker 之所以有用,是因为把代码从三个机械迁移到另三个机械平日是困难的。它尝试去使得软件迁移的进程变得更其可信赖和自动化。Docker 容器能够移植到具备帮忙运转 Docker 的操作系统上。

    能够看这篇小说精晓越来越多:how the Fedora Project is embracing Docker

    但是作者早已在应用虚构机(VMs卡塔 尔(阿拉伯语:قطر‎了

    现今终结,要把程序可相信地移植的唯风华正茂选用是虚构机(Virtual Machines,VMs卡塔 尔(阿拉伯语:قطر‎。设想机以往早就很宽泛了,但虚构机是那二个低档,它提供的是欧洲经济共同体的操作系统意况。设想机的主题材料是,迁移的时候太大了。它们含有了汪洋肖似硬件驱动、设想微处理机、网络接口等等并无需的信息。 虚构机也须要比较长日子的运行,同一时间也会消耗大量的内部存款和储蓄器、CPU 财富。

    Docker 比较起来就十分轻量级了。运转起来就和一个正常化程序差不离。那一个容器不独有运维快,成立三个镜像和创造文件系统快速照相也超快。它能够在 EC2, RackSpace VMs 这样的设想遭遇中运转。事实上,在 Mac 和 Windows 系统上应用 Docker 的越来越好方法是利用 Vagrant。Docker 的最初的愿景其实是公布相仿VM 的意义,但它运维得越来越快和内需越来越少的能源。

    它就像 Vagrant 一样吗?

    自己凌驾的一个疑难是,笔者应该用 Vagrant 依然 Docker 去为自己的下叁个项目开创沙箱情况?答案再一回是如出意气风发辙的。

    Docker 比起 Vagrant 来讲,运转起来会尤其省能源。Vagrant 提供的条件其实是依靠 Virtual Box 提供的虚构机。能够阅读 Stackoverflow 的本条答复打听更多。

    哦,不是!另二个应用程序打包系统

    当第一遍读到 Docker 打包应用程序时,作者纳闷了。大家怎么须求再多一个运用打包系统(packaging system卡塔尔?我早已经把自家的 Java 程序打包成 JA昂科拉 或 WACR-V了。在花了些时日阅读了有关 Docker 的素材后,作者驾驭了 Docker 应用包(application package卡塔尔的意义。Docker 正是虚构机和你的像 WA奥迪Q3 或 JA奥迪Q3那样的应用包之间的大桥。一方面来讲,虚构机是相当重量级的(耗财富卡塔尔,因为移植时要附带些没有须要的东西。另一面来讲,应用代码包(the application code packages卡塔尔是老大的轻量的,并从未附带充足可信地运作起来的音信。Docker 很好地平衡了这两下面。

    在 Docker 中,应用程序包(application package)意味着三个含有了应用程序代码和所需配置情状的包。比方,在 Java 中我们常常把大家的 Web 应用程序打包在三个 WARubicon 文件中。那些 WA纳瓦Lavin件是贰个拾壹分简便的软件包,它可是包蕴了应用程序的代码。但应用程序须要一定安插的条件去高效地运作起来。有时候安排的景况和开拓时的条件是不一致的。举例开荒者使用 Java 7 开荒顺序,但配备时的情形是在 OpenJDK Java 6 中;又大概是在 Mac 上付出的,但在 TucsonHEL 上配置。境况也许有希望是:有生龙活虎对系统库(system libraries卡塔 尔(英语:State of Qatar)在付出景况和模仿条件(staging environment)中,在差异的应用程序上有差异的作用。Docker 通过不独有打包应用程序,也卷入应用程序的依赖蒙受来消除这一个难点。

    起来选择 Docker

    在 Fedora 机器上运用那篇博文中的指令安装 Docker

    $ vagrant up
    $ vagrant ssh
    

    然后安装 Docker Fedora 镜像:

    $ sudo docker pull mattdm/fedora
    

    地方的命令会从  上下载 Docker Fedora 镜像。
    安装了 Docker Fedora 镜像后,大家能够运用上面甘之若素列出全部的镜像:

    $ sudo docker images
    
    REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE
    shekhargulati/node_image_007   latest              e12b3054d981        50 minutes ago      470.3 MB (virtual 601.8 MB)
    
    mattdm/fedora                         12.04               8dbd9e392a96        7 months ago        131.5 MB (virtual 131.5 MB)
    

    上面列表中首先个镜像正是自家原先创造的。它打包了 NodeJS 及 Express Fremework。第二个镜像正是积累的 Docker Fedora 镜像了。

    现行反革命,我们在 Docker 容器内运维八个剧本:

    $ sudo docker run -t -i -p 3000 mattdm/fedora /bin/bash
    

    在运作完上边的吩咐后,我们就在 Docker 的器皿里面了。大家能够由此 ls 命令列出具备的指令。

    今昔大家创造上边包车型客车目录结构 /home/shekhar/dev

    $ mkdir -p home/shekhar/dev
    $ cd home/shekhar/dev
    

    当今,作者会安装 NodeJS。运转上面的命令去在 Fedora Docker 镜像上设置 Node:

    $ sudo yum install npm
    

    任何时候,大家设置 Express 框架:

    $ npm install express -g
    

    Express 框架安装后,我们创设三个新的 Express 程序,然后运行它:

    $ express myapp
    $ cd myapp
    $ npm install
    $ node app.js
    

    上边会在 3000 端口运维 NodeJS Express 程序。

    现行反革命开荒另叁个命令行标签,列出具备的 Docker 进度:

    $ sudo docker ps
    CONTAINER ID        IMAGE                                 COMMAND             CREATED             STATUS              PORTS                     NAMES
    4a5715a915e5        mattdm/fedora   /bin/bash           5 minutes ago       Up 5 minutes        0.0.0.0:49157->3000/tcp   red_duck
    

    您会小心到,3000 端口和本机上的 49157 绑定了。你能够通过下边所示的 curl 命令测量检验Express 应用:

    $ curl 0.0.0.0:49157
    <!DOCTYPE html><html><head><title>Express</title><link rel="stylesheet" href="/stylesheets/style.css"></head><body><h1>Express</h1><p>Welcome to Express</p></body></html>
    

    当今 commit 镜像,然后 push 到 Docker 镜像注册表(registry卡塔尔。在你做那步事先,你一定要经过 去登记一个Docker 注册表。

    $ sudo docker commit 4a5715a915e5 shekhargulati/node_image_007
    $ sudo docker push shekhargulati/node_image_007
    

    请使用你和煦的客商名和镜像名。

    于是,小编的首先个镜像已经上传到 Docker 注册表上边了: 

    您可以利用 pull 命令下载这些镜像:

    $ docker pull shekhargulati/node_image_007
    

    那正是前几天的剧情。保持反馈!


    原文:Day 21: Docker--The Missing Tutorial
    翻译整理:Segmentfault

     

    本文由澳门新葡4473网站发布于项目,转载请注明出处:Docker系列一:Docker的介绍和安装

    关键词:

上一篇:MSMQ学习笔记一——概述

下一篇:没有了