Docker简介及安装
Posted 礁之
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker简介及安装相关的知识,希望对你有一定的参考价值。
文章目录
一、Docker简介
(1)云计算
- 云计算是一种思想,而实现云计算技术,主要是虚拟化
- 虚拟化技术有KVM、VMwareworkstation
- 虚拟化技术的缺点:
- 占用资源大
- 占用磁盘空间大
- 迁移不方便,可移植性差
- 开关机慢
传统虚拟化依赖实体机的硬件配置,每创建一个实例都相当于安装了一次系统,并且占用的内存和硬盘空间较大,在转移数据时需要把创建的实例全部转移,效率太低
- 在这种环境下,Docker使用的容器化技术的特性正好补上了虚拟化技术的缺点
(2)Docker简介
- Docker版本
docker-io:docker早期版本,支持到1.13,在centos 6.x系统上只能使用docker-io
docker-ce:当前docker发行版本 #社区版
docker-ee:docker商业版本 #收费版
- Docker的由来
Docker的英文翻译是“码头工人”,即搬运工,它搬运的东西就是我们常说的集装箱Container,Container里面装的是任意类型的App。我们的开发人员可以通过Docker将App变成一种标准的、可移植的、自管理的组件,我们可以在任何主流的操作系统中开发、调试和运行。
Docker使用的是容器化技术
- Docker和虚拟化技术的区别
- 传统虚拟化技术依赖的是物理CPU和内存,依赖实体机的硬件配置,而Docker是构建在操作系统层面的、复用操作系统的容器化技术,所以Docker同样可以安装并运行在虚拟机上
- 虚拟机中安装的操作系统是一个完整的操作系统镜像,比较复杂,而Docker比较轻量级,例如:在Docker中部署一个独立的Redis和在虚拟机中部署一个redis是相同的,在Docker中部署的应用是完全隔离的
- 虚拟机技术是通过快照来保存状态的,而Docker引入了类似于源码管理的机制,会将容器历史版本一一记录,切换成本非常低
- 传统的虚拟化技术在构建系统的时候非常复杂,而Docker可以通过一个简单的Dockerfile文件来构建容器,更重要的是Dockerfile可以手动编写,大大增强了灵活性,这样应用程序开发都可以通过发布Dockerfile来定义应用的环境和依赖,对于CI/CD环境十分有利
可以看到很明显的区别就是虚拟化技术每台应用都需要在客户端操作系统的基础上运行,而容器技术的每个应用都是基于Docker的基础上运行的。
如果在虚拟机上的话,那么架构图就变成了这样:
(3)Docker(容器)的优势特性及使用原因
- 使用原因:
一个做好的应用容器长的就像一个装好了一组特定应用的虚拟机一样,比如我们现在想用redis,那我就找个装好了redis的容器就可以了,然后运行起来,我就能直接使用了。
那为什么不直接安装一个redis呢?肯定是可行的,但是有的时候根据每个人电脑的不同,操作系统的不同,redis的安装方法也各不相同。而且万一机器故障,应用迁移,所有当前机器上安装的应用还需要在新的机器上再全部重新安装一次。但是如果使用容器就要简单多了,你就相当于有了一个快速运行起来的虚拟机,而且方便快速移植。只要你能运行容器,redis的配置就省了。
再例如,开发使用java编写好了项目代码,在开发自己的机器上运行代码没有出错,而转移到了生产环境的服务器上后发现报错了,这就可能因为服务器和开发机器上的环境不同,比如jdk版本不一致等等原因,而使用docker后,开发直接把代码写到容器里然后生成镜像,运维只需要把镜像转移到服务器上即可,无需考虑环境的问题,这就是Docker的环境一致性
- 优势特性:
- 标准化
- 保证一致性的运行环境
- 弹性伸缩、快速扩容
- 方便迁移
- CI/CD(持续集成、交付、部署)
- 高性能
- 不需要进行硬件虚拟以及完整的操作系统
- 轻量级
- 快速启动,秒级切换
- 隔离性
- 每个容器都可以看做一个进程,每个进程之间都是隔离的
(4)Docker引擎
Docker引擎是一个C/S架构的应用程序
- 常驻后台进程Dockerd
- 一个用来与Dockerd交互的rest api server
- 命令行cli接口,cli通过与rest api server进行交互(即docker命令)
用户通过cli接口与rest api进行交互,从而操作Dockerd
(5)Docker架构说明
-
Docker使用C/S架构。Docker客户端与Docker守护进程通信,Docker守护进程负责构建、运行和分发Docker容器。
-
Docker客户端和守护进程可以在同一个系统上运行,也可以将Docker客户端远程连接到Docker守护进程。
-
Docker客户端和守护进程使用rest api然后通过unix套接字或网络接口进行通信
-
Docker核心组件以及元素说明:
Docker Daemon: 也就是Dockerd,用来监听Docker Api的请求和管理Docker对象,比如镜像、容器、网络和Volume。Docker Daemon就是DockerC/S架构中的服务端
Docker Client: Docker Client
(docker 命令)
是我们和Docker进行交互的最主要的方式,例如可以使用docker run命令来运行一个容器,然后Docker Client会把命令发送到Docker Daemon,由Docker Daemon负责处理。Docker Client就是DockerC/S架构中的客户端
Docker Registry: 这是用来存储Docker镜像的仓库,这是本地的进行仓库,Docker官网会提供一个名叫Docker Hub的公共仓库,默认下载镜像都是从公共仓库下载,也可以自定义仓库源。在使用docker pull或者docker run 时,就会从配置的docker镜像仓库去拉群镜像,使用docker push可以将本地构建的镜像推送到对应的镜像仓库中
Images: 镜像,镜像是一个可读不可写的模板,带有创建Docker容器的说明。一般来说,镜像会基于另外的一些基础镜像构建并加上一些额外的自定义功能。比如,可以先构建一个基于centos的镜像,然后在这个镜像上安装nginx,这样这个镜像可以是Nginx的镜像
Containers: 容器,容器是一个镜像的运行实例。可以使用Docker rest api或者cli来操作容器。容器的实质是进程,可以把每个容器看做一个个进程,但是与在真实机器运行的进程不同,Docker创建的每个容器进程都是相互隔离的,都有属于自己独立的命名空间。因此容器可以拥有自己的root文件系统,自己的网络配置,自己的pid进程号等。
客户端通过docker命令去创建容器,输入命令后Docker daemon会进行处理,例如输入docker pull下载镜像,Docker daemon会到指定的镜像仓库去下载镜像,下载后会在本地仓库Images保存一份。或者输入docker run运行容器后,Docker daemon收到命令后进行处理,在本地的镜像仓库中选取指定的镜像然后生成容器Containers
二、安装Docker
(1)实验环境
系统 | 主机名称 | ip地址 | 安装的软件 |
---|---|---|---|
Centos7.4 | docker | 192.168.100.202 桥接网卡 | docker |
阿里云镜像源: https://developer.aliyun.com/mirror
(2)实验步骤
******(1)先做基础配置
[root@Centos7 ~]# hostnamectl set-hostname docker
[root@Centos7 ~]# su
[root@docker ~]# systemctl stop firewalld
[root@docker ~]# setenforce 0
setenforce: SELinux is disabled
[root@docker ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
mount: /dev/sr0 已经挂载或 /mnt 忙
/dev/sr0 已经挂载到 /mnt 上
******(2)安装Docker
[root@docker ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 #先安装依赖
。。。。。。
完毕!
[root@docker ~]# ll #上传docker的yum源仓库
总用量 8
-rw-------. 1 root root 1264 1月 12 2021 anaconda-ks.cfg
drwxr-xr-x 3 root root 4096 7月 17 14:26 docker
[root@docker ~]# vim /etc/yum.repos.d/centos.repo #修改yum配置文件
[aaa]
name=aaa
baseurl=file:///mnt
enabled=1
gpgcheck=0
[docker]
name=docker
baseurl=file:///root/docker
enabled=1
gpgcheck=0
#保存退出
[root@docker ~]# yum -y install docker-ce #安装Docker
。。。。。。
完毕!
[root@docker ~]# systemctl start docker #开启docker
[root@docker ~]# systemctl status docker #查看docker状态
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
Active: active (running) since 六 2021-07-17 14:28:35 CST; 3s ago
Docs: https://docs.docker.com
Main PID: 1417 (dockerd)
Memory: 29.5M
CGroup: /system.slice/docker.service
└─1417 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
7月 17 14:28:34 docker dockerd[1417]: time="2021-07-17T14:28:34.879334731+08:00" level=info msg="pickfirstBalancer: HandleSubC...le=grpc
7月 17 14:28:34 docker dockerd[1417]: time="2021-07-17T14:28:34.879386382+08:00" level=info msg="pickfirstBalancer: HandleSubC...le=grpc
7月 17 14:28:34 docker dockerd[1417]: time="2021-07-17T14:28:34.882912565+08:00" level=info msg="Graph migration to content-ad...econds"
7月 17 14:28:34 docker dockerd[1417]: time="2021-07-17T14:28:34.883198516+08:00" level=info msg="Loading containers: start."
7月 17 14:28:35 docker dockerd[1417]: time="2021-07-17T14:28:35.053779844+08:00" level=info msg="Default bridge (docker0) is a...ddress"
7月 17 14:28:35 docker dockerd[1417]: time="2021-07-17T14:28:35.099104268+08:00" level=info msg="Loading containers: done."
7月 17 14:28:35 docker dockerd[1417]: time="2021-07-17T14:28:35.118106150+08:00" level=info msg="Docker daemon" commit=481bc77...18.09.6
7月 17 14:28:35 docker dockerd[1417]: time="2021-07-17T14:28:35.118156599+08:00" level=info msg="Daemon has completed initialization"
7月 17 14:28:35 docker dockerd[1417]: time="2021-07-17T14:28:35.155550929+08:00" level=info msg="API listen on /var/run/docker.sock"
7月 17 14:28:35 docker systemd[1]: Started Docker Application Container Engine.
Hint: Some lines were ellipsized, use -l to show in full.
******(3)修改Docker的镜像仓库为国内的阿里镜像仓库,下载镜像时可以加快速度
[root@docker ~]# mkdir -p /etc/docker/
[root@docker ~]# vim /etc/docker/daemon.json
"registry-mirrors": ["https://w4uieobw.mirror.aliyuncs.com"]
#保存退出
[root@docker ~]# systemctl restart docker #重启docker使配置生效
[root@docker ~]# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
Active: active (running) since 六 2021-07-17 14:31:10 CST; 3s ago
Docs: https://docs.docker.com
Main PID: 1600 (dockerd)
Memory: 28.8M
CGroup: /system.slice/docker.service
└─1600 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
7月 17 14:31:10 docker dockerd[1600]: time="2021-07-17T14:31:10.850885264+08:00" level=info msg="pickfirstBalancer: HandleSubC...le=grpc
7月 17 14:31:10 docker dockerd[1600]: time="2021-07-17T14:31:10.850925696+08:00" level=info msg="pickfirstBalancer: HandleSubC...le=grpc
7月 17 14:31:10 docker dockerd[1600]: time="2021-07-17T14:31:10.853396069+08:00" level=info msg="Graph migration to content-ad...econds"
7月 17 14:31:10 docker dockerd[1600]: time="2021-07-17T14:31:10.853826339+08:00" level=info msg="Loading containers: start."
7月 17 14:31:10 docker dockerd[1600]: time="2021-07-17T14:31:10.902249947+08:00" level=info msg="Default bridge (docker0) is a...ddress"
7月 17 14:31:10 docker dockerd[1600]: time="2021-07-17T14:31:10.919735112+08:00" level=info msg="Loading containers: done."
7月 17 14:31:10 docker dockerd[1600]: time="2021-07-17T14:31:10.930111198+08:00" level=info msg="Docker daemon" commit=481bc77...18.09.6
7月 17 14:31:10 docker dockerd[1600]: time="2021-07-17T14:31:10.930164743+08:00" level=info msg="Daemon has completed initialization"
7月 17 14:31:10 docker systemd[1]: Started Docker Application Container Engine.
7月 17 14:31:10 docker dockerd[1600]: time="2021-07-17T14:31:10.939200881+08:00" level=info msg="API listen on /var/run/docker.sock"
Hint: Some lines were ellipsized, use -l to show in full.
Docker构建完成!!
以上是关于Docker简介及安装的主要内容,如果未能解决你的问题,请参考以下文章