Docker就应该这么学-01

news2024/11/18 18:44:43

第一章 容器与开发语言

1.1 Docker

最近一段时间,云计算领域最火的莫过于“容器”一词。提到容器,就不得不提 Docker,可以说 Docker 己经成为了容器的代名词。那么,什么是 Docker ? Docker 又能做什么呢?本章
我们就来简单介绍一下 Docker。

1.1.1 简介

Docker 是一个开源工具,它可以将你的应用打包成一个标准格式的镜像,并且以容器的方式运行。Docker 容器将一系列软件包装在一个完整的文件系统中,这个文件系统包含应用程序运行所需要的一切:代码、运行时工具、系统工具、系统依赖,几乎有任何可以安装在服务器上的东西。这些策略保证了容器内应用程序运行环境的稳定性,不会被容器外的系统环境所影响 。

Docker 容器具有以下 3 个特点。

  • 轻量级 :在同一台宿主机上的容器共享系统 Kernel,这使得它们可以迅速启动而且占用内存极少。镜像是以分层文件系统构造的,这可以让它们共享相同的文件,使得磁盘使用率和镜像下载速度得到提高。
  • 开放:Docker 容器基于开放标准,这使得 Docker 容器可以运行在主流 Linux 发行版和 Windows 操作系统上。
  • 安全:容器将各个应用程序隔离开来,这给所有的应用程序提供了 一层额外的安全防护。

1.1.2 容器和虚拟机比较

容器和虚拟机同样有着资源隔离和分配的优点,但是由于其架构的不同,容器比虚拟机更加便携和高效虚拟机包含用户的程序,必要的函数库和整个客户操作系统,所有的这些差不多需要占用好几个 GB 的空间。


容器包含用户的程序和所有的依赖,但是容器之间是共享 Kernel 的。各个容器在宿主机上互相隔离,并且在用户态下运行。Docker 容器不和任何基础设施绑定,它可以运行在任何电脑、JDC 和云上

1.1.3 容器加速开发效率

Docker 容器可以帮助开发者跳过设置冗杂的开发环境,专注于开发软件的新功能,具体有如下 3 项。

  • 加速开发 :再也不用等待数小时设置开发环境,可以很方便地使生产环境的代码在本地跑起来。
  • 赋能创造力 :Docker 容器的隔离特性可以让开发者摆脱限制。开发者可以为自己的应用选择最好的语言和工具,再也不用担心产生内部工具的冲突。
  • 消除环境不一致:将应用程序的配置和所有依赖打包成一个镜像在容器中,可以保证应用在任何环境中都可以按照预期来运行, 再也不用担心不得不在不同环境中安装相同软件和配置的问题。

1.1.4 利用容器合作开发

Docker 镜像可以存储到 Docker Hub 中,团队成员可以通过Docker Store、 Docker Hub 管理分享镜像。所有的变化和历史都可以在整个组织间查看。

而且,你可以很简单地分享你的容器,不需要担心环境依赖产生的不一致问题,其他团队也可以很简单地引用你的容器,而不需要去关心它是如何工作的。

1.1.5 利用容器快速扩容

Docker允许动态地改变应用程序,可以通过扩容快速提高应用程序的能力并及时修复缺陷。Docker容器可以秒级启动和停止,因此,它可以在需要的时候快速扩容出大量的应用程序,扛住并发的压力。

1.1.6 安装使用 Docker

Docker 就是一个这样的工具 。它可以帮助开发者很方便地去构建、部署、运行自己的程序, 还可以让你非常迅速地测试你的项目并将其部署到生产环境中 。
首先,你需要在自己的机器上安装Docker,这里以在 Ubuntu系统上安装Docker为例 。

#1 更新安装 docker
wget -qO- https://get.docker.com/ | sh
#2 启动 docker
service docker start

运行以上命令,一段美妙的小脚本就这样被安装到了你的机器上,它完成了安装Docker需要的所有内容。

下面,就开始使用它吧。以安装一个WordPress为例,看看Docker是如何快速安装一个WordPress的。以前安装WordPress,可能需要去了解PHP、MySQL,还有服务器的系统,最后才去安装WordPress,非常麻烦。但是,如果换一种方式,使用Docker来安装呢?

docker run -d -p 80:80 --name wordpress wordpress

运行以上命令,Docker会自动从DockerHub中拉取WordPress镜像,这个镜像是已经被build好的,包含了PHP、MySQL和WordPress。你所做的工作就是等待Docker帮你把这个服务启动起来以后,在浏览器上访问你的服务器IP,就可以看到WordPress的安装页面,然后一步步点击页面按钮完成安装即可。对于MySQL密码,可以使用如下命令获取。

echo $(docker logs wordpress | grep password)

上面这条命令就可以获得MySQL密码,将其填写到网页中,就得到了一个可以运行的WordPress,然后开始愉快地使用它吧。

1.2 Go

Go语言的语法虽然接近C语言,但还是有一些不同,比如两者对于变量的声明是不同的,且Go语言中的for循环和if判断语句不需要用小括号括起来。Go语言的并行模型是以东尼·霍尔的通信顺序进程CCSP)为基础的,井采取了类似模型的其他语言(包括Occam和Limbo),但它也具有Pi运算的特征,比如通道传输。

与C++相比,Go语言并不包括如异常处理、继承、泛型、断言、虚函数等功能,但增加了slice型、井发、管道、垃圾回收、接口(Interface)等特性的语言级支持。当然,Google对于泛型的态度还是很开放的,但在该语言的常见问题列表中,对于断言的存在,则持负面态度,同时也在为自己不提供类型继承辩护。不同于Java,Go语言内嵌了关联数组(也称为哈希表(Hash)或字典(Dictionary)),就像字符串类型一样。

1.2.1 Go语言示例

可以在Go语言官网首页看到一个Go语言的HelloWorld示例,代码如下。

package main
import "fmt"
func main() {
	fmt.Println("Hello World")
}

目前使用Go开发的项目非常多,其中就有国人开发的beego(用来开发Go应用程序的开源框架),另外一个就是大名鼎鼎的Docker。因此,本文会以Go语言代码为示例开发我们自己的Docker应用。

1.2.2 安装 Go

wget https://go.dev/dl/go1.21.5.linux-amd64.tar.gz
tar -vxf go1.21.5.linux-amd64.tar.gz
mv go /usr/local
vim .bashrc 
export GOPATH=/root/go
export PATH=$PATH:/usr/local/go/bin
source .bashrc

1.2.3 配置GOPATH

GO PATH 是真正存放代码的路径,目录约定有如下3个子目录,没有可以自己mkdir建立。

  • src 存放源代码。
  • pkg 存放编译后生成的文件。
  • bin 存放编译后的可执行文件。

执行,可以看到GOPATH位置

root@iZ2zed7lj4oetgoal2c8v7Z:~# go env | grep GOPATH

为了防止下载比较慢,可以修改Go的下载源。

go env -w GOPROXY='https://goproxy.cn,direct'

未完待续。。。

下一篇将会继续介绍Docker中NameSpace以及Cgroup的核心原理。
所有Docker合集:《Docker就应该这么学》

本文所有内容都是基于「动手写Docker」此书。关注微信公众号「云原生实战指南」,后台回复“动手写Docker”即可领取。

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

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

相关文章

2023春季李宏毅机器学习笔记 02 :机器学习基本概念

资料 课程主页:https://speech.ee.ntu.edu.tw/~hylee/ml/2023-spring.phpGithub:https://github.com/Fafa-DL/Lhy_Machine_LearningB站课程:https://space.bilibili.com/253734135/channel/collectiondetail?sid2014800 一、機器學習基本原理…

MySQL将多条数据合并成一条的完整示例

数据库中存的是多条数据,展示的时候需要合并成一条 数据表存储形式如下图 以type分组,type相同的算一条,且保留image和link的所有数据,用groupBy只保留一条数据 解决方案:用GROUP_CONCAT 完整语法如下 group_concat…

基于人工智能的数据库工具Chat2DB使用

文章目录 前言Chat2DB介绍Chat2DB地址下载安装 Chat2DB配置Chat2DB使用1、自然语言转sql2. SQL解释3. SQL优化4. SQL转换 写在最后 前言 随着人工智能的发展,各行各业都出现了不少基于AI的工具来提升工作效率。就连国内的各个大厂也都在基于大模型开发自己的产品线…

ctfshow——信息搜集

文章目录 web 1web 2web 3web 4web 5web 6web 7web 8web 9web 10web 11web 12web 13web 14web 15web 16web 17web 18web 19web 20 web 1 题目提示开发注释未及时删除。 直接右键查看源代码。 web 2 在这关我们会发现:1)无法使用右键查看源代码&…

Github 2023-12-31 开源项目日报 Top10

根据Github Trendings的统计,今日(2023-12-31统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量TypeScript项目3Swift项目1Java项目1HTML项目1Astro项目1Python项目1C项目1Dart项目1Jupyter Notebook项目1C项…

Python最基础的对字符串的操作1

1,字符串的查找: find():查询某个子串是否包含在这个字符串中,如果在返回这个子串开始的位置下标,否则则返回-1 index():查询某个子串是否包含在这个字符串中,如果在返回这个子串开始的位置下标…

Linux系统编程(八):信号(下)

参考引用 UNIX 环境高级编程 (第3版)嵌入式Linux C应用编程-正点原子 1. 基本概念 信号是事件发生时对进程的通知机制,也可以把它称为软件中断 信号与硬件中断的相似之处在于能够打断程序当前执行的正常流程,其实是在软件层次上对中断机制的一种模拟大多…

【华为机试】2023年真题B卷(python)-快递运输

一、题目 题目描述: 运送的快递放在大小不等的长方体快递盒中,为了能够装载更多的快递同时不能让货车超载,需要计算最多能装多少个快递。 注:快递的体积不受限制 快递数最多1000个 货车载重最大50000 二、输入输出 输入描述&#…

【算法挨揍日记】day42——494. 目标和、1049. 最后一块石头的重量 II

494. 目标和 494. 目标和 题目描述: 给你一个非负整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 或 - ,然后串联起所有整数,可以构造一个 表达式 : 例如,nums [2, 1] ,可以在 2 之前…

工程化态势感知的困难

工程化态势感知的困难在于数据整合、大数据处理和分析、领域知识和模型构建、实时性和准确性要求以及安全和隐私问题。解决这些困难需要技术和专业知识的结合,以及各方面的合作和努力。 多源异构数据的整合:工程化态势感知需要从各种数据源获取数据&…

数据结构——顺序队列与链式队列的实现

目录 一、概念 1、队列的定义 2、队首 3、队尾 二、接口 1、可写接口 1)数据入队 2)数据出队 3)清空队列 2、只读接口 1)获取队首数据 2)获取队列元素个数 3)队列的判空 三、队列的顺序表实现…

com.gexin.platform 依赖下载问题

打包时报错显示&#xff1a; com.gexin.platform:gexin-rp-sdk-http:pom:4.1.1.4 failed to transfer from http://0.0.0.0/ 解决办法&#xff1a; 1、在idea中找到maven中的设置的settings.xml 2、根据路径找到settings.xml文件&#xff0c;添加以下内容 <mirror><…

基于孔雀优化算法的航线规划

MATLAB2020a下正常运行 上传明细-CSDN创作中心

一元函数微分学——刷题(14

目录 1.题目&#xff1a;2.解题思路和步骤&#xff1a;3.总结&#xff1a;小结&#xff1a; 1.题目&#xff1a; 2.解题思路和步骤&#xff1a; 只要知道反函数求导等于原函数的导数的倒数&#xff0c;那就很好求解了&#xff0c;这不过要先处理好x和y的对应关系&#xff0c;知…

WPF容器的背景对鼠标事件的影响

背景&#xff1a;在实现鼠标拖动窗口的过程中发现对父容器设置了鼠标拖动窗口的事件MouseLeftButtonDown private void DragWindow(object sender, MouseButtonEventArgs e) {if (e.LeftButton MouseButtonState.Pressed)DragMove(); } 问题&#xff1a;非常困惑的是&#x…

【MySQL】常用存储引擎,数据库管理,数据表管理,数据库账户管理

目录 一 常用的数据引擎(4) 1.1 InnoDB存储引擎 1.2 MyISAM存储引擎 1.3 Memory存储引擎 1.4 ARCHIVE存储引擎 二 数据库管理 2.1 元数据库概念与分类 2.2 相关操作命令 三 数据表的管理 3.1 三大范式 3.2 数据类型 四 数据库账户管理 五 思维导图 一 常用的数据…

Mac环境下Parallels Desktop 19的安装和使用

为了后续构建漏洞靶场和渗透测试环境&#xff0c;我们需要提前准备好几套与宿主机隔离的工作环境&#xff08;Windows、Linux等&#xff09;&#xff0c;在Mac上最常用的就是Paralles Desktop&#xff08;PD&#xff09;工具了&#xff0c;当前最新版本为19。接下来介绍如何安装…

PDF控件Spire.PDF for .NET【安全】演示:获取并验证 PDF 中的数字签名

在 PDF 中创建数字签名广泛用于保护 PDF 文件。因此&#xff0c;当您查看一些带有数字签名的PDF文件时&#xff0c;需要获取并验证数字签名。本文向您展示了一种通过使用Spire.PDF和 C# 代码来获取和验证 PDF 中的数字签名的解决方案。 Spire.PDF for .NET 是一款独立 PDF 控件…

第二证券:停牌意味着什么?

股票停牌的原因&#xff1f; 一般来说&#xff0c;股票停牌的原因可以分为以下几类&#xff1a; 1、上市公司有严峻情况变化&#xff0c;如企业并购、重组等&#xff0c;为了确保生意顺利完成和信息宣布的及时、充分、准确&#xff0c;避免商场出现信息不对称的情况&#xff…

javascript 常见工具函数(五)

41.深度拷贝对象&#xff1a; static deepCopyObj$(obj) {var result Array.isArray(obj) ? [] : {};for (var key in obj) {if (obj.hasOwnProperty(key)) {if (typeof obj[key] object && obj[key] ! null) {result[key] Utils$.deepCopyObj$(obj[key]); //递归…