【Docker第一课】docker的基本命令和试启动容器(详细图解)

目录

知识梗概

docker的初步了解

了解docker常用命令

试开启容器(这里演示nginx、python3和mysql)

1、nginx容器的启动

2、python3容器的启动

docker的作用

虚拟机与容器的区别


写在前面:

本专栏你将了解docker一些入门知识,大概有七篇,此篇是第一篇详细的操作和命令在Linux上的实现都会截图,清楚的展示给各位看客,带您零基础了解docker,小编也只是docker爱好者,如有任何问题欢迎留言或私信探讨,期待与您的相关技术栈交流!

注:docker完整思维导图关注留言后可分享给您!

知识梗概

docker的初步了解

Docker是什么?

简单来说,docker是一个开源应容器引擎,它允许开发者将他们的应用以及依赖包打包到一个可以移植到容器中,发布到Linux或者windows这些流行的操作系统机器上。Docker容器完全使用沙箱机制,相互之间不会有任何接口。

Docker的组成部分包括Docker Client客户端、Docker Daemon守护进程、Docker Image镜像和Docker Container容器。Docker的起源可以追溯到PaaS提供商dotCloud开源的一个基于LXC的高级容器引擎,其源代码托管在Github上,基于go语言并遵从Apache2.0协议开源。

官方学习网站:Docker: Accelerated Container Application Development

docker是一个容器软件,理解成一个轻量级的虚拟机。将软件装入docker中,docker可以限制该软件使用的cpu、内存等资源;它是一种虚拟化的隔离技术。

说了这么多,接下来我们安装一下docker吧!

先准备一台新的centos7虚拟机(我给了4核8G内存100G磁盘,为docker容器预留足够的空间),然后按照如下官方文档安装docker(把命令输进去就行,虽然是全英文件,但是操作很简单):

安装方法:Install Docker Engine on CentOS | Docker DocsInstall Docker Engine on CentOS | Docker DocsInstall Docker Engine on CentOS | Docker Docs

了解docker常用命令

Docker的常用命令有哪些?

先对一些操作指令稍稍了解,之后也会有演示什么的:

查看docker版本:[root@docker ~]# docker version
查看运行的容器:[root@docker ~]# docker ps
查看容器,包括未运行的:[root@docker ~]# docker ps -a
docker命令帮助:[root@docker ~]# docker --help
查看镜像:[root@docker ~]# docker images
拉取nginx镜像:[root@docker ~]# docker pull nginx
启动一个容器:[root@docker ~]# docker start sc-nginx-1(sc-nginx-1是给nginx容器取的容器名)
关闭一个运行的容器:[root@docker ~]# docker stop sc-nginx-1
删除一个容器:[root@docker ~]# docker rm sc-nginx-1
删除容器:[root@docker ~]# docker rm sc-nginx-1
查询go相关的镜像:[root@docker ~]# docker search go
查看容器启用的日志:[root@docker ~]# docker logs sc-mysql-1
删除镜像(镜像文件的容器要停止以及删掉才能删除他的镜像):[root@docker ~]# docker rmi nginx
查看容器的详细信息:[root@docker ~]# docker inspect sc-nginx-1

以及运行容器就是docker run xxxxxxx;容器之间的文件共享:docker cp xxxxxx;
如果有一定Linux基础的话,这些命令都很好懂的。

试开启容器(这里演示nginx、python3和mysql)

已经知道这么多东西了,那容器到底是怎么运行的呢?

下面我准备演示一下启动nginx和mysql的容器!

1、nginx容器的启动

在虚拟机上执行如下操作:

拉取nginx镜像:[root@docker ~]# docker pull nginx
查看镜像:[root@docker ~]# docker images设置nginx的容器:[root@docker ~]# docker run --name sc-nginx-1 -d -p 8080:80 --cpu-shares 100 --cpus 1 --cpuset-cpus 0 -m 10000000 nginx
查看运行的容器:[root@docker ~]# docker ps

此时就可以看到有一个叫sc-nginx-1的容器运行起来了。

这些命令让我们产生了一些疑问:

镜像是啥?跟容器有什么关系呢?运行容器时docker run命令后面的选项都是什么意思?

Docker镜像是Docker容器的构建块,是一种轻量级、独立的可执行软件包。它包含了运行应用程序所需的所有代码、运行时、库、环境变量、配置参数以及依赖项等。把这个镜像放到docker中就可以运行起来。镜像可以被视为一个只读的模板,用于创建容器实例。在Docker中,镜像可以用来创建容器,并作为Docker运行容器的前提。

镜像与容器的关系:镜像里是程序的源代码(二进制程序)-->静态;

容器:是运行镜像的地方-->动态的;

一旦容器运行起来后,在操作系统里就对应产生一个进程;

杀死容器对应的进程,容器就停止运行了:

对于docker run的那条指令的意思在此解读一下:

[root@docker ~]# docker run --name sc-nginx-1 -d -p 8080:80 --cpu-shares 100 --cpus 1 --cpuset-cpus 0 -m 10000000 nginx

--name:指定容器名字,一个nginx镜像可以启动多个nginx容器,但是容器名和端口不能重复。如果还要再启动一个nginx容器,就可以叫sc-nginx-2、sc-nginx-3……你就可以通过这个名字来引用和管理这个容器了,而不是使用自动生成的容器ID。

-d:容器在后台运行

-p:将容器的某个端口映射到宿主机的某个端口,这里将容器的80端口映射到宿主机的8080端口,这样,任何发送到宿主机 8080 端口的流量都会被转发到容器内的 80 端口。

--cpu-shares:这个选项用于设置CPU共享权重。在Docker中,--cpu-shares 并不直接限制容器可以使用的CPU百分比,而是设置了一个权重,用于在多个容器间分配CPU资源。

--cpus:这个选项用于限制容器可以使用的CPU核心数,这里可以用1个。

--cpuset-cpus:这个选项用于限制容器只能在特定的CPU核心上运行,这里指定名为“cpu0”这块cpu。

-m:这个选项用于限制容器可以使用的内存量。在这个例子中,容器被限制为只能使用10MB(即10,000,000字节)的内存。

查看容器的详细信息:[root@docker ~]# docker inspect sc-nginx-1
查看容器状态:[root@docker ~]# docker stats

访问宿主机的地址,指定8080端口,就能看到运行成功的nginx:

2、python3容器的启动

[root@docker ~]# docker pull python:3
[root@docker ~]# docker images
[root@docker ~]# docker run -it --rm --name sc-python3-1 python:3
#(这里的--rm表示,当我们退出容器时,自动删除容器)
#(-it表示进入一个容器时,开启一个终端,能进行交互)

运行效果如下:

docker的作用

启动了这么多容器,我们可以看到docker的很多优点

最明显的一点就是降本升效。Docker完全打破了我们原有的安装软件的方法,简化了安装步骤;其次就是docker可以控制分配给容器的资源,所以可以提高资源的利用率;Docker容器应用直接运行于宿主内核,无需启动完整的操作系统,因此大大节约了开发、测试和部署的时间……

随着了解的深入,我们会认识到docker的更多优点。

使用Docker安装软件和直接使用操作系统安装软件存在显著的区别

1、隔离性:Docker容器提供了隔离的运行环境,这意味着每个容器都拥有自己独立的运行环境和依赖项。这种隔离性有助于防止不同应用程序之间的版本冲突和其他潜在问题。相比之下,直接在操作系统上安装软件时,不同软件可能会共享系统资源,并可能产生依赖冲突。

2、管理和部署:使用Docker可以更轻松地管理和部署多个服务。

3、版本控制:通过Docker镜像,你可以轻松控制服务的版本。你可以选择特定版本的nginx或MySQL镜像来开启容器,并在需要时方便地升级或回退。

4、资源占用:Docker容器相对于传统虚拟机更为轻量级,因为它们共享主机系统的内核(这一点后面镜像制作时会讲)。这意味着Docker容器在资源占用方面更加高效,启动速度也更快。而直接在操作系统上安装软件时,可能会占用更多的系统资源,并且启动速度可能会较慢。

5、可移植性:Docker容器打包了应用程序及其所有依赖项,使其在任何支持Docker的环境中运行一致。这使得从开发到生产环境的迁移变得更加简单和高效。而直接在操作系统上安装的软件可能受到特定操作系统和配置的限制,因此在不同环境之间的迁移可能会更加困难。

6、数据备份和迁移:使用Docker进行数据备份和迁移更加方便和强大。你可以轻松地将Docker容器和镜像导出为文件(之后镜像导入导出也会演示),并在需要时将其导入到其他环境中。而直接在操作系统上安装的软件可能需要更复杂的步骤来进行数据备份和迁移。

稍微提一下容器技术:

之后对这些会有更深刻的理解。

虚拟机与容器的区别

容器是一个软件运行的标准单元,打包好代码和它依赖的库快速运行在该单元里;
容器和虚拟机都要安装在硬件系统上;但是虚拟机的封装结构更复杂,安全性更高,隔离性更强;
容器的启动速度更快,资源消耗也更少;容器公用宿主机的内核,资源可控;
虚拟机的镜像比较大,容器的镜像小;

两者在结构上的区别:

知乎上看到一个总结比较完善的图:

此次分享就到这里,如有问题,欢迎留言;关注可分享docker思维导图

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

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

相关文章

计算机英文论文常见错误写作习惯3

目录 第一部分 Numbers and Equations ‘such as’ and ‘etc.’ 第二部分 第一部分 Numbers and Equations 两个非常常见的错误是关于阿拉伯数字和方程式的表示。中国作家通常写阿拉伯数字,而不是拼出单词。然而,使用阿拉伯数字本身并不是一个错误…

若依集成seata分布式事务(AT模式)并以nacos作为配置中心和注册中心(含踩坑)

一、序言 由于使用的是若依的框架,在若依的官网也有说明seata的使用方法,但是自己在写demo的时候,是想结合项目来实现demo,不过seata在本地的部署是参考了seata的官网和若依的官网对seata的使用 以及博客:微服务项目中…

礼赞劳动节,致敬劳动者。节日随想:疾笔耕耘也是一种劳动方式。

马克思也快诞辰了206年了,恩格斯领导的第二国际通过的决议节日也迎来了134岁的生日了,我也继续在劳动的路上。 五月是值得纪念的日子,作为一名无上光荣的分子,无比仰慕崇拜的两位先驱前辈大胡子,其一 生于斯&#xff0…

(学习日记)2024.05.08:UCOSIII第六十二节:常用的结构体(os.h文件)第一部分

之前的章节都是针对某个或某些知识点进行的专项讲解,重点在功能和代码解释。 回到最初开始学μC/OS-III系统时,当时就定下了一个目标,不仅要读懂,还要读透,改造成更适合中国宝宝体质的使用方式。在学完野火的教程后&a…

blender(布兰德)下载安装-windows系统安装

1.简单介绍 这些介绍都是一些百科或官网提供的内容,直接搜索对应的信息后即可看到。Blender(布兰德)是一款永久开源免费的3D创建套件。支持整个3D创作流程:建模、雕刻、骨骼装配、动画、模拟、实时渲染、合成和运动跟踪&#xff…

Java Maven 编译资源文件拷贝错误 dirCompressed.zip failed with MalformedInputException:

完整的错误信息为: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.3.1:resources (default-resources) on project core-java-io: filtering C:\WorkDir\Repository\iSharkfly-Docs\java-tutorials\core-java-modules\core-ja…

Microsoft.NET 框架程序设计 —— 共享程序集

文件版本是一个很难解决的问题。实际上,如果仅仅在一个文件中将其某一位从0改变到1、或者从1改变到0,我们便不能绝对保证使用原来文件的代码和它使用新版文件时的行为一样。这是因为许多应用程序都会有意或者无意地引入bug。如果一个文件的后续版本修复了一个bug,应用程序便…

第12章 软件测试基础(第一部分)概念、质量保证、测试用例、测试执行过程

一、软件测试 (一)定义 动态验证计算机程序对有限的测试用例集是否可产生期望的结果的过程。测试计划是描述了要进行的测试活动的范围、方法、资源和进度的文档。编写测试计划目的:使测试工作顺利进行、使项目参与人员沟通更舒畅、使测试工…

翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深度学习六

合集 ChatGPT 通过图形化的方式来理解 Transformer 架构 翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深度学习一翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深度学习二翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深…

用FPGA+DAC输出“心”形波

1.前言 之前在做信号处理的时候整了一下活,用FPGADAC(数模转换器),输出了一个爱心形状的波形,今天整理资料的时候偶然发现了他,现在把他分享出来。当时将DAC的输出接在示波器上显示如下图所示: …

雅思备考经验(个人向)

IELTS备考经验(个人向) 备考时长约1个月, 首考6.5(6), 虽然没考到小分6.5, 我也接受了, 过段时间再考吧. 机考or纸笔 雅思有机考也有传统的纸笔考试形式, 个人更推荐机考, 原因如下: 机考口语和笔试一般都在同一天, 而纸笔的口语和笔试一般不在同一天, 有时候可能会差一个…

工业三废数据集(工业烟粉尘排放量、工业二氧化硫排放量、工业废水排放量)2006-2021年

01、数据介绍 工业三废是指工业生产过程中排出的废气、废水和废渣 工业二氧化硫排放量指企业在燃料燃烧和生产工艺过程中排入大气的二氧化硫数量。 工业烟粉尘排放量是指企业在生产工艺过程中排放的烟尘和粉尘等颗粒物重量。 工业废水排放量是指企业在生产过程中产生的废水…

GEE必须会教程—植被覆盖度(FVC)计算(代码分享)

植被覆盖度(FVC)的计算是遥感上非常重要的一个研究领域,因事务繁忙,今天小编先带来FVC的全文代码,给大家试试,后期会出一期专栏进行代码的详细介绍: 今天福利满满,直接上代码&#…

信息技术内涵及意义

一、信息技术及其演进趋势 (一)信息技术概况概念 信息技术(Information Technology,IT)指“应用在信息加工和处理中的科学、技术与工程的训练方法与管理技巧;上述方法和技巧的应用;计算机及其…

【氮化镓】GaN器件在航天器高可靠正向转换器中应用

文章是发表在《IEEE Journal of Emerging and Selected Topics in Power Electronics》2022年10月第10卷第5期上的一篇关于GaN(氮化镓)器件在航天器高可靠性正向转换器中应用的研究。文章的作者是匹兹堡大学电气与计算机工程系的Aidan Phillips, Thomas Cook和Brandon M. Gra…

【C语言视角】数据结构之~二叉树

前言:总所周知~数据结构的二叉树对于初学者来说是一个十分难理解的知识点。接下来,请阅读本人对二叉树拙劣的理解~ 目录 1.二叉树概念及结构 和性质 二叉树的结构 二叉树的存储结构 2.二叉树顺序结构 3.二叉树链式结构的实现 二叉树层序遍历 1.二叉树…

Flask路由的使用

Flask 是一个轻量级的 Python Web 框架,其简洁的设计使得构建 Web 应用变得轻而易举。其中,路由是 Flask 中至关重要的一部分,它定义了 URL 与视图函数之间的映射关系,决定了用户请求的处理方式。在本文中,我们将深入探…

服务运营 | 精选:用药难?用药贵?运筹学与统计学视角下的药物研发与管理

作者设计了一个多阶段博弈论模型来针对罕见病的不同补贴方案,分析政府、联盟、制药商和患者之间的相互作用。 制药商补贴为 α C \alpha C αC,其中 C C C是研发成本, α ∈ [ 0 , 1 ) \alpha \in [0,1) α∈[0,1)是政府总成本的比例。患者补…

ASP.NET淘宝店主交易管理系统的设计与实现

摘 要 淘宝店主交易管理系统主要采用了ASPACCESS的B/S设计模式,通过网络之间的数据交换来实现客户、商品、交易的管理和对客户、商品、交易统计工作,从而提高淘宝店主在管理网店过程中的工作效率和质量。 系统分为基本资料模块,统计资料模…

系统调用 int 86 的过程

该图借鉴与 Linux系统调用全过程详解-高性能服务器开发,向作者致敬。