Docker简介及安装

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Docker简介及安装

一、Docker简介


(1)云计算


  • 云计算是一种思想,而实现云计算技术,主要是虚拟化
  • 虚拟化技术有KVM、VMwareworkstation
  • 虚拟化技术的缺点:


  1. 占用资源大
  2. 占用磁盘空间大
  3. 迁移不方便,可移植性差
  4. 开关机慢


传统虚拟化依赖实体机的硬件配置,每创建一个实例都相当于安装了一次系统,并且占用的内存和硬盘空间较大,在转移数据时需要把创建的实例全部转移,效率太低


  • 在这种环境下,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使用的是容器化技术

9a48da13c6614db990a0cf1d47db6f3c.png

Docker和虚拟化技术的区别


  • 传统虚拟化技术依赖的是物理CPU和内存,依赖实体机的硬件配置,而Docker是构建在操作系统层面的、复用操作系统的容器化技术,所以Docker同样可以安装并运行在虚拟机上
  • 虚拟机中安装的操作系统是一个完整的操作系统镜像,比较复杂,而Docker比较轻量级,例如:在Docker中部署一个独立的Redis和在虚拟机中部署一个redis是相同的,在Docker中部署的应用是完全隔离的
  • 虚拟机技术是通过快照来保存状态的,而Docker引入了类似于源码管理的机制,会将容器历史版本一一记录,切换成本非常低
  • 传统的虚拟化技术在构建系统的时候非常复杂,而Docker可以通过一个简单的Dockerfile文件来构建容器,更重要的是Dockerfile可以手动编写,大大增强了灵活性,这样应用程序开发都可以通过发布Dockerfile来定义应用的环境和依赖,对于CI/CD环境十分有利

9cd2d5e9a6154265b7bf02fb50060ed7.png


可以看到很明显的区别就是虚拟化技术每台应用都需要在客户端操作系统的基础上运行,而容器技术的每个应用都是基于Docker的基础上运行的。


如果在虚拟机上的话,那么架构图就变成了这样:

5f295efa285b46569a7e9ed8887a712c.png

(3)Docker(容器)的优势特性及使用原因


  • 使用原因:


一个做好的应用容器长的就像一个装好了一组特定应用的虚拟机一样,比如我们现在想用redis,那我就找个装好了redis的容器就可以了,然后运行起来,我就能直接使用了。
那为什么不直接安装一个redis呢?肯定是可行的,但是有的时候根据每个人电脑的不同,操作系统的不同,redis的安装方法也各不相同。而且万一机器故障,应用迁移,所有当前机器上安装的应用还需要在新的机器上再全部重新安装一次。但是如果使用容器就要简单多了,你就相当于有了一个快速运行起来的虚拟机,而且方便快速移植。只要你能运行容器,redis的配置就省了。
再例如,开发使用java编写好了项目代码,在开发自己的机器上运行代码没有出错,而转移到了生产环境的服务器上后发现报错了,这就可能因为服务器和开发机器上的环境不同,比如jdk版本不一致等等原因,而使用docker后,开发直接把代码写到容器里然后生成镜像,运维只需要把镜像转移到服务器上即可,无需考虑环境的问题,这就是Docker的环境一致性
  • 优势特性:


  1. 标准化
  • 保证一致性的运行环境
  • 弹性伸缩、快速扩容
  • 方便迁移
  • CI/CD(持续集成、交付、部署)
  1. 高性能
  • 不需要进行硬件虚拟以及完整的操作系统
  1. 轻量级
  • 快速启动,秒级切换
  1. 隔离性
  • 每个容器都可以看做一个进程,每个进程之间都是隔离的


(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构建完成!!

相关实践学习
通过容器镜像仓库与容器服务快速部署spring-hello应用
本教程主要讲述如何将本地Java代码程序上传并在云端以容器化的构建、传输和运行。
Kubernetes极速入门
Kubernetes(K8S)是Google在2014年发布的一个开源项目,用于自动化容器化应用程序的部署、扩展和管理。Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。 本课程从Kubernetes的简介、功能、架构,集群的概念、工具及部署等各个方面进行了详细的讲解及展示,通过对本课程的学习,可以对Kubernetes有一个较为全面的认识,并初步掌握Kubernetes相关的安装部署及使用技巧。本课程由黑马程序员提供。   相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
14天前
|
NoSQL 关系型数据库 应用服务中间件
docker基础篇:安装tomcat
docker基础篇:安装tomcat
137 64
|
3天前
|
NoSQL 关系型数据库 Redis
《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
38 14
|
15天前
|
关系型数据库 MySQL 数据库
docker高级篇(大厂进阶):安装mysql主从复制
docker高级篇(大厂进阶):安装mysql主从复制
89 24
|
16天前
|
NoSQL 算法 Redis
docker高级篇(大厂进阶):安装redis集群
docker高级篇(大厂进阶):安装redis集群
77 24
|
15天前
|
Ubuntu Linux Docker
Ubuntu22.04上Docker的安装
通过以上详细的安装步骤和命令,您可以在Ubuntu 22.04系统上顺利安装
196 11
|
2月前
|
缓存 Linux Docker
【最新版正确姿势】Docker安装教程(简单几步即可完成)
之前的老版本Docker安装教程已经发生了变化,本文分享了Docker最新版安装教程,其他操作系统版本也可以参考官 方的其他安装版本文档。
1744 3
【最新版正确姿势】Docker安装教程(简单几步即可完成)
|
2月前
|
Java 应用服务中间件 Linux
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
本文主要讲解了Docker的安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库以及Docker容器虚拟化与传统虚拟机比较。
1073 12
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
|
2月前
|
Prometheus 监控 Cloud Native
基于Docker安装Grafana和Prometheus
Grafana 是一款用 Go 语言开发的开源数据可视化工具,支持数据监控和统计,并具备告警功能。通过 Docker 部署 Grafana 和 Prometheus,可实现系统数据的采集、展示和告警。默认登录用户名和密码均为 admin。配置 Prometheus 数据源后,可导入主机监控模板(ID 8919)进行数据展示。
113 2
|
2月前
|
Docker 容器
【赵渝强老师】使用二进制包方式安装Docker
本文介绍了在企业生产环境中无法直接访问外网时,如何使用Docker官方提供的二进制包进行Docker的离线安装。文章详细列出了从安装wget、下载Docker安装包、解压、复制命令到启动Docker服务的具体步骤,并提供了相关命令和示例图片。最后,还介绍了如何设置Docker为开机自启模式。
|
2月前
|
缓存 Ubuntu Linux
如何安装Docker
如何安装Docker
201 0

热门文章

最新文章