一、docker简介
1.1 什么是docker
Docker是一个开源的应用容器引擎,是一个轻量级容器技术,是一个应用打包、分发、部署的工具,基于Google公司推出的Go 语言实现,遵从Apache 2.0 协议。
1.2 什么是容器
docker支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像;运行中的这个镜像称为容器。
容器是软件的可执行单元,它采用通用方式封装了应用程序代码及其库和依赖项,因此可以随时随地运行容器(无论是在桌面、传统 IT 还是云端)。
为此,容器利用操作系统 (OS) 虚拟化形式,这里会利用操作系统的功能(在 Linux 内核中,即名称空间和 cgroups 原语)来隔离进程,并控制这些进程有权访问的 CPU、内存和磁盘的数量。
1.3 传统的虚拟化技术和容器之间的差别
容器:
- 容器之间共享同一个系统内核,这样当同一个库被多个容器使用时,内存的使用效率会得到提升。
- 为应用程序提供了隔离的运行空间:每个容器内都包含一个独享的完整用户环境空间,并且一个容器内的变动不会影响其他容器的运行环境。
- 容器技术使用了namespaces来进行空间隔离,通过文件系统的挂载点来决定容器可以访问哪些文件,通过cgroups来确定每个容器可以利用多少资源。
虚拟机:
- 虚拟层为用户提供了一个完整的虚拟机:包括内核在内的一个完整的系统镜像。
- CPU虚拟化技术可以为每个用户提供一个独享且和其他用户隔离的系统环境,虚拟层可以为每个用户分配虚拟化后的CPU、内存和IO设备资源
1.4 Docker镜像的创建
1.4 容器是如何运行的
1.4.1 Docker Client
也称为Docker客户端。其实就是Docker提供命令行界面工具,是许多Docker用户与Docker进行交互的主要方式。客户端可以构建,运行和停止应用程序,还可以远程与Docker_Host进行交互。
1.4.2 Docker daemon
Docker daemon是服务器组建,以Linux后台服务的方式运行,是Docker最核心的后台进程,我们也把它称为守护进程。它负责响应来自Docker Client的请求,然后将这些请求翻译成系统调用完成容器管理操作。该进程会在后台启动一个API Server,负责接受由Docker Client发送的请求,接受到的请求通过Docker daemon内部的一个路由分发调用,由具体的函数来执行请求。
1.4.3 Docker Image
Docker image可以看作一个特殊的文件系统,除了提供运容器运行时所需要的程序、库、资源、配置等文件外,还包含了一些为运行时准备的参数(匿名卷,环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。我们可将Docker镜像看成只读模版,通过它可以创建Docker容器。我们可以将镜像的内容和创建步骤描述在一个文本文件中,这个文件被称作Dockerfile,通过执行docker build<docker-file>命令可以构建出Docker镜像
1.4.4 Docker Rigistry
Docker registry是存储docker image的仓库
1.4.5 Docker Container
Docker 容器就是Docker镜像的运行实例,是真正运行项目程序、消耗系统资源、提供服务的地方。Docker Container提供了系统硬件环境,我们可以使用Docker Images这些制作好的系统盘,再加上我们所编写好的项目代码,run一下就可以提供服务了。
容器在docker中的创建过程:
docker run 执行一个命令,这个命令会被发给docker引擎来处理,docker引擎会检索本机上有没有所需要的镜像(因为容器是通过镜像来运行的),如果没有这个镜像,会自动从仓库Registry里拉取下来,根据设定的参数将拉取的镜像运行起来。
二、docker环境部署及测试
2.1 环境部署
首先进入阿里云容器,进入docker-ce:
由centos-7步骤安装:
把不需要的源直接删掉:
我们直接安装docker-ce会出现依赖性的错误:
此时我们进入阿里云centos源里:
将centos7的源安装在本地并修改:
然后我们再安装docker-ce并启动:
使用docker info查看信息,看到有两个warning和我们的桥接有关:
此时再用docker info查看就正常了,现在我们就能正常访问docker了:(注:此时我们找到的是docker官方仓库里的镜像)
2.2 拉取镜像
2.3 通过镜像运行容器
参数解释:
-d:打入后台
--name:给容器命名
-p:端口映射,server1的80端口映射到容器内的80端口
此时我们直接访问主机ip就能访问刚刚建立的容器: