Docker入门学习笔记

news2024/12/22 18:41:33

学习笔记网址推送: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应用,另一个容器进行数据库系统的运行,这样可以做到数据和应用逻辑的有效分离。

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

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

相关文章

十个一手app拉新地推拉新推广接单平台,放单/接任务渠道

做过地推拉新的朋友一定都非常清楚&#xff0c;app拉新推广一手接单平台&#xff0c;和非一手接任务平台之间的收益差&#xff0c;可以用天壤之别来形容。那么一手app拉新渠道应该怎么找&#xff1f;下面这十个常见的地推拉新app接单平台&#xff0c;一定要收藏。 1. 聚量推客…

TCP协议相关实验

文章目录 一.TCP相关实验1.理解CLOSE_WAIT状态2.理解TIME_WAIT状态3.解决TIME_WAIT状态引起的bind失败的方法4.理解listen的第二个参数5.使用Wireshark分析TCP通信流程 二.TCP与UDP1.TCP与UDP对比2.用UDP实现可靠传输&#xff08;经典面试题&#xff09; 一.TCP相关实验 1.理解…

C++模版初阶

泛型编程 如下的交换函数中&#xff0c;它们只有类型的不同&#xff0c;应该怎么实现一个通用的交换函数呢&#xff1f; void Swap(int& left, int& right) {int temp left;left right;right temp; }void Swap(double& left, double& right) {double temp…

大模型重塑软件设计,南京真我加入飞桨技术伙伴,大模型生态圈成员又添一员!...

为帮助伙伴更快、更好的应用大模型技术&#xff0c;飞桨技术伙伴体系及权益基于星河共创计划全面升级&#xff0c;通过丰富的场景、技术、算力、品牌等资源&#xff0c;为伙伴企业提供一站式的大模型资源对接&#xff0c;全面降低创建AI原生应用的门槛。 近日&#xff0c;南京真…

数据同步策略解读

前言 我们都知道在大多数情况下&#xff0c;通过浏览器查询到的数据都是缓存数据&#xff0c;如果缓存数据与数据库的数据存在较大差异的话&#xff0c;可能会产生比较严重的后果的。对此&#xff0c;我们应该也必须保证数据库数据、缓存数据的一致性&#xff0c;也就是就是缓…

Swagger(3):Swagger入门案例

1 编写SpringBoot项目 新建一个Rest请求控制器。 package com.example.demo.controller;import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.Reques…

Linux下查看pytorch运行时真正调用的cuda版本

一般情况我们会安装使用多个cuda版本。而且pytorch在安装时也会自动安装一个对应的版本。 正确查看方式&#xff1a; 想要查看 Pytorch 实际使用的运行时的 cuda 目录&#xff0c;可以直接输出 cpp_extension.py 中的 CUDA_HOME 变量。 import torch import torch.utils imp…

​软考-高级-系统架构设计师教程(清华第2版)【第13章 层次式架构设计理论与实践(P466~495)-思维导图】​

软考-高级-系统架构设计师教程&#xff08;清华第2版&#xff09;【第13章 层次式架构设计理论与实践&#xff08;P466~495&#xff09;-思维导图】 课本里章节里所有蓝色字体的思维导图

原型网络Prototypical Network的python代码逐行解释,新手小白也可学会!!-----系列6 (承接系列5)

文章目录 一、原始代码---随机采样和评估模型二、详细解释分析每一行代码 一、原始代码—随机采样和评估模型 def randomSample(self,D_set): #从D_set随机取支持集和查询集&#xff08;20个类中的其中一个类&#xff0c;shape为[20,105,105]&#xff09;index_list list(ran…

算法设计与分析 | 分治棋盘

题目 在一个2^k * 2^k个方格组成的棋盘中&#xff0c;恰有一个方格与其他方格不同&#xff0c;称该方格为一特殊方格&#xff0c;且称该棋盘为一特殊棋盘。在棋盘覆盖问题中&#xff0c;要用图示的4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格&#xff0…

2023亚太杯数学建模思路 - 案例:异常检测

文章目录 赛题思路一、简介 -- 关于异常检测异常检测监督学习 二、异常检测算法2. 箱线图分析3. 基于距离/密度4. 基于划分思想 建模资料 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 一、简介 – 关于异常…

【Linux】进程间通信 -- 管道

对于进程间通信的理解 首先&#xff0c;进程间通信的本质是&#xff0c;让不同的进程看到同一份资源&#xff08;这份资源不能隶属于任何一个进程&#xff0c;即应该是共享的&#xff09;。而进程间通信的目的是为了实现多进程之间的协同。 但由于进程运行具有独立性&#xff…

stable diffusion十七种controlnet详细使用方法总结

个人网站&#xff1a;https://tianfeng.space 前言 最近不知道发点什么&#xff0c;做个controlnet 使用方法总结好了&#xff0c;如果你们对所有controlnet用法&#xff0c;可能了解但是有点模糊&#xff0c;希望能对你们有用。 一、SD controlnet 我统一下其他参数&#…

python 对图像进行聚类分析

import cv2 import numpy as np from sklearn.cluster import KMeans import time# 中文路径读取 def cv_imread(filePath, cv2_falgcv2.COLOR_BGR2RGB): cv_img cv2.imdecode(np.fromfile(filePath, dtypenp.uint8), cv2_falg) return cv_img# 自定义装饰器计算时间 def…

解决:虚拟机远程连接失败

问题 使用FinalShell远程连接虚拟机的时候连接不上 发现 虚拟机用的VMware&#xff0c;Linux发行版是CentOs 7&#xff0c;发现在虚拟机中使用ping www.baidu.com是成功的&#xff0c;但是使用FinalShell远程连接不上虚拟机&#xff0c;本地网络也ping不通虚拟机&#xff0c…

10-19 HttpServletResponse

相应的对象 web开发模型&#xff1a;基于请求与相应的模型 一问一答的模型 Response对象:响应对象,封装服务器给客户端的相关的信息 顶级接口: ServletResponse 父接口:HttpServletResponse response对象的功能分为以下四种:(都是服务器干的事注意) 设置响应头信息; 发送状态码…

2023年【四川省安全员A证】考试资料及四川省安全员A证考试试卷

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年四川省安全员A证考试资料为正在备考四川省安全员A证操作证的学员准备的理论考试专题&#xff0c;每个月更新的四川省安全员A证考试试卷祝您顺利通过四川省安全员A证考试。 1、【多选题】《建设工程安全生产管理…

竞赛选题 疲劳驾驶检测系统 python

文章目录 0 前言1 课题背景2 Dlib人脸识别2.1 简介2.2 Dlib优点2.3 相关代码2.4 人脸数据库2.5 人脸录入加识别效果 3 疲劳检测算法3.1 眼睛检测算法3.2 打哈欠检测算法3.3 点头检测算法 4 PyQt54.1 简介4.2相关界面代码 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#x…

GamingTcUI.dll丢失修复,最全面的GamingTcUI.dll修复指南

热衷于电脑游戏的用户可能会在启动游戏时遇到这样的错误信息&#xff1a;"无法启动应用&#xff0c;因为找不到GamingTcUI.dll"。那么这个GamingTcUI.dll文件是什么&#xff1f;如何解决这个问题呢&#xff1f;我们将在本文中进行详细讲解。 一.GamingTcUI.dll是什么…

kibana8.10.4简单使用

1.创建discovery里的日志项目 点击stack management 选择kibana里的数据视图&#xff0c;右上角创建数据视图&#xff0c;输入名称。索引范围。例子 example-* ,匹配以example-开头的所有index。 然后点击 保存数据视图到kibana&#xff0c; 2.Kibana多用户创建及角色权限控…