Docker--基础

ps:本博文为整理博文,是楼主在学习过程中整理的资源便于以后学习,借鉴的资源都已在文末标出。

一:Docker介绍

     Docker(中文:码头工人) 基于Go语言并遵从Apache2.0协议开源的应用容器引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。容器引擎与容器关系。容器小汽车,容器引擎就是引擎呀,哈哈

    1:Docker解决了什么难题?

  • 软件开发最大的麻烦事之一,就是环境配置。用户计算机的环境都不相同,你怎么知道自家的软件,能在那些机器跑起来?

  • 用户必须保证两件事:操作系统的设置,各种库和组件的安装。只有它们都正确,软件才能运行。如果某些老旧的模块与当前环境不兼容,那就麻烦了。

  • 环境配置如此麻烦,换一台机器,就要重来一次,旷日费时。很多人想到,能不能从根本上解决问题,软件可以带环境安装?也就是说,安装的时候,把原始环境一模一样地复制过来。那如何解决呢?

  • 解决方法一:虚拟机(virtual machine,缩写为VM)就是带环境安装的一种解决方案。它可以在一种操作系统里面运行另一种操作系统,比如在 Windows 系统里面运行 Linux 系统。应用程序对此毫无感知,因为虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要了就删掉,对其他部分毫无影响。但是缺点是:资源占用多,冗余步骤多,启动慢

  • 解决方法二:linux容器(Linux Containers,缩写为 LXC)是Linux 发展出的另一种虚拟化技术。Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。或者说,在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。由于容器是进程级别的,相比虚拟机有很多优势:启动快、资源占用少、体积小

  • Docker 就是属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。

     Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。 比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。

     Docker系统有两个程序:docker服务端和docker客户端。其中docker服务端是一个服务进程,管理着所有的容器。docker客户端则扮演着docker服务端的远程控制器,可以用来控制docker的服务端进程。大部分情况下,docker服务端和客户端运行在一台机器上。

     容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

    2:Docker的沙箱机制

  • 沙箱机制是程序只能访问自己的目录,这个目录称为沙箱目录,而应用程序之间禁止数据的共享和访问;

  • 沙箱机制是一种安全机制,设计原理就是只能允许自己的应用访问目录,而不允许其他的应用访问;

    3:Docker常用场景:

  • web应用的自动化打包和发布;

  • 自动化测试和持续集成、发布;

  • 在服务型环境中部署和调整数据库或其他的后台应用;

  • 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境

    4:Docker主要用途

  • 提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。

  • 提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。

  • 组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。

    5:Docker版本

  • Docker社区版(CE):为了开发人员或小团队创建基于容器的应用,与团队成员分享和自动化的开发管道。docker-ce提供了简单的安装和快速的安装,以便可以立即开始开发。docker-ce集成和优化,基础设施。(免费)

  • Docker企业版(EE):专为企业的发展和IT团队建立谁。docker-ee为企业提供最安全的容器平台,以应用为中心的平台。(付费)

    6:Docker的image文件

  • Docker 把应用程序及其依赖,打包在 image 文件里面。只有通过这个文件,才能生成 Docker 容器。

  • image 文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。

  • image 是二进制文件。实际开发中,一个 image 文件往往通过继承另一个 image 文件,加上一些个性化设置而生成。举例来说,你可以在 Ubuntu 的 image 基础上,往里面加入 Apache 服务器,形成你的 image。

  • image 文件是通用的,一台机器的 image 文件拷贝到另一台机器,照样可以使用。一般来说,为了节省时间,我们应该尽量使用别人制作好的 image 文件,而不是自己制作。即使要定制,也应该基于别人的 image 文件进行加工,而不是从零开始制作。

  • 为了方便共享,image 文件制作完成后,可以上传到网上的仓库。Docker 的官方仓库Docker Hub是最重要、最常用的 image 仓库。此外,出售自己制作的 image 文件也是可以的。

    7:Docker的容器文件

  • image 文件生成的容器实例,本身也是一个文件,称为容器文件。

  • 也就是说,一旦容器生成,就会同时存在两个文件: image 文件和容器文件。而且关闭容器并不会删除容器文件,只是容器停止运行而已。

二:架构相关

    Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。

    Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象(容器)与类(镜像)。

    架构图与相关解释表格如下(来自:http://www.runoob.com/docker/docker-architecture.html):

    

Docker 镜像(Images)

Docker 镜像是用于创建 Docker 容器的模板。类似于镜像(类),容器(类对象)。

Docker 容器(Container)

容器是独立运行的一个或一组应用。

Docker 客户端(Client)

Docker 客户端通过命令行或者其他工具使用 Docker API (https://docs.docker.com/reference/api/docker_remote_api) 与 Docker 的守护进程通信。

Docker 主机(Host)

一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。

Docker 仓库(Registry)

Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。

Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。

Docker Machine

Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。

三:基础操作与流程

  • 安装docker(CentOS系统为例)

//切换为root用户或者直接使用sudo 也可以
$  su root  
   
//安装
# yum remove docker \
        docker-client \
        docker-client-latest \
        docker-common \
        docker-latest \
        docker-latest-logrotate \
        docker-logrotate \
        docker-selinux \
        docker-engine-selinux \
        docker-engine

//安装一些必要系统工具
# yum install -y yum-utils device-mapper-persistent-data lvm2
  • 启动docker服务

service docker service 
  • 测试hello-world

docker run hello-world       

如果是新安装的docker会自动下载镜像并创建容器来运行,在显示的信息中可以看到docker的处理流程:
//docker自动处理流程
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal.
//翻译后
1. Docker客户端连接Docker守护线程。
2. Docker守护线程从Docker Hub中提取“hello-world”镜像。
3. Docker守护线程从该镜像创建一个新容器,该容器运行生成您当前正在读取的可执行文件
4. Docker守护程序将其输出以流的方式 传输到Docker客户端,后者将其发送到您的终端。
cd /etc/docker

vim daemon.json   //没有该文件手动创建一个

//添加以下部分

{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
  • Docker 允许你在容器内运行应用程序, 使用 docker run 命令来在容器内运行一个应用程序。运行简易程序打印”Hello World!“

docker run ubuntu:15.10 /bin/echo "Hello world"

//意义:Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo "Hello world",然后输出结果。

//此命令各个参数解析:
* docker:         Docker 的二进制执行文件。
* run:            与前面的 docker 组合来运行一个容器。
* ubuntu:15.10:   指定要运行的镜像,Docker首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
* /bin/echo "Hello world": 在启动的容器里执行的命令。
  • 运行交互式容器:参数(-i   -t),运行交互bash

docker run -i  ubuntu:15.10
//参数含义:
* -i  :允许你对容器内的标准输入 (STDIN) 进行交互。
//测试:
输入 ls  回车后显示文件夹列表


docker run -i -t ubuntu:15.10 /bin/bash
//参数含义:
*-i  :允许你对容器内的标准输入 (STDIN) 进行交互。
* -t    :在新容器内指定一个伪终端或终端。在该语句中我们指定/bin/bash伪造一个客户端
//测试:
格式和我们的linux服务器几乎一致
  • 后台模式启动容器 与 停止容器

docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
//语句含义:
启动以ubuntu:15.10镜像创建一个以进程方式后台运行的容器,运行"while true; do echo hello world; sleep 1; done"语句
//返回值:
返回一个字符串,就是该容器的唯一ID,通过该ID我们才可以进行
//参数含义:
-d : 后台运行容器

docker ps 
//查看运行的容器

docker stop 容器ID或者容器名称
//停止容器

参考:http://www.runoob.com/docker/docker-architecture.html

https://baijiahao.baidu.com/s?id=1591887487395526427&wfr=spider&for=pc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值