Docker概念通讲

目录

  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.rhkb.cn/news/134732.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

shell脚本学习教程(一)

shell脚本学习 一、什么是 Shell?1. shell概述2. Shell 的分类3. 第一个shell脚本4. 多命令执行 二、Shell 变量3.1 变量的命名规则3.2 变量的特殊符号3.3 用户自定义变量3.4 环境变量3.5 位置参数变量3.6 预定义变量3.7 接受键盘输入 三、Shell 运算符3.1 算术运算…

解决 SQLyog 连接 MySQL8.0+ 报错:错误号码2058

文章目录 一、问题现象二、原因分析三、解决方案1. 方案1:更新SQLyog版本2. 方案2:修改用户的授权插件3. 方案3:修复my.cnf 或 my.ini配置文件 四、最后总结 本文将总结如何解决 SQLyog 连接 MySQL8.0 时报错:错误号码2058 一、问…

管理类联考——数学——汇总篇——知识点突破——代数——等差数列——最值

等差数列 S n S_n Sn​的最值问题 1.等差数列前n项和 S n S_n Sn​有最值的条件 &#xff08;1&#xff09;若 a 1 < 0 &#xff0c; d > 0 a_1<0&#xff0c;d>0 a1​<0&#xff0c;d>0时&#xff0c; S n S_n Sn​有最小值。 &#xff08;2&#xff09;若…

Linux网络基础

一.协议的概念 1.1协议的概念 什么是协议 从应用的角度出发&#xff0c;协议可理解为“规则”&#xff0c;是数据传输和数据的解释的规则。假设&#xff0c;A、B双方欲传输文件。规定: 第一次&#xff0c;传输文件名&#xff0c;接收方接收到文件名&#xff0c;应答OK给传输方…

LeetCode(力扣)134. 加油站Python

LeetCode134. 加油站 题目链接代码 题目链接 https://leetcode.cn/problems/gas-station/description/ 代码 class Solution:def canCompleteCircuit(self, gas: List[int], cost: List[int]) -> int:cursum 0minfuel float(inf)for i in range(len(gas)):rest gas[i…

[EI复现】基于主从博弈的新型城镇配电系统产消者竞价策略(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

数据库连接工具Chat2DB介绍

1、Chat2DB介绍 Chat2DB 是一款有开源免费的多数据库客户端工具&#xff0c;支持windows、mac本地安装&#xff0c;也支持服务器端部署&#xff0c;web网页访问。和传统的数据库客户端软件Navicat、DBeaver 相比Chat2DB集成了AIGC的能力&#xff0c;能够将自然语言转换为SQL&a…

vue+element-ui el-descriptions 详情渲染组件二次封装(Vue项目)

目录 1、需求 2.想要的效果就是由图一变成图二 ​编辑 3.组件集成了以下功能 4.参数配置 示例代码 参数说明 5,组件 6.页面使用 1、需求 一般后台管理系统&#xff0c;通常页面都有增删改查&#xff1b;而查不外乎就是渲染新增/修改的数据&#xff08;由输入框变成输…

安卓恶意应用识别(三)(批量反编译与属性值提取)

前言 上篇说到对安卓APK反编译&#xff0c;本篇实现批量反编译和批量特征提取及计算&#xff0c;主要就是通过python代码与cmd进行批量化交互&#xff0c;我在写文章之前&#xff0c;尝试批量下载了安卓apk&#xff08;大约10来个&#xff09;&#xff0c;发现现在这个应用软件…

腾讯mini项目-【指标监控服务重构】2023-08-23

今日已办 进度和问题汇总 请求合并 feature/venus tracefeature/venus metricfeature/profile-otel-baserunner-stylebugfix/profile-logger-Syncfeature/profile_otelclient_enable_config 完成otel 开关 trace-采样metrice-reader 已经都在各自服务器运行&#xff0c;并接入…

SmartSQL 一款开源的数据库文档管理工具

建议直接蓝奏云下载安装 蓝奏云下载&#xff1a;https://wwoc.lanzoum.com/b04dpvcxe 蓝奏云密码&#xff1a;123 项目介绍 SmartSQL 是一款方便、快捷的数据库文档查询、导出工具&#xff01;从最初仅支持 数据库、CHM文档格式开始&#xff0c;通过不断地探索开发、集思广…

【C刷题】day2

一、选择题 1、以下程序段的输出结果是&#xff08; &#xff09; #include<stdio.h> int main() { char s[] "\\123456\123456\t"; printf("%d\n", strlen(s)); return 0; } A: 12 B: 13 C: 16 D: 以上都不对【答案】&#xff1a; A 【解析】…

springboot和vue:二、springboot特点介绍+热部署热更新

springboot特点介绍 能够使用内嵌的Tomcat、Jetty服务器&#xff0c;不需要部署war文件。提供定制化的启动器Starters&#xff0c;简化Maven配置&#xff0c;开箱即用。纯Java配置&#xff0c;没有代码生成&#xff0c;也不需要XML配置。提供了生产级的服务监控方案&#xff0…

Linux Day15:线程安全

一、线程安全方法 线程安全即就是在多线程运行的时候&#xff0c;不论线程的调度顺序怎样&#xff0c;最终的结果都是 一样的、正确的。那么就说这些线程是安全的。 要保证线程安全需要做到&#xff1a; 1&#xff09; 对线程同步&#xff0c;保证同一时刻只有一个线程访问临…

Spring 的注入

目录 一、注入&#xff08;Injection&#xff09; 1、什么是注入 &#xff08;1&#xff09;为什么需要注入 &#xff08;2&#xff09;如何进行注入 2、Spring 注入原理分析&#xff08;简易版&#xff09; 二、Set 注入详解 1、JDK 内置类型 &#xff08;1&#xff09…

CountDownLatch 使用例子和代码流程

目录 CountDownLatch意思理解普通多线程运行Thread.join()实现CountDownLatch实现CountDownLatch流程new CountDownLatch(3)countDown 方法await方法 CountDownLatch意思理解 单词1: countdown 常见释义: 英[ˈkaʊntdaʊn] 美[ˈkaʊntdaʊn] n. 倒数读秒&#xff0c;倒计时(…

推荐一个高质量专栏:「前端面试必备」

文章目录 专栏作者介绍专栏介绍目录&#xff08;前25篇&#xff09;目录&#xff08;后25篇&#xff09;专栏文章部分摘抄JavaScriptVue网络请求和HTTPNode.jswebpackBabelVite微信小程序Vuexuni-appGitECharts前端工程化 写在结尾 专栏作者介绍 &#x1f90d; 前端开发工程师&…

Vulnhub系列靶机---Deathnote: 1死亡笔记

文章目录 信息收集主机发现端口扫描目录扫描dirsearchgobusterdirb扫描 漏洞利用wpscan扫描Hydra爆破 总结 靶机文档&#xff1a;Deathnote: 1 下载地址&#xff1a;Download (Mirror) 难易程度&#xff1a;so Easy 信息收集 主机发现 端口扫描 访问靶机的80端口&#xff0c;报…

Truenas scale 配置 TrueChart zerotier

起源 Official zerotier 总是在系统重启或者服务重启后&#xff0c;会丢失之前配置的IP等信息&#xff0c;使用&#xff0c;转投 TrueChart zerotier 步骤 TrueChart 官方步骤&#xff0c;按这个配置完还是不能使用&#xff0c;需要后续设置。 添加TrueChart步骤到应用库的步…

React TypeScript 定义组件的各种方式

目录 举例说明1. 使用 class 定义2. 使用函数定义2.1 使用普通函数2.2 使用函数组件 举例说明 比如我们要定义一个计数器 Counter&#xff0c;它包含一个 label 和一个 button&#xff0c;计数器的初始值由外部传入&#xff0c;点击 button 计数加 1: 这虽然是个简单组件&…