Docker入门学习笔记

学习笔记网址推送:wDocker 10分钟快速入门_哔哩哔哩_bilibili

docker是用来解决什么问题的?

例如当你在本地主机写了个web应用,而你打算将该应用发送给其他客户端进行案例测试和运行,若是传统做法,就比较复杂:

1.第一种方法是在等待端需要配置相同软件,数据库、Web服务器等,还不一定能使案例运行起来。

2.第二种方法是模拟完全相同的本地开发环境,使用虚拟机,可虚拟机的运行会在每一次不同案例的传送选择新的虚拟机类型和硬件选择,体积臃肿,性能也会受到一定的影响。

3.第三种方法就是docker的使用。

docker在概念上与虚拟机非常类似,但是却轻量很多,docker不会去模拟底层的硬件,而是为每一个应用提供完全隔离的运行环境,而该种环境在docker种也被称为container/容器,并且docker在使用中是完全可以做到跨系统的。

docker内有三大重要概念:1.Dockerfile;2.Image/镜像;3.Container/容器。

Image镜像可以等同于虚拟机的快照(Snapshot),内部包含了所需部署的应用程序及相关联的所有库,通过镜像可以创建许多个不同类型的Container容器,这里的容器可以理解为多台运行起来的虚拟机,每个容器是独立运行的,而各个容器中则包含了所运行的程序。

Dockerfile则类似于一个自动化脚本,可以看作是一个引导文件,其功能类似于在虚拟机中安装和创建软件和前置设置,而在docker中则是通过该脚本自动化完成了。

Docker的安装和使用

windos和mac用户可在官网直接下载一个Docker Desktop的应用,或者winows10以上还可以使用WSL2(windows下的linux子系统)来运行docker;

而在linux系统中则可直接使用包管理工具进行安装;

若使用的是vscode,可以使用安装docker的扩展。

Docker应用部署

1.首先在需要配置部署的根目录下创建一个Dockerfile文件;

 2.在Dockerfile文件的第一行需要使用FROM命令指定一个基础镜像(base image),这里使用FROM可极大简便程序运行的前奏,可在docker hub中找到各种不同类型的操作系统,不同的操作系统提供不同的包管理(这里的操作系统指的只是内核以上的系统应用,实际系统仍然是docker下面的linux内核),3.8是版本,slim-buster是一个标签(Tag);

FROM python:3.8-slim-buster

 3.第二行通过WOEKDIR指定了之后所有Docker命令的工作路径(working directory);

WOEKDIR /app

4.第三行通过COPY命令将所有程序拷贝到Docker镜像中,COPY <本地路径><目标路径>,第一个参数代表本地文件,“.”代表程序根目录下的所有文件,第二个参数代表Docker镜像中的路径,“.”表示当前的工作路径,也就是之前指定的app目录;

COPY ..

 5.第四行通过RUN,创建镜像时可运行任意的shell命令(echo pwd rm这些指令都是合法的)。

RUN pip3 install -r requirements.txt

6.通过上述所有命令,即可完成一个Docker镜像的创建。

 7.在镜像创建完成后,会使用到CMD来指定当Dcoker容器运行起来以后要执行的命令(容器≠镜像),和之前RUN命令不一样,RUN是创建docker时使用的,而CMD时当你在运行容器时才可以使用的操作,CMD [“可执行文件”,“参数1”,“参数2”]。

8.接下来可以在TERMINAL中通过docker build来创建一个镜像, 方法中的-t制定了我们镜像的名字(-t: tag/标签),最后面的“.”则是告诉docker应该在当前目录下寻找这个Dockerfile,不可省略。第一次调用docker build会比较慢,docker会先下载必要的镜像文件,然后逐行运行我们的指令,后续由于会保留缓存,保留每一个操作(该操作也在docker中被称为分层),则会相对较快。

docker build -t my-finance .

9. 有了镜像后,则可通过docker run来启动一个容器,需要注意的是-p参数,它会将容器中的一个端口映射到本地主机上,这样才可以通过主机访问容器中的Web应用(或其他),前面的80是我们本地主机的端口,而后面的5000则是容器上的端口,不可搞反;而-d(--detached)参数则是让容器在后台运行的操作,这样容器的输出就不会直接显示在控制台;

docker run -p 80:5000 -d my-finance

10.完成上述操作后,则可在服务端的主机上运行本机的程序应用。 

可通过docker desttop图形化界面可以看到应用在后台的全部输出,这对于调试十分方便,同时我们还可以看到当前容器的各种信息,该处的containers中显示了我们创建的所有容器,可以选择停止,重启,删除他们,也可通过shell进行控制。

操作命令:

列举所有容器:docker ps
停止容器:docker stop <容器 ID>
重启容器:docker restart <容器 ID>
删除容器:docker rm <容器 ID>
启动一个远程Shell:docker exec -it <容器 ID> /bin/bash

需要注意的是,当删除一个容器时,所有数据会同时消失,不过可以使用docker提供的Volume(数据卷)进行数据保存,可以当作是本地主机和不同容器中共享的文件夹,当你在某一个容器中修改了Volume的数据,它会同时反映在其他的容器上,可通过docker volume create来创建一个数据卷。随后在启动容器时通过-v进行参数指定,将这个数据卷挂载到容器的某一个路径上,如案例所示,当前数据卷my-finance-data挂载到了/etc/finance这个路径下,向该路径写入的任何数据都会被永久保存在这个数据卷中。

docker volume create my-finance-data
docker run -dp 80:5000 -v my-finance-data:/etc/finance my-finance

前文的案例只是涉及单个容器,而在实际运行中,则可以使用多个容器相互运行,并行操作,如可以将一个容器运行web应用,另一个容器进行数据库系统的运行,这样可以做到数据和应用逻辑的有效分离。

docker compose

创建docker-compose.yml文件进行配置,分别定义web容器和数据库db容器;

同时还可以通过volumes指定数据卷用来永久存放数据

 定义完成后,在终端使用docker compose up -d进行运行所有容器。

 与之相对应的,可以使用docker compose down来停止并删除所有的容器

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

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

相关文章

conda虚拟环境中安装的cuda和服务器上安装的cuda的异同

服务器上已安装Nvidia提供的cuda&#xff0c;nvcc -V时会出现已安装的CUDA版本。如下图所示&#xff0c;服务器上已安装好的cuda版本为10.1。 但是当我们在Anaconda虚拟环境下安装pytorch或者paddlepaddle等深度学习框架的GPU版本时&#xff0c;通常会选择较高版本的cuda&…

Git 简介及使用(1)

目录 一、在 Linux 环境中安装 Git 1. 先检查当前服务器中是否有 Git&#xff08;如果有显示如下图&#xff09; 2. 安装Git 3. 然后重复第一步&#xff1a;查看 Git 的版本信息即可 二、Git 的初始化及配置 1. 创建目录 2. 对仓库进行初始化 3. 新增两个配置项&#xff08…

PyTorch神经网络-激励函数

在PyTorch 神经网络当中&#xff0c;使用激励函数处理非线性的问题&#xff0c;普通的神经网络出来的数据一般是线性的关系&#xff0c;但是遇到比较复杂的数据的话&#xff0c;需要激励函数处理一些比较难以处理的问题&#xff0c;非线性结果就是其中的情况之一。 FAQ:为什么要…

【Java 进阶篇】Ajax 实现——JQuery 实现方式 `get` 与 `post`

嗨&#xff0c;亲爱的小白们&#xff01;欢迎来到这篇关于使用 jQuery 实现 Ajax 请求的博客。在前端开发中&#xff0c;Ajax 是一项非常重要的技术&#xff0c;它使我们能够在不刷新整个页面的情况下与服务器进行数据交互。而在 jQuery 中&#xff0c;get 和 post 方法提供了简…

全流量分析应用运行和访问情况

在当今数字化时代&#xff0c;应用程序的运行和访问情况对于企业和组织来说至关重要。无论是在线销售平台、移动应用还是企业内部系统&#xff0c;应用的性能和可用性直接影响着用户体验、业务流程以及组织效率。因此&#xff0c;对应用的运行和访问情况进行全面分析和评估&…

JZM-D30室温探针台技术参数

概况&#xff1a; JZM-D30室温探针台的诸多设计都是专用的&#xff0c;探针台的配置主要是根据用户的需求进行选配及设计。例如&#xff0c;要求的磁场型号&#xff0c;电源型号&#xff0c;磁场值&#xff0c;样品台的尺寸等&#xff0c;除此之外&#xff0c;该探针台和我司自…

Go 语言中的map和内存泄漏

map在内存中总是会增长&#xff1b;它不会收缩。因此&#xff0c;如果map导致了一些内存问题&#xff0c;你可以尝试不同的选项&#xff0c;比如强制 Go 重新创建map或使用指针。 在 Go 中使用map时&#xff0c;我们需要了解map增长和收缩的一些重要特性。让我们深入探讨这一点…

架构开发与优化咨询和实施服务

服务概述 得益于硬件平台算力的提升&#xff0c;汽车电子电气架构的集成度逐渐提高&#xff0c;从单体ECU、到功能域集成控制器、到区域集成控制器&#xff0c;多域融合成为了目前行业中软件工程的重要工作内容。同时&#xff0c;在传统控制器C代码开发的基础上&#xff0c;C、…

手把手从零开始训练YOLOv8改进项目(官方ultralytics版本)教程

手把手从零开始训练 YOLOv8 改进项目 (Ultralytics版本) 教程,改进 YOLOv8 算法 本文以Windows服务器为例:从零开始使用Windows训练 YOLOv8 算法项目 《芒果 YOLOv8 目标检测算法 改进》 适用于芒果专栏改进 YOLOv8 算法 文章目录 官方 YOLOv8 算法介绍改进网络代码汇总第…

ROS参数服务器(Param):通信模型、Hello World与拓展

参数服务器在ROS中主要用于实现不同节点之间的数据共享。 参数服务器相当于是独立于所有节点的一个公共容器&#xff0c;可以将数据存储在该容器中&#xff0c;被不同的节点调用&#xff0c;当然不同的节点也可以往其中存储数据。 使用场景一般存储一些机器人的固有参数&…

AIGC 技术在淘淘秀场景的探索与实践

本文介绍了AIGC相关领域的爆发式增长&#xff0c;并探讨了淘宝秀秀(AI买家秀)的设计思路和技术方案。文章涵盖了图像生成、仿真形象生成和换背景方案&#xff0c;以及模型流程串联等关键技术。 文章还介绍了淘淘秀的使用流程和遇到的问题及处理方法。最后&#xff0c;文章展望…

安全项目简介

安全项目 基线检查 密码 复杂度有效期 用户访问和身份验证 禁用administrator禁用guest认证失败锁定 安全防护软件操作系统安全配置 关闭自动播放 文件和目录权限端口限制安全审计… 等保测评 是否举办了安全意识培训是否有应急响应预案有无第一负责人 工作内容 测评准备…

【VRTK】【VR开发】【Unity】7-配置交互能力和向量追踪

【前情提要】 目前为止,我们虽然设定了手模型和动画,还能够正确根据输入触发动作,不过还未能与任何物体互动。要互动,需要给手部设定相应的Interactor能力。 【配置Interactor的抓取功能】 在Hierarchy中选中[VRTK_CAMERA_RIGS_SETUP] ➤ Camera Rigs, Tracked Alias ➤ …

Attingo:西部数据部分SSD存在硬件设计制造缺陷

今年5月&#xff0c;西部数据SanDisk Extreme Pro硬盘陆续有用户反馈有故障发生&#xff0c;用户反馈最多的问题是数据丢失和硬件损坏。8月份&#xff0c;因为这个事情&#xff0c;还被爆出&#xff0c;西部数据面临用户的集体诉讼。 近期&#xff0c;有一个专门从事数据恢复的…

高防CDN的需求分析:社会与企业发展的推动力

在当今数字化飞速发展的时代&#xff0c;网络安全成为社会和企业发展的关键因素之一。随着网络攻击手段的不断升级&#xff0c;企业对于高防CDN&#xff08;内容分发网络&#xff09;的需求逐渐成为保障业务稳健运行的重要部分。从社会和企业发展的角度来看&#xff0c;高防CDN…

【Java 进阶篇】Ajax 实现——原生JS方式

大家好&#xff0c;欢迎来到这篇关于原生 JavaScript 中使用 Ajax 实现的博客&#xff01;在前端开发中&#xff0c;我们经常需要与服务器进行数据交互&#xff0c;而 Ajax&#xff08;Asynchronous JavaScript and XML&#xff09;是一种用于创建异步请求的技术&#xff0c;它…

Javaweb之Vue生命周期的详细解析

2.4 生命周期 vue的生命周期&#xff1a;指的是vue对象从创建到销毁的过程。vue的生命周期包含8个阶段&#xff1a;每触发一个生命周期事件&#xff0c;会自动执行一个生命周期方法&#xff0c;这些生命周期方法也被称为钩子方法。其完整的生命周期如下图所示&#xff1a; 状…

代码随想录算法训练营第四十九天| 123.买卖股票的最佳时机III 188.买卖股票的最佳时机IV

文档讲解&#xff1a;代码随想录 视频讲解&#xff1a;代码随想录B站账号 状态&#xff1a;看了视频题解和文章解析后做出来了 123.买卖股票的最佳时机III class Solution:def maxProfit(self, prices: List[int]) -> int:if len(prices) 0:return 0dp [[0] * 5 for _ in…

安装2023最新版PyCharm来开发Python应用程序

安装2023最新版PyCharm来开发Python应用程序 Install the Latest JetBrains PyCharm Community to Develop Python Applications Python 3.12.0最新版已经由其官网python.org发布&#xff0c;这也是2023年底的最新的版本。 0. PyCharm与Python 自从1991年2月20日&#xff0…

【Java】抽象类和接口

文章目录 一、抽象类1.抽象类的概念2.抽象类的语法3.抽象类的特性4.抽象类的作用 二、接口1.接口的概念2.语法规则3.接口的使用4.接口的特性5.实现多个接口6.接口间的继承7.接口的使用实例8.Clonable 接口和深拷贝9.抽象类和接口的区别 三、Object类1.获取对象信息2.对象的比较…