Docker简介及安装

简介: 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构建完成!!

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
11月前
|
关系型数据库 应用服务中间件 nginx
Docker一键安装中间件(RocketMq、Nginx、MySql、Minio、Jenkins、Redis)
本系列脚本提供RocketMQ、Nginx、MySQL、MinIO、Jenkins和Redis的Docker一键安装与配置方案,适用于快速部署微服务基础环境。
|
9月前
|
关系型数据库 数据库 PostgreSQL
docker 安装 Postgres 17.6
本文介绍如何通过Docker安装和配置PostgreSQL 17.6。内容包括拉取镜像、导出配置文件、运行容器并挂载数据与配置文件目录,以及进入容器使用psql操作数据库的完整步骤,便于持久化管理和自定义配置。
1532 3
docker 安装 Postgres 17.6
|
8月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
868 6
|
8月前
|
Java Linux 虚拟化
【Docker】(1)Docker的概述与架构,手把手带你安装Docker,云原生路上不可缺少的一门技术!
1. Docker简介 1.1 Docker是什么 为什么docker会出现? 假定您在开发一款平台项目,您的开发环境具有特定的配置。其他开发人员身处的环境配置也各有不同。 您正在开发的应用依赖于您当前的配置且还要依赖于某些配置文件。 您的企业还拥有标准化的测试和生产环境,且具有自身的配置和一系列支持文件。 **要求:**希望尽可能多在本地模拟这些环境而不产生重新创建服务器环境的开销 问题: 要如何确保应用能够在这些环境中运行和通过质量检测? 在部署过程中不出现令人头疼的版本、配置问题 无需重新编写代码和进行故障修复
697 2
|
12月前
|
存储 NoSQL MongoDB
Docker中安装MongoDB并配置数据、日志、配置文件持久化。
现在,你有了一个运行在Docker中的MongoDB,它拥有自己的小空间,对高楼大厦的崩塌视而不见(会话丢失和数据不持久化的问题)。这个MongoDB的数据、日志、配置文件都会妥妥地保存在你为它精心准备的地方,天旋地转,它也不会失去一丁点儿宝贵的记忆(即使在容器重启后)。
1502 4
|
11月前
|
Linux Docker Windows
windows docker安装报错适用于 Linux 的 Windows 子系统必须更新到最新版本才能继续。可通过运行 “wsl.exe --update” 进行更新。
适用于 Linux 的 Windows 子系统需更新至最新版本(如 wsl.2.4.11.0.x64.msi)以解决 2025 年 Windows 更新后可能出现的兼容性问题。用户可通过运行 “wsl.exe --update” 或访问提供的链接下载升级包进行更新。
4216 0
|
Linux iOS开发 Docker
MyEMS开源系统安装之Linux/macOS上的DOcker
本指南详细介绍了如何在Linux/macOS上使用Docker部署MyEMS系统。主要内容包括:前置条件(如安装Docker、npm和MySQL),以及分步骤部署各个组件(如myems-api、myems-admin、myems-modbus-tcp等)。每个步骤涵盖源代码复制、环境配置、镜像构建、容器运行及日志管理等操作,并提供了多平台构建的支持。最后,指南还说明了默认端口和登录凭据,帮助用户快速启动并访问MyEMS的管理界面和Web界面。
422 1

热门文章

最新文章