Docker就应该这么学-01

第一章 容器与开发语言

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”即可领取。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【MPC学习笔记】01:MPC简介(Lecture 1_1 Unconstrained MPC)

本笔记来自北航诸兵老师的课程 课程地址:模型预测控制(2022春)lecture 1-1 Unconstrained MPC 文章目录 0 MPC 简介0.1 案例引入0.2 系统模型0.3 MPC的优点0.4 MPC的缺点0.5 MPC的未来 1 详细介绍 0 MPC 简介 0.1 案例引入 MPC(…

关于简单的数据可视化

1. 安装数据可视化必要的openpyxl、pandas,matplotlib等软件包 使用清华源,命令如下: pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn pandaspip install -i https://pypi.tuna.tsingh…

CSU计算机学院2021年C语言期末题目思路分享(后两道题)

文章目录 E: 实数相加——大数加法的拓展原题题目描述输入输出样例输入样例输出 题目思路实现步骤代码和注释 F: 谍影寻踪——链表的思想和运用原题题目描述输入输出样例输入样例输出 题目思路 一点感想 E: 实数相加——大数加法的拓展 原题 题目描述 C语言就要期末考试了&a…

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><…

2023春季李宏毅机器学习笔记 01 :正确认识 ChatGPT

资料 课程主页&#xff1a;https://speech.ee.ntu.edu.tw/~hylee/ml/2023-spring.phpGithub&#xff1a;https://github.com/Fafa-DL/Lhy_Machine_LearningB站课程&#xff1a;https://space.bilibili.com/253734135/channel/collectiondetail?sid2014800 一、对Chatgpt的误解…

『华为云耀云服务器实战』|云服务器如何快速搭建个人博客(图文详解)

文章目录 引言一、云耀云服务器L实例介绍1.1 准备一个华为云耀云服务器1.2 重置实例密码1.3 利用xshell 远程连接 二、安装环境软件2.1 安装git准备远程拉取2.2 安装Docker 和 Docker compose 三、博客开源项目介绍3.1 操作界面展览 四、拉取项目搭建个人博客4.1 拉取项目进行配…

【算法】一维、二维前缀和 解决算法题(C++)

文章目录 1. 前缀和算法 介绍2. 一维前缀和 模板引入DP34【模板】前缀和 3. 利用一维前缀和 解题724.寻找数组的中心下标238.除自身以外数组的乘积560.和为K的子数组974.和可被K整除的子数组525.连续数组 二维前缀和 模板1314.矩阵区域和 1. 前缀和算法 介绍 前缀和算法 用于高…

白话机器学习的数学-3-评估

1、 模型评估 那我们如何测量预测函数 fθ(x)的正确性&#xff0c;也就是精度呢&#xff1f; 观察函数的图形&#xff0c;看它能否很好地拟合训练数据&#xff1a; 这是只有一个变量的简单问题&#xff0c;所以才能在图上展 示出来。 过像多重回归这样的问题&#xff0c;变量增…

x-cmd pkg | bit - 实验性的现代化 git CLI

目录 简介首次用户功能特点竞品和相关作品进一步探索 简介 bit&#xff0c;由 Chris Walz 于 2020 年使用 Go 语言开发&#xff0c;提供直观的命令行补全提示和建立在 git 命令之上的封装命令&#xff0c;旨在建立完全兼容 git 命令的现代化 CLI。 首次用户 使用 x bit 即可自…

【华为机试】2023年真题B卷(python)-矩阵元素的边界值

一、题目 题目描述&#xff1a; 给定一个N*M矩阵&#xff0c;请先找出M个该矩阵中每列元素的最大值&#xff0c;然后输出这M个值中的最小值。 补充说明: N和M的取值范围均为: [0,100] 二、示例 示例1&#xff1a; 输入: [[1,2],[3,4]] 输出: 3 说明: 第一列元素为: 1和3&…

Linux 进程(五) 调度与切换

概念准备 当一个进程放在cpu上运行时&#xff0c;是必须要把进程的代码跑完才会进行下一个进程吗&#xff1f;答案肯定是 不对。现在的操作系统都是基于时间片轮转执行的。 时间片&#xff08;timeslice&#xff09;又称为“量子&#xff08;quantum&#xff09;”或“处理器片…

求职招聘小程序平台运营版系统源码 全开源源代码 附带完整的安装与部署教程

近年来&#xff0c;移动互联网的普及&#xff0c;求职招聘行业也在逐步向数字化转型。在这个过程中&#xff0c;小程序因其便捷性、即时性等特点&#xff0c;成为了求职者和招聘方的新宠。罗峰来给大家分享一款求职招聘小程序平台运营版系统源码&#xff0c;致力于为用户提供高…

安装elasticsearch、kibana、IK分词器、扩展IK词典

安装elasticsearch、kibana、IK分词器、扩展IK词典 后面还会安装kibana&#xff0c;这个会提供可视化界面方面学习。 需要注意的是elasticsearch和kibana版本一定要一样&#xff01;&#xff01;&#xff01; 否则就像这样 elasticsearch 1、创建网络 因为我们还需要部署k…

Unable to connect to Redis server

报错内容&#xff1a; Exception in thread "main" org.redisson.client.RedisConnectionException: java.util.concurrent.ExecutionException: org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 175.24.186.230/175.24.186.230…

Elasticsearch:带有自查询检索器的聊天机器人示例

本工作簿演示了 Elasticsearch 的自查询检索器 (self-query retriever) 将问题转换为结构化查询并将结构化查询应用于 Elasticsearch 索引的示例。 在开始之前&#xff0c;我们首先使用 langchain 将文档分割成块&#xff0c;然后使用 ElasticsearchStore.from_documents 创建…

多粒度在研究中的应用

FontDiffuser: One-Shot Font Generation via Denoising Diffusion with Multi-Scale Content Aggregation and Style Contrastive Learning 存在的问题 现有的字体生成方法虽然取得了令人满意的性能&#xff0c;但在处理复杂字和风格变化较大的字符(尤其是中文字符)时&#x…

lunux(mysql下载以及操作)

下载mysql 查看镜像 docker images 下载MySQL镜像 mysql/mysql-server:8.0 创建文件夹&#xff0c;创建配置文件和放数据文件 mkdir -p /data/mysql/{conf,,data} 创建配置文件 my.cnf 写入配置文件my.cnf的代码 [client] default-character-setutf8[mysql] de…

MySQL数据库高级SQL语句及存储过程

目录 一、高级SQL语句 &#xff08;一&#xff09;case语句 1.语法定义 2.示例 &#xff08;二&#xff09;空值(NULL) 和 无值( ) 1.区别 2.示例 &#xff08;1&#xff09;字符长度 &#xff08;2&#xff09;判断方法 ① 空值(NULL) ② 无值( ) &#xff08;3…

了解Apache 配置与应用

本章内容 理解 Apache 连接保持 掌握 Apache 的访问控制 掌握 Apache 日志管理的方法 Apache HTTP Server 之所以受到众多企业的青睐&#xff0c;得益于其代码开源、跨平台、功能 模块化、可灵活定制等诸多优点&#xff0c;不仅性能稳定&#xff0c;在安全性方面的表现也十分…

物联网-物联网概念初识

物联网&#xff1a;将无线通信技术、传感设备、全球定位系统或其他信息获取方式等各种传感器嵌入到各种物体、设施中。 物联网三层架构 感知层 ——> 传输层 ——> 应用层 一、物联网通信协议 LoRa技术&#xff1a;基于扩频技术的超远距离无线传输方案&#xff0c;Lo…