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

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

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

相关文章

基于MS16F3211芯片的触摸控制灯的状态变化和亮度控制(11.17,PWM控制与状态切换)

1.今天做了什么 2.过程思路 看了两天文档才慢慢看懂&#xff0c;有点满了 现在接着前一天的思路&#xff0c;可以通过代码来控制pwm的占空比。我这里采用的是TP0定时器 初步控制pwm的占空比 void LED_PWM_OPEN(void) {//占空比 PWM1-Y-PB2PWM1DH 0X0F;PWM1DL 0X00; //占…

基于 gin + websocket 即时通讯项目 (一、项目初始化)

基于 gin websocket 即时通讯项目 1、安装环境与初始化 搜索各种包官网 https://pkg.go.dev/ 1.1 安装 grom go get -u gorm.io/grom 1.2 安装 MySQL 驱动 go get -u gorm.io/driver/sqlite go get -u gorm.io/driver/mysql 1.3 安装 gin go get -u github.com/gin-gonic/gi…

​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​

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

代码随想录算法训练营第三十九天【动态规划part02】 | 62.不同路径、63. 不同路径 II

62.不同路径 题目链接&#xff1a; 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 求解思路&#xff1a; 动规五部曲 确定dp数组及其下标含义&#xff1a;dp[i][j] 表示从&#xff08;0,0&#xff09;出发&#xff0c;到&#xff08;i,j&#x…

课程设计(毕业设计)—基于机器学习(CNN+opencv+python)的车牌识别—(可远程调试)计算机专业课程设计(毕业设计)

基于机器学习(CNNopencvpython)的车牌识别 下载本文机器学习(CNNopencvpython)的车牌识别系统完整的代码和参考报告链接&#xff08;或者可以联系博主koukou(壹壹23七2五六98)&#xff0c;获取源码和报告&#xff09;https://download.csdn.net/download/shooter7/88548767此处…

腾讯云服务器租用价格,腾讯云服务器价格流量怎么算?

首先&#xff0c;让我们来看看腾讯云服务器租用价格。根据您的需求不同&#xff0c;腾讯云提供了多种不同的配置选项&#xff0c;从轻量级应用服务器到高性能的GPU服务器&#xff0c;都可以满足您的需求。以下是一些常见的腾讯云服务器租用价格&#xff1a; 一、腾讯云服务器租…

代码随想录 Day49 单调栈01 LeetCode LeetCodeT739每日温度 T496 下一个最大元素I

前言 折磨的死去活来的动态规划终于结束啦,今天秋秋给大家带来两题非常经典的单调栈问题,可能你不清楚单调栈是什么,可以用来解决什么问题,今天我们就来一步一步的逐渐了解单调栈,到能够灵活使用单调栈.注意以下讲解中&#xff0c;顺序的描述为 从栈头到栈底的顺序 什么时候用单…

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

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

STM32 HAL库函数HAL_SPI_Receive_IT和HAL_SPI_Receive的区别

背景 前段时间开发一个按键板驱动&#xff0c;该板用的STM32F103系列单片机&#xff0c;前任工程师用STM32CubeMX生成的工程&#xff0c;里面全是HAL库调用&#xff0c;我接手后&#xff0c;学习了下HAL库的用法&#xff0c;踩坑不少&#xff0c;特别是带IT后缀的函数&#xf…

Typecho用宝塔面板建站(保姆级教程)

提前准备&#xff1a; 1 已备案域名 注意:在腾讯云备案的域名部署阿里云服务器的话还需要在阿里云备案&#xff0c;反之亦然 2 服务器 服务器操作系统设置为windows 服务器实例设置&#xff1a;依次开放8888/888/443/3000-4000/21/22端口 个人用的阿里云&#xff0c;到安全组配…

带您识别RJ45网口连接器/网口插座口的LED灯的平脚/斜脚,带弹/不带弹细节区分

Hqst华强盛&#xff08;盈盛电子&#xff09;导读&#xff1a;网口连接器,网口插座&#xff0c;也叫网口母座,因为产品规格众多&#xff0c;常常因为细小差别&#xff0c;耽误工程设计级或者生产排期延误&#xff0c;今天就带大家一起来认识下平脚RJ45网口连接器/网口插座与斜脚…

51.Sentinel微服务保护

目录 &#xff08;1&#xff09;初识Sentinel。 &#xff08;1.1&#xff09;雪崩问题及解决方案。 &#xff08;1.1.1&#xff09;雪崩问题。 &#xff08;1.1.2&#xff09;解决雪崩问题的四种方式。 &#xff08;1.1.3&#xff09;总结。 &#xff08;1.2&#xff09;…