Docker小白到实战之开篇概述

前言

“不对啊,在我这运行很正常啊”,这句话小伙伴们在前几年应该听得很多;每次一到安装、部署时总有一堆问题,毕竟操作系统版本、软件环境、硬件资源、网络等因素在作怪,此时难免会导致开发小伙伴和运维哥们互相甩锅,其实很多时候与要部署的系统没有太大关系。如果能减少差异化带来的不和谐,同时还能提高工作效率,肯定是最好的解决方案;Docker的出现让此类问题迎刃而解,即把应用程序、配置依赖等打包形成一个可交付的运行环境,直接启动运行即可,当然不限于此,接下来就一起来学习和探究吧。

正文

1. 概述

1.1 Docker简介

Docker 是一个开源的应用容器引擎,是用Go语言开发的。用于开发、交付和运行应用程序的开放平台,能够将应用程序与基础设施分开,从而可以快速交付软件。

看看Docker 的Logo图

image-20210814101505393
,Docker就好比是下面的小鲸鱼,上面装满的每个集装箱(方块)可以理解为容器,不管集装箱里面装的什么,统一按集装箱的形式打包存放、运输即可,集装箱之间互不影响;即Docker不在乎容器里的内容是什么,统一基于容器这种形式进行标准化管理,容器之间相互隔离,所以Docker上运行的多个容器是相互不影响的。

Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),通常社区版足够用了,功能强大,还免费。

1.2 Docker架构
Docker Architecture Diagram

Docker是客户端/服务器模式架构(C/S),Client(客户端)和Docker daemon(守护进程)通信, 后者接收到客户端指令并执行。简述上图的三个流程:

  • 客户端(Client) 发送docker build指令, 服务端(Docker daemon) 收到指令之后就执行,将对应文件打包生成为镜像(Images)

  • 客户端(Client) 发送docker pull指令,服务端(Docker daemon) 收到指令之后就执行,从远程仓储中(Registry) 寻找镜像(Images) ,并下载到Docker主机上(DOCKER_HOST) ,如果找不到就报错;

  • 客户端(Client) 发送docker run指令,服务端(Docker daemon) 收到指令之后就执行,先从本地查找镜像(Images) ,如果本地存在,直接通过镜像启动容器(Containers) 实例;如果本地没有镜像(Images),就会从远程仓储中(Registry)下载,然后再根据镜像启动容器(Containers) 实例,如果都没找到,那就报错。

上面只是用三关键指令大概描述了从客户端到服务端的执行流程,其实还有很多指令,后续会专门整理文章分享。

上图术语解释及作用:

  • Docker daemon(守护进程) :负责监听客户端发过来的指令请求,并管理Docker的各种对象,如镜像(Images)、容器(Containers)、网络等。

  • Client(客户端) :用户和Docker主机交互的主要方式,就是用来发指令请求的。

  • 远程仓储(Registry) :用于各种镜像的存储,Docker Hub是最大的镜像存储库,基本上平时能用到的镜像都可以找到;为了提升拉取速度,可以指定国内的一些仓储。

  • 镜像(Images) :是一个启动容器(Containers) 的只读模板;比较容易理解的比喻:镜像就是编程语言中的类(Class),容器就是通过类(Class) new出来的实例。

  • 容器(Containers) :就是镜像(Images) 可运行的实例。

1.3 Docker带来的好处
  • 开发更加敏捷: 让开发人员可以自由定义环境,创建和部署的应用程序更快、更容易,运维人员快速应对变化也更加灵活性。

  • 高可移植性和扩展性: Docker容器可以运行在各种设备环境中,如开发电脑、虚拟机、服务器上等;根据业务需求,可实时扩展或拆除应用程序及相关服务;

  • 充分利用硬件资源:Docker轻量级、启动快,能共用公共服务,不像传统的虚拟机那样,需要单独虚拟出整个系统,占用资源多,速度还不够快。Docker容器之间相互隔离,互不冲突,所以同时可运行很多个容器,充分利用资源。

理论先说那么多,主要是实操应用,用明白了,理论自然就清晰了。

2. 安装

这里安装的主机环境是我之前的买的云服务器,系统为CentOS7,其他系统版本安装会有差别,具体细节小伙伴可以参考官网(https://docs.docker.com/get-docker/),里面步骤都很详细。

1、移除移动旧版本

   sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine

2、安装需要的依赖包

   sudo yum install -y yum-utils

3、设置镜像仓库

   sudo yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo  

4、更新Yum软件包索引

   sudo yum makecache fast # 提高安装速度

5、开始安装Docker

   sudo yum install docker-ce docker-ce-cli containerd.io

6、启动Docker

   sudo systemctl start docker

7、测试Docker

   sudo docker run hello-world # 运行Hello-world
安装成功

以上步骤已经完成Docker的安装,但由于拉取镜像时是从国外下载,比较慢,所以通常我们会配置镜像加速器,国内腾讯云、阿里云等都提供加速站点,这里还是用阿里云演示,因为有账号。

配置镜像加速器

3. 初体验

安装完成之后,这里不急着往下说,先来体验一下;很方便的就将自己的项目打包然后运行,步骤如下:

  • 准备一个项目

    这里就直接创建一个默认的API项目(基于.NetCore3.1)即可,什么都不做。

  • 编写Dockerfile

    在项目根目录下增加一个Dockerfile文件,里面内容如下:

    具体内容如下

    FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim
    WORKDIR /app
    COPY . .
    EXPOSE 80
    ENTRYPOINT ["dotnet", "DockerDemo.dll"]
    

    设置Dockerfile的文件属性为始终复制,如下:

    以文件系统的形式发布项目,指定本地目录,如下:

  • 将发布之后的文件拷贝到装有Docker的主机上

    将项目进行发布,把发布之后的文件拷贝到我的阿里云服务器上,用到的工具是FinalShell(一个工具完成连接服务器和上传文件,很好用),如下:

  • 打包为镜像

    进入发布文件目录,执行docker build命令,将发布文件打包为一个镜像,如下:

    上图中的mydockerdemo 是镜像名,可以自定义;通过docker images查看镜像是否生成,如下:

  • 根据镜像启动容器(里面包含我们的项目)

    镜像生成之后,就可以通过docker run指令根据镜像启动容器了,即启动我们的项目

    docker run -d --name mydockerdemo -p 9999:80 mydockerdemo
    

    -d:后台模式运行;

    --name:给运行中的容器指定一个名字;

    -p:指定端口映射, 主机的端口9999映射到容器的端80,因为在容器里面我们的项目是以80 端口启动的;

    最后一个参数是上一步生成的镜像名称, 即根据此镜像启动一个容器实例。

  • 测试访问看看,只要配置了云服务器的安全组和防火墙放开9999端口,那么外网就可以访问了,如下:

可能有小伙伴说,也挺麻烦的;其实编写Dockerfile,打包镜像等操作都是一次性的,只要生成了镜像,后续其他环境直接根据镜像启动即可,不用再单独安装.NetCore运行时等基础设施了,打包好的镜像里包含了完整的运行环境。

总结

这里先初步了解Docker,并进行安装和体验,接下来的文章会把常用命令、Dockerfile、容器数据卷挂载、DockerCompose及DockerSwarm等相关知识依次说到。Docker已经成为必备技能,再不学习就Out了,关注“Code综艺圈”,和我一起学习吧;

图片

\

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

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

相关文章

设置su为不需要密码切换为root

设置su为不需要密码 如果需要对某用户su命令也不需要输入密码,则需要修改下列的:1--->如果没有wheel组 则用sudo groupadd wheel创建命令为 sudo groupadd wheel;2---->sudo vim /etc/group将username和root加入到wheel用户组内 如图&a…

被女朋友拉黑后,我写了个“舔狗”必备神器

全世界只有3.14 % 的人关注了 青少年数学之旅 “ 在一个阳光明媚的清晨,我打开窗户呼吸了一口新鲜空气。阳光灿烂,岁月静好,又是一个约女朋友出去爬山吃饭看电影的好日子。 图片来自包图网 想到女朋友的大眼睛,我脸上不禁洋溢起了…

涨薪关键之反射机制,引得项目经理对你的看重,加薪触手可及!!!!

前言 就比如我前几天被面试官问什么是反射??? 而我的回答是!!! 反射是动态语言的关键,反射允许程序在执行期间借助Reflection API取得任何类的内部信息,并能直接操作任曦对象的内…

如何摆脱「自我否定」状态

大家好,我是Z哥。你最近正处于自我否定的状态吗?如果不是的话,回想一下最近的一次处于这种状态是什么时候?当时的感受如何?以及,最终是如何走出这个状态的?不着急,给你 1 分钟回忆一…

struct and union

[url]http://hi.baidu.com/tweigh/blog/item/5303d2ef6e2720eace1b3e9d.html[/url]1. struct的巨大作用面对一个人的大型C/C程序时,只看其对struct的使用情况我们就可以对其编写者的编程经验进行评估。因为一个大型的C/C程序,势必要 涉及一些(甚至大量)进…

编码GBK的不可映射字符

为什么80%的码农都做不了架构师?>>> 由于JDK是国际版的,在编译的时候,如果我们没有用-encoding参数指定我们的JAVA源程序的编码格式, 则javac.exe首先获得我们操作系统默认采用的编码格式, 也即在编译java…

低调的大神!他改变了半导体产业!史上唯一两次获得诺贝尔物理奖,却几乎被人遗忘...

全世界只有3.14 % 的人关注了青少年数学之旅两次获得诺贝尔奖的科学家,世界上仅有这四个人!他们是:1. 居里夫人(Marie Curie,1867~1934),波兰科学家,他的丈夫叫皮埃尔居里,两人合称“居里夫妇”! 1903年,居里夫妇和亨利...2.约翰巴丁 美国物理…

入职第一天,我接手了号称【屎山】的祖传代码,这还能卷吗???

公司各种各样的祖传代码都是令新人虎躯一震的代码,因为有时候你根本不知道它是干嘛的,甚至觉得它毫无用处,关键是 还绝对不能动,碰一段改半年,别问我怎么知道的。最讽刺的是,你可能为了修改代码&#xff0c…

设计模式之迭代器

迭代器模式介绍集合的结构迭代器模式是一种行为设计模式,让你能在不暴露集合底层表现形式(列表、栈、树等)的情况下遍历集合中所有的元素。迭代器模式满足了单一职责和开闭原则,外界的调用方也不需要知道任何一个不同的数据结构在使用上的遍历差异。迭代…

倒啤酒竟能拿到诺贝尔物理学大奖!明明是普通操作,凭什么这么强?

全世界只有3.14 % 的人关注了青少年数学之旅倒啤酒,是艺术,更是一门学问。每个初来社会报道的男孩,都必须掌握这个酷炫技能。它是从古自今的文化传承,也是一个男人成熟的标志。向快手老铁致敬然而,理想很丰满&#xff…

铁山靠之——HarmonyOS基础 - 1.0

HarmonyOS学习第一章 一、HarmonyOS简介1.1 安装和使用DevEco Studio1.2 环境配置1.3 项目创建1.4 运行程序1.5 基本工程目录1.5.1 工程级目录1.5.2 模块级目录1.5.3 app.json51.5.4 module.json51.5.5 main_pages.json 二、TypeScript快速入门2.1 简介2.2 基础类型2.2.1 布尔值…

vb.net2.0 Hmac-md5加密算法

2019独角兽企业重金招聘Python工程师标准>>> <summary> Hmac-md5加密算法。 </summary> <param name"APassWord">加密串(即密码)</param> <param name"ASourceStr">原始字符串</param> <returns>&l…

解决VS2010 beta2 安装后html标签和script智能提示不起作用的问题

此文已经移至&#xff1a;解决VS2010 beta2 安装后html标签和script智能提示不起作用的问题 安装VS2010 beta2 后&#xff0c;发现正常的html标签的智能提示不起作用&#xff0c;比如<a>,<p>&#xff0c;还有在<script>里面也没有了js的智能提示。 解决办法…

初级Java开发面试必问项!!! 标识符、字面值、变量、数据类型,该学学了!

最近事情太多&#xff0c;没太时间写博客。今天抽空再整理整理面试中的那点事吧&#xff0c;帮助那些正在找工作或想跳槽找工作的学弟学妹们。 前面我己写过多篇推文&#xff0c;相信看过我文章的伙伴们已经了解掌握了不少。从目前流行的开发技术、常见的面试问题以及问题的答…

你还记得当初是怎么对我的吗? | 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅&#xff08;图源阿粪青&#xff0c;侵权删&#xff09;

4项技巧使你不再为PHP中文编码苦恼

2019独角兽企业重金招聘Python工程师标准>>> PHP程序设计中中文编码问题曾经困扰很多人&#xff0c;导致这个问题的原因其实很简单&#xff0c;每个国家(或区域)都规定了计算机信息交换用的字符编码集&#xff0c;如美国的扩展 ASCII 码&#xff0c;中国的 GB2312-8…

Hello Blazor:(9)Source Generators生成导航菜单

前言最近写了多篇关于Source Generators的文章&#xff0c;发现它确实可以简化我们的部分开发工作。这不&#xff0c;我又盯上了Blazor。问题默认的NavMenu.razor组件用于显示导航菜单&#xff0c;它的部分代码如下&#xff1a;<div class"NavMenuCssClass" oncli…

你绝对没想过原来数学家这么流氓,一言不合就进行暴力证明

全世界只有3.14 % 的人关注了青少年数学之旅1最经典的“无字证明”1989 年的《美国数学月刊》&#xff08;American Mathematical Monthly&#xff09;上有一个貌似非常困难的数学问题&#xff1a;下图是由一个个小三角形组成的正六边形棋盘&#xff0c;现在请你用右边的三种&a…

面试阿里被问到JVM,不逼逼赖赖,直接盘给面试官看!!!

面试阿里被问到JVM&#xff0c;不逼逼赖赖&#xff0c;直接盘给面试官看&#xff01;&#xff01;&#xff01;概述JVM体系结构类加载机制类加载器类加载过程双亲委派机制全盘负责委托机制打破双亲委派机制自定义类加载器实现JVM运行时数据区程序计数器虚拟机栈本地方法栈堆方法…

数学图形(1.20)N叶草

有N个叶子的草 相关软件参见:数学图形可视化工具,使用自己定义语法的脚本代码生成数学图形.该软件免费开源.QQ交流群: 367752815 vertices 1000 t from 0 to (2*PI) r 10 n rand_int2(3, 10) p 1 cos(n*t) sin(n*t)^2 x p*cos(t) y p*sin(t) N叶草面_1 vertices D1:5…