01.Docker 简介与安装
01.1.Docker简介
01.1.1、什么是Docker?
Docker
的英文翻译是“搬运工”的意思,他搬运的东西就是我们常说的集装箱 Container,Container 里面装的是任意类型的 App,我们的开发人员可以通过 Docker 将App 变成一种标准化的、可移植的、自管理的组件,我们可以在任何主流的操作系统中开发、调试和运行。有助于减少团队运行不同软件之间的冲突在相同的基础设施。
01.1.2、比较容器和虚拟机
从概念上来看Docker和我们传统的虚拟机比较类似,只是更加轻量级,更加方便使用,Docker和虚拟机最主要的区别是有以下几点:
- 虚拟化技术依赖的是物理的CPU和内存,是硬件级别的;而我们的Docker是构建在操作系统层面的,利用操作系统的容器化技术,所以Docker同样的运行在虚拟机上面。
- 我们知道虚拟机中的系统就是我们常说的操作系统镜像,比较复杂;而Docker比较轻量级,我们可以使用Docker部署一个独立的Redis,就类似于在虚拟机当中安装一个Redis应用,但是我们用Docker部署的应用是完全隔离的。
- 我们都知道传统的虚拟化技术是通过快照来保存状态的;而Docker引入了类似于源码管理的机制,将容器的快照历史版本一一记录下来,切换成本非常之低。
- 传统的虚拟化技术在构建系统的时候非常复杂,而Docker可以通过一个简单的Dockerfile文件来构建整个容器,更重要的是Dockerfile可以手动编写,这样应用程序开发人员可以通过发布Dockerfile来定义应用的环境和依赖,这样对于持续交付非常有利
01.1.3、为什么要使用容器
应用容器是什么样子呢,一个做好的应用容器长的就像一个装好了一组特定应用的虚拟机一样,比如我现在想用Redis,那我就找个装好的Redis容器就可以了,然后运行起来,我就能直接使用了。
那为什么不能直接安装一个Redis呢?肯定是可行的,但是有的时候每个人的电脑或者生产环境操作系统肯定是不可能完全一样的,在安装的时候会报各种各样的错误,万一你的机器中毒了,你的服务器挂了,你的所有服务还要重新安装,但是有了Docker或者有了容器就不一样了,你就相当于有了一个可以运行起来的虚拟机,只要你能运行容器,Redis的安装配置就省了,而且你想换电脑,换服务器,没问题,直接把镜像“端过来”,就可以使用容器里面的服务了。
01.1.4、Docker Engine
Docker Engine
是一个C/S架构
的应用程序,主要包含下面几个组件:
-
常驻后台进程
Dockerd
-
一个用来和Dockerd交互的
REST API server
-
命令行CLI接口,通过和REST API进行交互(我们经常使用的docker命令)
CLI
使用Docker REST API来控制或与dcokerd守护进程交互 通过脚本或直接CLI命令。 许多其他的码头工人使用的应用程序 底层API和CLI。
这个守护进程创建和管理码头工人 对象 ,如镜像、容器、 网络和卷。
01.1.5、Docker架构
Docker使用C/S体系结构。 Docker客户端与Docker守护进程通信,Docker守护进程负载构建,运行和分发Docker容器,Docker客户端和守护进程可以在同一个系统上运行,也可以将Docker客户端连接到远程Docker守护进程,Docker客户端和守护进程使用REST API通过UNIX套接字或网络接口进行通信。
- Docker Damon:Dockerd,用来监听Docker API的请求和管理Docker对象,比如镜像,容器,网络和Volume。
- Docker Client:Docker,docker client是我们和docker进行交互的最主要的方式方法,比如我们可以通过docker run命令来运行一个容器,然后我们的这个client会把命令发送给上面的dockerd,让他来做真正事情
- Docker Registry:用来存储docker镜像的仓库,docker hub是docker官方提供的一个公告仓库,而且docker默认也是从docker hub上面查找镜像的,当然你也可以很方便的运行一个私有仓库,当我们使用docker pull或者docker run命令时,就会从我们配置的docker镜像仓库中去拉去镜像,当使用docker push命令时,也会将我们构建的镜像推送到对应的镜像仓库中
- Images:镜像,镜像是一个只读模板,带有创建docker容器的说明,一般来说的,镜像会基于另外一些基础镜像并加上额外的自定义功能。比如,你可以构建一个基于CentOS的镜像,然后你在这个基础镜像上面安装一个Nginx服务器,这样就可以构建一个属于自己的镜像了。
- Containers:容器,容器是一个镜像的可运行的实例,可以使用 docker rest api或者cli来操作容器,容器的实质是进程,但与直觉在宿主机执行的进程不同,容器进程运行于输入自己的独立命名空间。因此容器可以拥有自己的root文件系统,自己的网络环境,自己的进程空间,甚至自己的用户ID空间。容器内的进程是运行在一个隔离的环境里。使用起来,就好像是一个独立于宿主机的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更方便
- 底层技术支持:
Namespaces(做隔离)
、CGroups(做资源限制)
、UnionFS(镜像和容器的分层)
可以去看下docker个底层架构分析
01.2.安装Docker
参考文档:https://docs.docker.com/install/
01.2.1、卸载旧版本
$ 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
01.2.2、安装Docker CE
1、配置安装源
安装所需要的包
$ sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
# 设置yum源
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
# 请注意 :从码头工人17.06开始,也推到稳定版本 的 边缘 和 测试 存储库
# 我们需要安装一个稳定的版本,这是设置选择哪个存储库
$ sudo yum-config-manager --enable docker-ce-edge
$ sudo yum-config-manager --enable docker-ce-test
# 禁用边缘版本
$ sudo yum-config-manager --disable docker-ce-edge
2、安装Docker CE
安装最新版本Docker CE或安装一个特定的版本:
$ sudo yum install docker-ce
# 查看所有的版本
$ yum list docker-ce --showduplicates | sort -r
docker-ce.x86_64 18.03.0.ce-1.el7.centos docker-ce-stable
# 安装指定的版本
$ sudo yum install docker-ce-<VERSION STRING>
01.2.3、启动docker
$ sudo systemctl start docker
$ 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:05:26 2018
OS/Arch: darwin/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:13:46 2018
OS/Arch: linux/amd64
Experimental: true