Docker概念通讲

news2024/11/19 13:36:45

目录

  1. 什么是Docker?

  2. Docker的应用场景有哪些?

  3. Docker的优点有哪些?

  4. Docker与虚拟机的区别是什么?

  5. Docker的三大核心是什么?

  6. 如何快速安装Docker?

  7. 如何修改Docker的存储位置?

  8. Docker镜像常用管理有哪些?

  9. 如何创建Docker容器?

  10. Docker在后台的标准运行过程是什么?

  11. Docker网络模式有哪些?

  12. 什么是Docker的数据卷

  13. 如何搭建Docker私有仓库

  14. Docker如何迁移备份?

  15. Docker如何部署MySQL?

前言

本文总结了Docker常见的问题和坑,采用问答的形式,分享给大家

1.什么是Docker?

  • Docker 是一个开源的应用容器引擎,基于go 语言开发并遵循了apache2.0 协议开源

  • Docker 是在Linux 容器里运行应用的开源工具,是一种轻量级的“虚拟机”

  • Docker 的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的,可移植的,自给自足的容器

也可以这样形象的比喻:

Docker 的Logo设计为蓝色鲸鱼,拖着许多集装箱,鲸鱼可以看作为宿主机,集装箱可以理解为相互隔离的容器,每个集装箱中都包含自己的应用程序。

2.Docker的应用场景有哪些?

  • Web 应用的自动化打包和发布。

  • 自动化测试和持续集成、发布。

  • 在服务型环境中部署和调整数据库或其他的后台应用。

  • 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。

在这里我重点介绍下Docker作为内部开发环境的场景

在容器技术出现之前,公司往往是通过为每个开发人员提供一台或者多台虚拟机来充当开发测试环境。开发测试环境一般负载较低,大量的系统资源都被浪费在虚拟机本身的进程上了。

Docker容器没有任何CPU和内存上的额外开销,很适合用来提供公司内部的开发测试环境。而且由于docker镜像可以很方便的在公司内部分享,这对开发环境的规范性也有极大的帮助。

如果要把容器作为开发机使用,需要解决的是远程登录容器和容器内进程管理问题。虽然docker的初衷是为“微服务”架构设计的,但根据我们的实际使用经验,在docker内运行多个程序,甚至sshd或者upstart也是可行的。

3.Docker的优点有哪些?

容器化越来越受欢迎,Docker的容器有点总结如下:

  • 灵活:即使是最复杂的应用也可以集装箱化。

  • 轻量级:容器利用并共享主机内核。

  • 可互换:可以即时部署更新和升级。

  • 便携式:可以在本地构建,部署到云,并在任何地方运行。

  • 可扩展:可以增加并白动分发容器副本。

  • 可堆叠:可以垂直和即时堆叠服务。

图片

Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。

4.Docker与虚拟机的区别是什么?

虚拟机通过添加Hypervisor层(虚拟化中间层),虚拟出网卡、内存、CPU等虚拟硬件,再在其上建立虚拟机,每个虚拟机都有自己的系统内核。而Docker容器则是通过隔离(namesapce)的方式,将文件系统、进程、设备、网络等资源进行隔离,再对权限、CPU资源等进行控制(cgroup),最终让容器之间互不影响,容器无法影响宿主机。

与虚拟机相比,容器资源损耗要少。同样的宿主机下,能够建立容器的数量要比虚拟机多

但是,虚拟机的安全性要比容器稍好,而docker容器与宿主机共享内核、文件系统等资源,更有可能对其他容器、宿主机产生影响。

图片

5.Docker的三大核心是什么?

镜像

Docker的镜像是创建容器的基础,类似虚拟机的快照,可以理解为一个面向Docker容器引擎的只读模板。

通过镜像启动一个容器,一个镜像是一个可执行的包,其中包括运行应用程序所需要的所有内容包含代码,运行时间,库、环境变量、和配置文件。

Docker镜像也是一个压缩包,只是这个压缩包不只是可执行文件,环境部署脚本,它还包含了完整的操作系统。因为大部分的镜像都是基于某个操作系统来构建,所以很轻松的就可以构建本地和远端一样的环境,这也是Docker镜像的精髓。

容器

Docker的容器是从镜像创建的运行实例,它可以被启动、停止和删除。所创建的每一个容器都是相互隔离、互不可见,以保证平台的安全性。可以把容器看做是一个简易版的linux环境(包括root用户权限、镜像空间、用户空间和网络空间等)和运行在其中的应用程序。

仓库

仓库注册服务器上往往存放着多个仓库,每个仓库中包含了多个镜像,每个镜像有不同标签(tag)。

仓库分为公开仓库(Public)和私有仓库(Private)两种形式。

最大的公开仓库是 Docker Hub:https://hub.docker.com,存放了数量庞大的镜像供用户下载。

国内的公开仓库包括阿里云 、网易云等。

6.如何快速安装Docker?

执行以下安装命令去安装依赖包

yum install -y yum-utils device-mapper-persistent-data lvm2sudo yum-config-manager–add-repohttps://download.docker.com/linux/centos/docker-ce.repo[root@centos7 ~] yum -y install docker-ce docker-ce-cli containerd.io[root@centos7 ~]# docker ps --查看docker

图片

​​​​​​​
[root@centos7 ~]# systemctl enable docker[root@centos7 ~]# systemctl start docker[root@centos7 ~]# systemctl status docker[root@centos7 ~]# docker ps --查看容器[root@centos7 ~]# docker version --查看版本[root@centos7 ~]# docker info --查看版本

7.如何修改Docker的存储位置?

默认情况下 Docker的存放位置为:/var/lib/docker

可以通过命令查看具体位置:docker info | grep “Docker Root Dir”

修改到其它目录

首先停掉 Docker 服务:

systemctl stop docker

然后移动整个/var/lib/docker 目录到目的路径​​​​​​​

mkdir -p /root/data/dockermv /var/lib/docker /root/data/dockerln -s /root/data/docker /var/lib/docker --快捷方式

8.Docker镜像常用管理有哪些?

快速检索镜像

格式:docker search 关键字

获取镜像

格式:docker   pull   仓库名称[:标签] 如果下载镜像时不指定标签,则默认会下载仓库中最新版本的镜像,即选择标签为 latest 标签

查看镜像信息

镜像下载后默认存放在 /var/lib/docker

  • REPOSITORY: 镜像所属仓库

  • TAG: 镜像的标签信息,标记同一个仓库中的不同镜像

  • IMAGE ID :镜像的唯一ID号,唯一标识一个镜像

  • CREATED: 镜像创建时间

  • SIZE: 镜像大小

图片

获取镜像的详细信息

格式:docker   inspect   镜像ID号

镜像ID 号可以不用打全。

图片

为本地镜像添加新的标签

格式:docker   tag  名称:[ 标签]

删除镜像

格式1:docker   rmi   仓库名称:标签

当一个镜像有多个标签时,只是删除其中指定的标签

格式2: docker   rmi  镜像ID  [-f]

如果该镜像已经被容器使用,正确的做法是先删除依赖该镜像的所有容器,再去删除镜像

将镜像保存为本地文件

格式:docker   save   -o  存储文件名   存储的镜像​​​​​​​

[root@localhost ~]# docker save -o /opt/nginx.tar nginx:latest#将本地镜像传给另一台主机[root@localhost ~]# scp /opt/nginx.tar 192.168.1.54:/opt

9.如何创建Docker容器?​​​​​​​

#docker images   --镜像docker run -d --name centos7.8 -h centos7.8 \-p 220:22 -p 3387:3389 \--privileged=true \centos:7.8.2003 /usr/sbin/init
#我想拥有一个 linux 8.2 的环境docker run -d --name centos8.2 -h centos8.2 \-p 230:22 -p 3386:3389 \--privileged=true \daocloud.io/library/centos:8.2.2004 init
# 进入容器docker exec -it centos7.8bashdocker exec -it centos8.2 bashcat /etc/redhat-release    --查看系统版本

10.Docker在后台的标准运行过程是什么?

当利用 docker run 来创建容器时, Docker 在后台的标准运行过程是:

  • 检查本地是否存在指定的镜像。当镜像不存在时,会从公有仓库下载;

  • 利用镜像创建并启动一个容器;

  • 分配一个文件系统给容器,在只读的镜像层外面挂载一层可读写层;

  • 从宿主主机配置的网桥接口中桥接一个虚拟机接口到容器中;

  • 分配一个地址池中的 IP 地址给容器;

  • 执行用户指定的应用程序,执行完毕后容器被终止运行。

11.Docker网络模式有哪些?

host模式

host 模式 :使用 --net=host 指定

相当于VMware 中的桥接模式,与宿主机在同一个网络中,但是没有独立IP地址

Docker 使用了Linux 的Namespace 技术来进行资源隔离,如PID Namespace隔离进程,Mount Namespace隔离文件系统,Network Namespace 隔离网络等。

一个Network Namespace 提供了一份独立的网络环境,包括网卡,路由,iptable 规则等都与其他Network Namespace 隔离。

一个Docker 容器一般会分配一个独立的Network Namespace

但是如果启动容器的时候使用host 模式,那么这个容器将不会获得一个独立的Network Namespace ,而是和宿主机共用一个Network Namespace 。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口.此时容器不再拥有隔离的、独立的网络栈。不拥有所有端口资源

图片

container模式

container模式:使用–net=contatiner:NAME_or_ID 指定

这个模式指定新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP,端口范围等。 可以在一定程度上节省网络资源,容器内部依然不会拥有所有端口。

同样,两个容器除了网络方面,其他的如文件系统,进程列表等还是隔离的。

两个容器的进程可以通过lo网卡设备通信

图片

none 模式

none模式:使用 --net=none指定

使用none 模式,docker 容器有自己的network Namespace ,但是并不为Docker 容器进行任何网络配置。也就是说,这个Docker 容器没有网卡,ip, 路由等信息。

这种网络模式下,容器只有lo 回环网络,没有其他网卡。

这种类型没有办法联网,但是封闭的网络能很好的保证容器的安全性

该容器将完全独立于网络,用户可以根据需要为容器添加网卡。此模式拥有所有端口。(none网络模式配置网络)特殊情况下才会用到,一般不用

bridge 模式

相当于Vmware中的 nat 模式,容器使用独立network Namespace,并连接到docker0虚拟网卡。通过docker0网桥以及iptables nat表配置与宿主机通信,此模式会为每一个容器分配Network Namespace、设置IP等,并将一个主机上的 Docker 容器连接到一个虚拟网桥上。

当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。

从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。在主机上创建一对虚拟网卡veth pair设备。veth设备总是成对出现的,它们组成了一个数据的通道,数据从一个设备进入,就会从另一个设备出来。因此,veth设备常用来连接两个网络设备。

Docker将veth pair 设备的一端放在新创建的容器中,并命名为eth0(容器的网卡),另一端放在主机中, 以veth*这样类似的名字命名,并将这个网络设备加入到docker0网桥中。可以通过 brctl show 命令查看。

容器之间通过veth pair进行访问

使用 docker run -p 时,docker实际是在iptables做了DNAT规则,实现端口转发功能。

可以使用iptables -t nat -vnL 查看。

图片

12.什么是Docker的数据卷

数据卷是一个供容器使用的特殊目录,位于容器中。可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并且更新数据不会影响镜像,从而实现数据在宿主机与容器之间的迁移。数据卷的使用类似于Linux下对目录进行的mount操作。

如果需要在容器之间共享一些数据,最简单的方法就是使用数据卷容器。数据卷容器是一个普通的容器,专门提供数据卷给其他容器挂载使用。

容器互联是通过容器的名称在容器间建立一条专门的网络通信隧道。简单点说,就是会在源容器和接收容器之间建立一条隧道,接收容器可以看到源容器指定的信息

13.如何搭建Docker私有仓库

1.拉取私有仓库镜像​​​​​​​

[root@jeames ~]# docker pull registryUsing default tag: latest

2.启动私有仓库容器​​​​​​​

docker run -di --name registry -p 5000:5000 registrydocker update --restart=always registry   --开机自启动docker ps -a  --format "table {{.ID}}\t{{.Names}}\t{{.Status}}"

访问网址:http://192.168.1.54:5000/v2/_catalog

3.设置信任​​​​​​​

[root@jeames ~]# vi /etc/docker/daemon.json{"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"],"insecure-registries":["192.168.1.54:5000"]}
[root@jeames ~]# systemctl restart docker   --重启docker

4.上传本地镜像​​​​​​​

[root@jeames ~]# docker images[root@jeames ~]# docker tag postgres:11 192.168.1.54:5000/postgres
[root@jeames ~]# docker push 192.168.1.54:5000/postgres

5.重新拉取镜像​​​​​​​

[root@jeames ~]# docker rmi 192.168.1.54:5000/postgres[root@jeames ~]# docker images[root@jeames ~]# docker pull 192.168.1.54:5000/postgres

14.Docker如何迁移备份?

1.容器保存为镜像​​​​​​​

[root@jeames ~]# docker images[root@jeames ~]# docker ps -adocker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Status}}"[root@jeames ~]# docker commit redis myredis##使用新的镜像创建容器docker run -di --name myredis myredis

2.镜像的备份

[root@jeames ~]# docker save -o myredis.tar myredis

默认放到当前目录​​​​​​​

[root@jeames ~]# ll[root@jeames ~]# pwd

3.恢复过程

##删除容器docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}"docker stop myredisdocker rm myredis##删除镜像docker imagesdocker rmi myredis[root@jeames ~]# docker load -i myredis.tar

15. Docker如何部署MySQL?

1.下载镜像
https://hub.docker.com/ 中搜索mysql[root@jeames ~]# docker pull mysql:5.7.30[root@jeames ~]# docker pull mysql:8.0.20
2.安装部署

2.1 创建容器

mkdir -p /usr/local/mysql5730/mkdir -p /usr/local/mysql8020/
docker run -d --name mysql5730 -h mysql5730 \-p 3309:3306 \-v /usr/local/mysql5730/conf:/etc/mysql/conf.d \-e MYSQL_ROOT_PASSWORD=root -e TZ=Asia/Shanghai \mysql:5.7.30
docker run -d --name mysql8020 -h mysql8020 \-p 3310:3306 \-v /usr/local/mysql8020/conf:/etc/mysql/conf.d \-e MYSQL_ROOT_PASSWORD=root -e TZ=Asia/Shanghai \mysql:8.0.20

2.2 访问Mysql

##登陆容器docker exec -it mysql5730 bashmysql -uroot -prootmysql> select user,host from mysql.user
##远程访问mysql -uroot -proot -h192.168.59.220 -P3309

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1011353.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

敏捷管理的4价值观12准则

一、敏捷管理的的4个价值观 个体和交互胜过流程和工具可工作的软件胜过面面俱到的文档客户合作胜过合同谈判响应变化胜过遵循计划 二、敏捷管理的12条准则 上篇解读了对于敏捷价值观的理解,这篇来聊一聊敏捷的12指导准则。关于敏捷宣言的12条准则的原始描述&…

Dokcer搭建Apache Guacamole堡垒机

一、什么是堡垒机 “堡垒机” 这个词通常指的是 “堡垒机器”(Bastion Host)的简称。堡垒机是一种计算机系统或网络设备,用于增强计算机网络的安全性。它在网络中充当一个重要的安全关口,通过限制对内部网络的访问,帮…

LeetCode(力扣)860. 柠檬水找零Python

LeetCode860. 柠檬水找零 题目链接代码 题目链接 https://leetcode.cn/problems/lemonade-change/ 代码 class Solution:def lemonadeChange(self, bills: List[int]) -> bool:five 0ten 0twenty 0for i in range(len(bills)):if bills[i] 5:five 1if bills[i] 10…

pdf怎么压缩的小一点?pdf文件压缩方法汇总

在日常生活中,我们常常需要处理大量的PDF文件。有时候,这些PDF文件可能因为内容丰富、结构复杂而体积庞大,给我们的存储和传输带来了不便。那么,如何将这些PDF文件压缩得小一点,以便更方便地使用呢? 一、嗨…

Git(6)——GitHub

目录 一、简介 二、概要 三、注册 ​四、创建仓库 五、推送本地代码 六、拉取远端代码 一、简介 在Git(5)中,我们已经对Git分支的概念和用法有了一定了解,对于在本地进行代码版本管理,其实当前所学的东西基本已经…

【个人博客系统 × Redis】“最后的升级” · 连接Redis · Redis的基本使用

【JavaEE】进阶 个人博客系统(7) 文章目录 【JavaEE】进阶 个人博客系统(7)1. linux安装Redis1.1 通过yum商店下载Redis1.2 启动Redis1.3 操作Redis 2. Redis的基本使用(关键字大小写不区分)2.1 set2.2 g…

Lombok中的@Builder注解的使用

Lombok中的Builder注解的使用 作用 Builder注解的作用主要是用来生成对象,并且可以为对象链式赋值。 引入依赖 因为Builder注解是lombok中的东西,所以第一步我们需要引入lombok的依赖,如下图: 第二步给实体类加上Builder注解…

每日一博 - Token Based Authentication VS HMAC Authentication 实现web安全

文章目录 概念HMAC工作原理 概念 Token Based Authentication和HMAC(Hash-based Message Authentication Code)Authentication都是用于身份验证和数据完整性验证的安全机制,但它们有不同的工作方式和适用场景。以下是它们的主要区别和比较&a…

idea把项目打成jar包步骤详解

最近产品需要预研一个小功能,开始后在本地开发测试好之后,需要打成jar提供出去,今天弄完了,决定把这个步骤记录下来,便于以后轻车熟路。 打成jar要有mian方法的入口,所以我们在代码中需要定义一个main方法&…

学Python的漫画漫步进阶 -- 第七步

学Python的漫画漫步进阶 -- 第七步 七、字符串7.1 字符串的表示方式7.1.1 普通字符串7.1.2 原始字符串7.1.3 长字符串 7.2 字符串与数字的相互转换7.2.1 将字符串转换为数字7.2.2 将数字转换为字符串 7.3 格式化字符串7.3.1 使用占位符7.3.2 格式化控制符 7.4 操作字符串7.4.1 …

四、数学建模之图与网络模型

1.定义 2.例题及软件代码求解 一、定义 1.图和网络是相关概念 (1)图(Graph):图是数学和计算机科学中的一个抽象概念,它由一组节点(顶点)和连接这些节点的边组成。图可以是有向的&…

VSCode配置c/c++环境 MinGW-W64 下载、安装与配置(支持最新版的GCC,目前 GCC 13.2.0) 彻底删除vscode(包括插件及配置!)

目录 一、简介 二、下载 1 旧版安装(8.1.0) 从 sourceforge.net 下载 2 新版安装(本次采用较新版本~~~) 从 github 下载 从 镜像站点 下载 自己编译 三、安装与配置 1. 在线安装(这里仅作参考了解) 2. 离线安装&…

JavaScript 知识扫盲

JavaScript 知识扫盲 写在前面一、JavaScript 写入形式二、常用输入输出三、JS 是动态类型语言四、运算符五、数组1、数组创建2、获取和修改数组元素3、新增元素4、删除元素 六、函数七、对象1、对象的创建2、属性方法的使用 八、JavaScript 和 Java 对比九、事件1、常见事件2、…

【MySQL系列】MySQL数据库索引详解

目录 一、为什么要用索引? 二、什么是索引? 三、MySQL索引使用场景 四、索引的原理 五、MySQL的存储引擎 六、索引的数据结构 七、索引如何使用 八、实际使用示例 九、优缺点、使用建议和注意事项 十、为什么Mysql不选择Hash索引? …

k8s集群中流水线部署微服务

k8s集群中流水线发布微服务 一、流水线部署微服务部署流程 二、微服务发布流程 pipeline {agent {node {label maven}}parameters {string(name: PROJECT_VERSION, defaultValue: v1.0, description: )string(name: PROJECT_NAME, defaultValue: , description: )}environment…

json转换

json转html {"DS": [{"PROVINCE": "陕西省","ADMIN_CODE_CHN": "610600","STATION_ID_C": "53845","LON": "109.4497","V31001_S": 10,"V31001_X": 0},{&quo…

【前端知识】+new Date()是什么?

一、new Date()的使用 new Date()是JavaScript中用于获取当前日期和时间的内置函数。它返回一个表示当前日期和时间的Date对象。如下所示: 通过Date.prototype可以查看Date对象的所有方法: constructor: ƒ Date() getDate: ƒ getDate() getDay: ƒ …

学习笔记|IO中断|中断号大于31|中断优先级|简易中央门禁|STC32G单片机视频开发教程(冲哥)|第十六集:IO中断

文章目录 1.什么是IO中断?2.IO中断的用法13.1.3 端口中断模式配置寄存器(PxIM0,PxIM1)13.1.1 端口中断使能寄存器(PxINTE)13.1.2端口中断标志寄存器(PxINTF)13.2 范例程序3.1.编写P35口的IO中断实现: 3.中断优先级的设置3.1 为什么会出现数码…

C++ 算法学习 之 vector assign

参考c官方手册 vector::assign是C标准模板库中的一个函数&#xff0c;它的主要功能是给vector容器重新赋值。具体来说&#xff0c;vector::assign函数会删除vector中的所有元素&#xff0c;并根据用户提供的参数重新填充。 这个函数有三种形式&#xff1a; template <cla…

基于SpringBoot蜗牛兼职网的设计与实现【附PPT|万字文档(LW)和搭建文档】

主要功能 前台界面&#xff1a; ①首页、兼职信息推荐、查看更多等 ②职位申请、申请日期、上传简历、点击下载简历、留言反馈等 ③个人中心、上传图片、更新信息等 后台登录&#xff1a; ①用户登录&#xff1a; 个人中心、修改密码、个人信息、职位申请管理 ②企业登录&…