Docker(一)简介、环境搭建

2023-11-08


一、docker简介

1.什么是docker

Docker是一个开源的应用容器引擎,是一个轻量级容器技术,是一个应用打包、分发、部署的工具,基于Google公司推出的Go 语言实现,遵从Apache 2.0 协议。

2.什么是容器

docker​​​​​​​支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像;运行中的这个镜像称为容器。

容器是软件的可执行单元,它采用通用方式封装了应用程序代码及其库和依赖项,因此可以随时随地运行容器(无论是在桌面、传统 IT 还是云端)。

为此,容器利用操作系统 (OS) 虚拟化形式,这里会利用操作系统的功能(在 Linux 内核中,即名称空间和 cgroups 原语)来隔离进程,并控制这些进程有权访问的 CPU、内存和磁盘的数量。

3.传统的虚拟化技术和容器之间的差别

容器:

  • 容器之间共享同一个系统内核,这样当同一个库被多个容器使用时,内存的使用效率会得到提升。
  • 为应用程序提供了隔离的运行空间:每个容器内都包含一个独享的完整用户环境空间,并且一个容器内的变动不会影响其他容器的运行环境。
  • 容器技术使用了namespaces来进行空间隔离,通过文件系统的挂载点来决定容器可以访问哪些文件,通过cgroups来确定每个容器可以利用多少资源。

虚拟机:

  • 虚拟层为用户提供了一个完整的虚拟机:包括内核在内的一个完整的系统镜像。
  • CPU虚拟化技术可以为每个用户提供一个独享且和其他用户隔离的系统环境,虚拟层可以为每个用户分配虚拟化后的CPU、内存和IO设备资源

4.容器运行的过程【重要】

1.4.1 Docker Client
也称为Docker客户端。其实就是Docker提供命令行界面工具,是许多Docker用户与Docker进行交互的主要方式。客户端可以构建,运行和停止应用程序,还可以远程与Docker_Host进行交互。
1.4.2 Docker daemon
Docker daemon是服务器组建,以Linux后台服务的方式运行,是Docker最核心的后台进程,我们也把它称为守护进程。它负责响应来自Docker Client的请求,然后将这些请求翻译成系统调用完成容器管理操作。该进程会在后台启动一个API Server,负责接受由Docker Client发送的请求,接受到的请求通过Docker daemon内部的一个路由分发调用,由具体的函数来执行请求
1.4.3 Docker Image
Docker image可以看作一个特殊的文件系统,除了提供容器运行时所需要的程序、库、资源、配置等文件外,还包含了一些为运行时准备的参数(匿名卷,环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。我们可将Docker镜像看成只读模版,通过它可以创建Docker容器。我们可以将镜像的内容和创建步骤描述在一个文本文件中,这个文件被称作Dockerfile,通过执行docker build命令可以构建出Docker镜像
1.4.4 Docker Rigistry
Docker registry是存储docker image的仓库
1.4.5 Docker Container
Docker 容器就是Docker镜像的运行实例,是真正运行项目程序、消耗系统资源、提供服务的地方。Docker Container提供了系统硬件环境,我们可以使用Docker Images这些制作好的系统盘,再加上我们所编写好的项目代码,run一下就可以提供服务了。
在这里插入图片描述
容器在docker中的创建过程:
docker run 执行一个命令,这个命令会被发给docker引擎来处理,docker引擎会检索本机上有没有所需要的镜像(因为容器是通过镜像来运行的),如果没有这个镜像,会自动从仓库Registry里拉取下来,根据设定的参数将拉取的镜像运行起来。

二、docker环境部署及测试

1.环境部署:

官方网址:https://docs.docker.com/(安装较慢,推荐以下安装)

进入阿里云或者清华下载站,找到docker-ce(社区版、ee企业版)资源,复制网址
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
直接安装docker-ce会出现依赖性的错误,我们进入阿里云centos源里,将centos7的源添加在本地,若不添加,会出现如下报错
在这里插入图片描述
在这里插入图片描述

添加源(为了多测试并和上面阿里源截图对比,下面添加的源使用清华镜像站源)

[root@server1 ~]# cd /etc/yum.repos.d/
[root@server1 yum.repos.d]# vim docker.repo
[docker]
name=docker-ce
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/x86_64/stable/
gpgcheck=0

[update]                                         ##centos7源,解决依赖性
name=centos
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/7/extras/x86_64/
gpgcheck=0

在这里插入图片描述
列出安装源
[root@server1 ~]#yum repolist

安装docker-ce
[root@server1 yum.repos.d]# yum install -y docker-ce
启动服务
[root@server1 ~]# systemctl enable --now docker
[root@server1 ~]# docker info
使用docker info查看信息,看到有两个warning和我们的桥接有关:
在这里插入图片描述
查看
[root@server1 ~]#sysctl -a| grep bridge-nf-call-iptables

激活内核选项即可
[root@server1 ~]# vim /etc/sysctl.d/docker.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1 ##打开内核转发

[root@server1 ~]# sysctl --system
[root@server1 ~]# systemctl restart docker

此时再用docker info查看就正常了,现在我们就能正常访问docker了:
(注:此时我们找到的是docker官方仓库里的镜像)

2.通过镜像运行容器

[root@server1 ~]# docker run -d --name web1 -p 80:80 nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
3f9582a2cbe7: Pull complete
9a8c6f286718: Pull complete
e81b85700bc2: Pull complete
73ae4d451120: Pull complete
6058e3569a68: Pull complete
3a1b8f201356: Pull complete
Digest: sha256:aa0afebbb3cfa473099a62c4b32e9b3fb73ed23f2a75a65ce1d4b4f55a5c2ef2
Status: Downloaded newer image for nginx:latest
0ab8d0e38142e97b8c611b156d723b2546fc1623909b65a0f5f016d8a2a1668d

显示激活的容器
[root@server1 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                               NAMES
0ab8d0e38142   nginx     "/docker-entrypoint.…"   8 seconds ago   Up 7 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   web1

截取因已是第二次开启nginx,所以显示信息较少
参数解释:
-d:打入后台
–name:给容器命名
-p:端口映射,server1的80端口映射到容器内的80端口(宿主机端口:容器内跑的服务的端口);容器运行在私有网段,不做端口映射,外部不能访问;
-v:映射文件
在这里插入图片描述

测试:
访问网页:http://192.168.117.11/
nginx已正常启用
在这里插入图片描述
删除容器
[root@server1 ~]# docker rm -f web1
在这里插入图片描述

3.拉取镜像

在这里插入图片描述

查询镜像
[root@server1 ~]# docker search yakexi007

拉取镜像到本地
[root@server1 ~]# docker pull yakexi007/game2048

启动容器
[root@server1 ~]# docker run -d --name web1 -p 80:80 yakexi007/game2048

在这里插入图片描述
测试:
访问网页:http://192.168.117.11/
在这里插入图片描述
删除容器
[root@server1 ~]# docker rm -f web1
在这里插入图片描述


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker(一)简介、环境搭建 的相关文章

  • 我可以告诉 Linux 不要交换特定进程的内存吗?

    有没有办法告诉 Linux 它不应该将特定进程的内存交换到磁盘 它是一个 Java 应用程序 所以理想情况下我希望有一种方法可以从命令行执行此操作 我知道您可以将全局交换性设置为 0 但这明智吗 您可以通过以下方式执行此操作姆洛克尔 2 h
  • `docker-compose up` 与使用环境变量的 `docker compose up`

    我正在尝试使用 Docker Compose 将三节点 Elasticsearch 集群部署到 Azure 容器实例 我松松地跟随这个例子 https www elastic co guide en elasticsearch refere
  • 检查上次更改密码的时间[关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的
  • 带有接收器的 boost_log 示例无法编译

    我正在考虑将 boost log 用于一个项目 一开始我就遇到了以下问题 我在以下位置找到的升压日志示例 http www boost org doc libs 1 54 0 libs log example doc tutorial fi
  • 如何从 swagger 文档生成静态 html 文件?

    我创建了一个 Swagger 文档yaml文件位于 api swagger swagger yaml 现在我想分享一个静态 HTML 文档及其定义 但它已在招摇项目 https github com swagger api swagger
  • Pthread互斥锁由不同线程解锁

    一个天真的问题 我之前读到过 MUTEX 只能由锁定它的线程解锁 但我写了一个程序THREAD1锁定 mutexVar 并进入睡眠状态 然后THREAD2可以直接解锁mutexVar做一些操作并返回 gt 我知道每个人都说我为什么要这样做
  • 串口读取未完成

    下面的函数用于在Linux下从串口读取数据 我在调试时可以读取完整的数据 但是当我启动程序时 读缓冲区似乎并不完整 我正确接收了一小部分数据 但缓冲区的其余部分完全正确zero 可能是什么问题呢 int8 t serial port ope
  • 如何将 ARG 值传递给 ENTRYPOINT?

    Docker 1 9 允许将参数传递给 dockerfile 参见链接 https docs docker com engine reference builder arg https docs docker com engine refe
  • 如何每周日运行 crontab 作业

    我想弄清楚如何每周周日运行 crontab 作业 我认为以下应该可行 但我不确定我是否理解正确 下面的说法正确吗 5 8 6 这是 crontab 格式的解释 1 Entry Minute when the process will be
  • AWS Lambda Sam找不到docker

    我正在尝试使用以下命令测试我的 hello world lambda 函数aws sam cli在我的项目根文件夹中使用以下命令 sam local start api debug 这在控制台中给出了以下输出 2018 07 11 16 1
  • 容器上的“container_memory_working_set_bytes”指标和 OOM-killer 之间有什么关系?

    我试图找出并理解 OOM killer 如何在容器上工作 为了弄清楚这一点 我读了很多文章 发现 OOM killer 会根据oom score And oom score是由oom score adj以及该进程的内存使用情况 有两个指标c
  • 分割 tar.bz2 文件并单独提取每个文件

    我可以将一个大的 tar bz2 文件分割成几个较小的文件并在 Ubuntu 中单独提取这些小 tar bz2 文件吗 Thanks 我认为这不容易实现 A tar bz2是单个流 它没有像这样的索引zip这将允许跳到存档中特定文件的开头
  • 如何在Linux中获取带有图标的活动应用程序

    我想找到一种方法获取活动应用程序的列表及其名称和图标 实际上 我正在使用此命令来获取所有活动进程 wmctrl lp 示例输出 0x03800002 0 3293 user notebook XdndCollectionWindowImp
  • 使用多个 NIC 广播 UDP 数据包

    我正在 Linux 中为相机控制器构建嵌入式系统 非实时 我在让网络做我想做的事情时遇到问题 该系统有 3 个 NIC 1 个 100base T 和 2 个千兆端口 我将较慢的连接到相机 这就是它支持的全部 而较快的连接是与其他机器的点对
  • C:运行系统命令并获取输出? [复制]

    这个问题在这里已经有答案了 我想在 Linux 中运行一个命令并获取其输出内容的返回文本 但我do not想要将此文本打印到屏幕上 有没有比制作临时文件更优雅的方法 你想要 popen http linux die net man 3 po
  • Centos/Linux 将 logrotate 设置为所有日志的最大文件大小

    我们使用 logrotate 并且它每天运行 现在我们遇到了一些情况 日志显着增长 阅读 gigabaytes 并杀死我们的服务器 所以现在我们想为日志设置最大文件大小 我可以将其添加到 logrotate conf 中吗 size 50M
  • pip install reportlab 错误:命令“x86_64-linux-gnu-gcc”失败,退出状态为 1

    使用 ubuntu 虚拟环境 我尝试安装reportlab 命令是 pip install reportlab 在这个目录下 company2 stefano stefano X550EP htdocs company2 错误是 error
  • 如何从 minikube 中删除现有下载的 docker 镜像

    我正在将多个服务部署到本地集群 minikube using 开发空间工具 https devspace sh 一旦有人对其中一项服务进行更改并将图像推送到我们的私人存储库 我就需要这些更改在我的本地可用 我现在所做的就是完全删除minik
  • 当 docker 停止时运行脚本

    我正在尝试使用 dockerfile 创建 docker 容器 其中 script entry sh 将在容器启动时执行 而 script exit sh 将在容器停止时执行 ENTRYPOINT 帮助解决了 script entry sh
  • 为什么 docker build 中的 COPY 未检测到更新

    我在节点应用程序上运行构建 然后使用工件构建 Docker 映像 将源代码移动到位的 COPY 命令没有检测到构建后源文件的更改 它只是使用缓存 Step 9 12 COPY server home nodejs app server gt

随机推荐

  • vue面试题——v-if 和v-show的区别

    面试前端时 涉及到vue v if和v show几乎是必问的一道题 所以记录一下 首先我们先来看一段代码
  • iwconfig查看网卡 ifconfig查看ip /etc/init.d/ssh restart

    iwconfig查看网卡 ifconfig查看ip etc init d ssh restart 开启ssh服务 1 查看是否有sshd config cat etc ssh sshd config 查看是否有sshd config文件 2
  • python二级练习软件(90%原题)题库、三天速成。

    刷题软件 文末有联系方式 注明来意 我发现大家对考Python计算机二级都比较感兴趣 也有一些疑问 对于考证这个问题我简单说一下我的经验 python二级其实很容易通过 考试题题库是前九年真题加一套新题 你会遇到90 的原题 只要考前三天练
  • linux下搭建SVN遇到authentication failed问题的解决方法

    之前由于要管理项目组的文档 所以就想在linux下搭建一个svn平台 于是我就在网上找资料 并按照步骤搭建了一个SVN 结果老是出现一个authentication failed的错误 经过一个下午的努力 终于让我找出了错误的原因 一个非常
  • 微信小程序实例源码大全下载

    小程序QQ交流群 131894955 小程序开发直播腾讯课堂 https edu csdn net course detail 6743 微信小程序实例源码大全下载 微信小应用示例代码 phodal weapp quick 源码链接 htt
  • 避免Django重复提交表单,ERR_cache_miss错误

    在做项目时 遇到这个问题 首页设置为登录页login html 登录后跳转至工具页tool html 使用django自带的会话及身份验证中间件 自己认为的应该没问题 但总报标题所述错误 折腾了半天 终于解决 这里记录一下 我的urls p
  • 卷积神经网络详解

    卷积神经网络 Convolutional Neural Networks CNN 是应用最多 研究最广的一种神经网络 卷积神经网络 以下简称CNN 主要用于图片分类 自动标注以及产品推荐系统中 以CNN实现图片分类为例 图像经过多个卷积层
  • 【Unity入门计划】CreatorKitFPS:第一人称射击3D小游戏

    目录 Unity学习教程 1 添加并载入项目资源 添加项目资源 载入到Unity 2 载入Scene 3 从预制体添加射击Targets 4 管理游戏对象 4 1创建分组关系 4 2 区分相对坐标 世界坐标 5 自己做一个预制件 5 1 添
  • 【Python全栈开发从入门到实战】持续更新中......

    本专栏为Python全栈开发系列文章 技术包括Python基础 函数 文件 面向对象 网络编程 并发编程 MySQL数据库 HTML JavaScript CSS JQuery bootstrap WSGI Django Flask 后期运
  • OpenCV中的图像变换——傅里叶变换

    OpenCV中的图像变换 傅里叶变换 1 效果图 2 原理 3 源码 3 1 Numpy实现傅里叶变换 3 2 OpenCV实现傅里叶变换 3 3 HPF or LPF 参考 这篇博客将介绍OpenCV中的图像变换 包括用Numpy Ope
  • post方式加载iframe

    我们平常使用iframe时 直接设定src属性只能是get请求方式 get请求的参数大小有限制 如何实现即使用iframe又能通过post请求 两种方式 ajax使用post请求返回页面 直接将返回的页面数据放入iframe标签中 结合fo
  • linux-内核锁

    目录 一 铺垫知识 1 指令执行流 2 上下文 3 抢占 二 内核锁基础知识 1 为什么要用锁 why 2 锁保护什么 what 3 锁是如何保护资源的 How 三 各类锁的介绍 1 原子操作 2 spinlock 3 mutex 4 进程
  • HBase学习 -安装Hbase(2)

    目录 安装模式 独立式HBase安装 使用自带的Zookeeper 独立于HDFS的HBase安装 使用自带的Zookeeper 伪分布式HBase安装 使用自带的Zookeeper 伪分布式HBase安装 不使用自带的Zookeeper
  • nestjs: Redundant character escape ‘\@‘ in RegExp 处理

    问题 如标题 参考 Redundant character escape in RegExp CodeAntenna 解决办法 将转义符号 删除掉
  • 【分布式金融交易模型】Seata中间件的TCC模式实现一对一转账

    Seata中间件实现一对一转账 1 转账界面 2 本地事务在分布式下的问题 2 1 本地事务 2 1 1 事务四大特性 2 1 2 本地事务的概念 2 1 3 本地事务的实现 使用注解 Transactional 2 1 4 事务的隔离级别
  • elastisearch启动报错:org.elasticsearch.cluster.block.ClusterBlockException: blocked by: [SERVICE_UNAVAIL

    使用命令启动一个ES进程 bin elasticsearch E node name warmnode E cluster name geektime E path data warm data E node attr my node ty
  • upload-labs第一关

    level1 根据提示这是本地js文件上传绕过 有两种思路 第一种将浏览器中的js检验代码删除 第二种 将一句话木马的后缀改成可以上传的文件类型 利用burp suit抓包再改包绕过js 改包过程 上传成功 获取上传的图片地址 在网页上打开
  • 计算机无法识别3.0u盘启动,USB3.0接口不能识别U盘的解决方法

    USB3 0接口不能识别U盘的解决方法 USB接口可以说是电脑的标配 现在基本上所有电脑都会搭载USB接口 而USB标准从1 0发展到现在的3 0 甚至更新的也已出来 不过 如果USB3 0无法识别U盘 那该怎么办呢 USB3 0是一种技术
  • tensorflow实战(五)——过拟合调参(2)及学习率动态调整

    我们通过采取动态调整学习率的策略 缓解过拟合问题 随着训练轮数的增加 学习率逐渐下降会使模型拟合的更好 在这里 我们设定网络结构为 model tf keras Sequential 0 255共256个 故第一个参数为256 数据为三位数
  • Docker(一)简介、环境搭建

    文章目录 一 docker简介 1 什么是docker 2 什么是容器 3 传统的虚拟化技术和容器之间的差别 4 容器运行的过程 重要 二 docker环境部署及测试 1 环境部署 2 通过镜像运行容器 3 拉取镜像 一 docker简介