Docker介绍

Docker是指容器化技术,用于支持创建和实验Linux Container。借助Docker,你可以将容器当做重量轻、模块化的虚拟机来使用,同时,你还将获得高度的灵活性,从而实现对容器的高效创建、部署和复制,并能将其从一个环境顺利迁移至另外一个环境。

Docker官方网站:http://www.docker.com

Github Docker 源码:https://github.com/docker/docker

基础特性

  • 基于C/S架构应用程序
  • 模块化
  • 层与镜像版本控制
  • 支持回滚
  • 快速部署

Docker的应用场景

  • Web 应用的自动化打包和发布。
  • 自动化测试和持续集成、发布。
  • 在服务型环境中部署和调整数据库或其他的后台应用。
  • 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。

Docker基础架构图

  • Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器
  • Docker 容器通过 Docker 镜像来创建
  • DOCKER_HOST:真正运行容器的主机
  • Containers:容器,独立运行的一个或一组应用
  • Images:镜像,用于创建 Docker 容器的模板
  • Registry:镜像仓库

镜像image与容器Container区别

  • 镜像是静态的,不会运行
  • 容器则是动态的,有生命周期

Docker容器镜像站:https://hub.docker.com

Docker object

  • image
  • containers
  • networks
  • volumes
  • plugins

Docker的安装

直接在CentOS上安装Docker

首先安装之前先卸载之前的旧版本:

  1. $ sudo yum remove docker \
  2. docker-client \
  3. docker-client-latest \
  4. docker-common \
  5. docker-latest \
  6. docker-latest-logrotate \
  7. docker-logrotate \
  8. docker-selinux \
  9. docker-engine-selinux \
  10. docker-engine

安装docker依赖包:

  1. $ sudo yum install -y yum-utils \
  2. device-mapper-persistent-data \
  3. lvm2

添加docker源(如果Docker官方下载的速度太慢也可以使用阿里的镜像源:http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo):

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

安装docker:

  1. $ sudo yum install docker-ce

安装完直接启动docker即可:

  1. ~]# systemctl start docker

使用docker version 可以看到我们安装docker的版本

  1. ~]# docker version
  2. Client:
  3. Version: 18.03.1-ce
  4. API version: 1.37
  5. Go version: go1.9.5
  6. Git commit: 9ee9f40
  7. Built: Thu Apr 26 07:20:16 2018
  8. OS/Arch: linux/amd64
  9. Experimental: false
  10. Orchestrator: swarm
  11. Server:
  12. Engine:
  13. Version: 18.03.1-ce
  14. API version: 1.37 (minimum version 1.12)
  15. Go version: go1.9.5
  16. Git commit: 9ee9f40
  17. Built: Thu Apr 26 07:23:58 2018
  18. OS/Arch: linux/amd64
  19. Experimental: false

使用Vagrant + Virtual Box快速搭建Docker环境

Vagrant介绍

Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境。它 使用Oracle的开源VirtualBox虚拟化系统,使用 Chef创建自动化虚拟环境。我们可以使用它来干如下这些事:

  • 建立和删除虚拟机
  • 配置虚拟机运行参数
  • 管理虚拟机运行状态
  • 自动配置和安装开发环境
  • 打包和分发虚拟机运行环境

Vagrant的运行,需要依赖某项具体的虚拟化技术,最常见的有VirtualBox以及VMWare两款,早期,Vagrant只支持VirtualBox,后来才加入了VMWare的支持。

Vagrant安装和使用

Vagrant是基于其他虚拟化产品来创建虚拟机的,这里我们选择开源产品Virtual Box,我们先安装Virtual Box和Vagrant:

下载好之后先使用vagrant init centos/7生成默认的Vagrntfile,然后使用vagrant up即可自动创建虚拟机,我们为了配置Docker环境需要更改下Vagrantfile,在创建虚拟机的时候自动安装docker环境(配置config.vm.provision "shell"选项)并且按照自己的要求配置虚拟机的规模和网络。

我的Vagrantfile配置如下

  1. # -*- mode: ruby -*-
  2. # vi: set ft=ruby :
  3. Vagrant.require_version ">= 1.6.0"
  4. boxes = [
  5. {
  6. :name => "docker-1",
  7. :eth1 => "172.16.56.11",
  8. :mem => "1024",
  9. :cpu => "1"
  10. }
  11. ]
  12. Vagrant.configure(2) do |config|
  13. config.vm.box = "centos/7"
  14. boxes.each do |opts|
  15. config.vm.define opts[:name] do |config|
  16. config.vm.hostname = opts[:name]
  17. config.vm.provider "vmware_fusion" do |v|
  18. v.vmx["memsize"] = opts[:mem]
  19. v.vmx["numvcpus"] = opts[:cpu]
  20. end
  21. config.vm.provider "virtualbox" do |v|
  22. v.customize ["modifyvm", :id, "--memory", opts[:mem]]
  23. v.customize ["modifyvm", :id, "--cpus", opts[:cpu]]
  24. end
  25. config.vm.network :public_network, ip: opts[:eth1]
  26. end
  27. end
  28. # config.vm.synced_folder "../sync", "/home/vagrant/sync"
  29. config.vm.provision "shell", inline: <<-SHELL
  30. yum -y install wget
  31. wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
  32. yum makecache
  33. yum install -y yum-utils device-mapper-persistent-data lvm2
  34. yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  35. yum makecache fast
  36. yum -y install docker-ce
  37. sudo systemctl start docker
  38. SHELL
  39. end

之后使用vagrant up创建即可

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

在这个过程中Vagrant会帮我们创建好一台Centos 7的虚拟机并安装好Docker环境,使用vagrant ssh直接登陆虚拟机

  1. λ vagrant ssh
  2. Last login: Wed Aug 15 15:54:32 2018 from 10.0.2.2
  3. [vagrant@docker-1 ~]$ sudo docker version
  4. Client:
  5. Version: 18.06.0-ce
  6. API version: 1.38
  7. Go version: go1.10.3
  8. Git commit: 0ffa825
  9. Built: Wed Jul 18 19:08:18 2018
  10. OS/Arch: linux/amd64
  11. Experimental: false
  12. Server:
  13. Engine:
  14. Version: 18.06.0-ce
  15. API version: 1.38 (minimum version 1.12)
  16. Go version: go1.10.3
  17. Git commit: 0ffa825
  18. Built: Wed Jul 18 19:10:42 2018
  19. OS/Arch: linux/amd64
  20. Experimental: false
  21. [vagrant@docker-1 ~]$

Vagrantfile中有一项config.vm.synced_folder可以配置本地文件夹同步到虚拟机,挂载本地文件夹到虚拟机中需要VBoxAdditions的支持,这个可以在虚拟机起来之后在安装,也可以参考vagrant-vbguest这个插件的使用,这个功能比较适合开发人员,可以在本地编写代码而在Linux环境中调试代码运行。




Docker和vagrant都是最近才开始了解学习的,有什么错误或者不对的地方还请大家指正,有什么不懂的也可以一起交流。

Docker系列一:Docker的介绍和安装的更多相关文章

  1. Docker系列之原理简单介绍

    目录 1.1.Docker架构简介 1.2.Docker 两个主要部件 1.3.虚拟机和Docker对比: 1.4.Docker内部结构 Docker系列之原理简单介绍 @ Docker是一个开源的应 ...

  2. openresty开发系列10--openresty的简单介绍及安装

    openresty开发系列10--openresty的简单介绍及安装 一.Nginx优点 十几年前,互联网没有这么火,软件外包开发,信息化建设,帮助企业做无纸化办公,收银系统,工厂erp,c/s架构偏 ...

  3. Docker 系列一(概念原理和安装).

    一.概念原理 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间 ...

  4. docker 系列之 docker安装

    Docker支持以下的CentOS版本 CentOS 7 (64-bit) CentOS 6.5 (64-bit) 或更高的版本 前提条件 目前,CentOS 仅发行版本中的内核支持 Docker. ...

  5. Docker系列一: docker简介及基本环境安装

    Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的 Li ...

  6. Docker系列(1) - Centos8.X安装Docker

    环境准备 需要会Linux的基础 Centos8.x 使用Xshell连接远程服务器 环境查看 #系统内核是4.18以上 [root@localhost ~]# uname -r 4.18.0-305 ...

  7. Docker系列03—Docker 基础入门

    本文收录在容器技术学习系列文章总目录 1.概念介绍 1.1 容器 1.1.1 介绍 容纳其它物品的工具,可以部分或完全封闭,被用于容纳.储存.运输物品.物体可以被放置在容器中,而容器则可以保护内容物. ...

  8. Docker系列05—Docker 存储卷详解

    本文收录在容器技术学习系列文章总目录 1.存储卷介绍 1.1 背景 (1)docker 的 AFUS 分层文件系统 docker镜像由多个只读层叠加面成,启动容器时,docker会加载只读镜像层并在镜 ...

  9. Docker系列之Docker镜像(读书笔记)

    一.基本概念 Docker包括三个基本概念镜像.容器.仓库. Docker镜像:就是一个只读的模板.例如:一个镜像可以包含一个完整的ubuntu操作系统环境,里面仅安装了Apache或其他应用程序.用 ...

  10. Docker系列01—Docker 基础入门

    一.初识Docker和容器 1.1 什么是docker 容纳其他物品的工具,可以部分或完全封闭,被用于容纳.存储.运输物品.物体可以被放置在容器中,而容器则可以保护内容物. 容器? 容器就是在隔离的环 ...

随机推荐

  1. shell编程 Shell script 的默认变量($0, $1...)

    Shell script 的默认变量($0, $1...) 我们知道指令可以带有选项与参数,例如 ls -la 可以察看包含隐藏文件的所有属性与权限.那么 shell script 能不能在脚本文件名 ...

  2. Debian 跨版本升级

    相对于某些重量级 Linux 发行版而言,同样是通过网络跨版本升级,Debian 的升级过程总要显得轻快很多.不会因为要下载数量惊人的软件包并安装而把升级时间拉得很长,也不用担心中途某些程序崩溃退出导 ...

  3. mysql 启动停止脚本 and mysql 迁移 导入和导出

    ####监控脚本 [root@pdb~]# more /opt/VRTS/scripts/mysql_monitor.sh#!/bin/shn=`ps -ef |grep mysql|grep &qu ...

  4. 面向切面编程 (AOP )的理解

    AOP的全称: Aspact  Oriented  Programming AOP的目标(作用):让我们可以“专心做事”  日志记录,事务处理,异常捕获,缓存操作. AOP原理 将复杂的需求分解出不同 ...

  5. 《C#高效编程》读书笔记01-使用属性而不是可访问的数据成员

    在需求变更中,属性比数据成员更容易修改,例:客户对象不该与空白名称,若你使用公有属性封装Name,那么现在修改一处,而数据成员则可能要修改多处 public class Customer { priv ...

  6. I/O流操做总结(三)

    说实话,其实我并不是很喜欢Java这门语言,尽管它很强大,有很多现成的API可以调用 但我总感觉它把简单的事情弄得太过复杂,甚至有时候会让人迷失 弄不清到底是为了写出东西,还是为了语言本身 我学习的第 ...

  7. mongodb的投影

    mongodb 投影意思是只选择必要的数据而不是选择一个文件的数据的整个.如果一个文档有5个字段,需要显示只有3个,然后选择其中只有3个字段. find() 方法 MongoDB 的find()方法, ...

  8. 模板引擎doT.js

    作为一名前端攻城师,经常会遇到从后台ajax拉取数据再显示在页面的情境,一开始我们都是从后台拉取再用字符串拼接的方式去更达到数据显示在页面! <!-- 显示区域 --> <div i ...

  9. Css Hack 大全(IE6、IE7、IE8、IE9 css hack)

    一.IE6 css hack: 1. *html Selector {} /* Selector 表示 css选择器 下同 */ 2. Selector { _property: value; } / ...

  10. ORACLE中能否找到未提交事务的SQL语句

      在Oracle数据库中,我们能否找到未提交事务(uncommit transactin)的SQL语句或其他相关信息呢?  关于这个问题,我们先来看看实验测试吧.实践出真知. 首先,我们在会话1(S ...