Docker从无到有

主要为windows下docker的安装与使用~

初始Docker

Docker理解

对于docker的加简介,我们可以官网获取它的概念,接下来就从什么是docker、为什么要使用docker以及它的作用来进行一个快速入门

前提:项目在发布时,不仅需要其jar包同时需要配置其环境,在不同的平台上,每一个平台都需要配置一次,这个流程相当的繁琐且重复,这个时候,docker就提供了解决办法

1. 什么是docker

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。

2. docker的作用

(1)提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。

(2)提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。

(3)组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。

3. 为什么使用docker

简化开发流程:开发者可以将应用程序及其依赖项打包成一个容器,避免由于环境差异导致的问题。

提高部署效率:容器可以快速部署和启动,节省了部署时间。

提高系统资源利用率:Docker可以更高效地利用系统资源,减少资源浪费。

提高可维护性:容器可以更容易地管理和更新,确保应用程序的稳定性和安全性。

Docker架构

docker的基本组成包括镜像、容器、仓库

1. 镜像(images)

镜像是用于创建docker容器的模板,就相当于是一个 root 文件系统,里边包含了程序、资源、配置等

2. 容器(container)

容器是独立运行的一个或一组应用,是镜像运行时的实体。

3. 仓库(Repository)

仓库可看成一个代码控制中心,用来保存镜像,可以理解为代码控制中的代码仓库。一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。

通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。

4. 各组件之间的关系

仓库用来存放镜像,当然我们自己的镜像也可以存放的私有仓库中。镜像下载后需要进行,运行的过程中就会产生容器,我们的服务由容器来提供。用面向对象进行理解的话,镜像就相当于我们的一个类,里边包含了对象和属性,但是这个类使用时需要实例化,实例化这个就是我们的容器。

Docker在windows的安装

windows安装参照Windows Docker 安装 | 菜鸟教程

Docker安装Mysql

  1. 使用$ docker pull mysql:latest命令拉取mysql最新版镜像

  1. $ docker images命令行可以查看是否成功安装

  1. $ docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql运行mysql容器:
  • -p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。
  • MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码
  • -e :设置环境变量,参数类型为KEY=VALUE,可以设置多个,环境由要安装应用的官方提供
  • mysql:指运行镜像的名字,一般由两部分组成,镜像名:镜像版本,不写版本默认最新版本

在第一次运行时发生了如下错误,端口号被占用

#执行查询端口 netstat -ano| findstr :3306 查看端口使用情况

使用taskkill -PID 4 杀死该进程

如果显示拒绝访问,则使用管理身份打开cmd,然后执行

  1. 使用docker ps查看

Docker数据持久化

对于docker的概念请理解上来看,docker所具有的隔离性,会使得容器消失时,容器内的数据也随之消失,但是在某些情况下,容器丢弃后,可是容器中的数据我不想丢弃的时候,我们一般会使用两种方法,一个是数据卷,一个是挂载主目录。

数据卷

数据卷可以理解为目录或文件,设计目的就是为了数据的持久化和共享

挂载数据卷的容器,称为数据卷容器;数据卷完全独立于容器的生存周期,所以容器删除时,对应挂载的数据卷不会被删除。

通过将容器内的目录挂载到主机上面,就可以让数据实时同步,不管是主机改动,还是容器里有变动,都会同步更新

1.1. Docker数据卷的创建与查看方法

1.1.1. 创建一个数据卷 My_Volume是数据卷名
docker volume create My_Volume
1.1.2. 查看本地数据卷
docker volume ls
1.1.3. 查看某个数据卷的具体信息
docker volume inspect My_Volume
1.1.4. docker启动一个挂载数据卷的容器
docker run -d -P \--name web \--mount source=My_Volume,target=/webapp \training/webapp \python app.py
  • -d表示创建的docker容器以后台方式运行;
  • -P表示将docker容器所有端口发布到主机端口,docker容器将每个公开的端口绑定到主机上一个随机端口,且主机的随机范围在/proc/sys/net/ipv4/ip_local_port_range文件中查看;
  • --name web表示创建的容器名字为web;
  • --mount source=My_Volume,target=/webapp表示加载My_Volume数据卷到web容器的/webapp目录上;
  • training/webapp表示创建web容器的镜像;

1.2. docker数据卷的删除

1.2.1. docker删除某个数据卷
docker volume rm 数据卷名
1.2.2. docker删除所有数据卷
docker volume prune

1.3. MySql在docker中的持久化

1.3.1. 删除之前的mysql容器

这里只是因为反复练习所以需要删除,如果不是联系的话,可以不删除

1.3.2. 创建MySql_Volume数据卷
docker volume create MySql_Volume

1.3.3. docker启动一个挂载数据卷的容器
docker run -itd --name mysql01 --mount source=MySql_Volume,target=/data mysql

--name :该容器的名称

--mount:表述挂载,等同于-v

source=MySql_Volume,target=/data:表示将该容器挂载在数据卷MySql_Volume的data下

mysql:表示创建该容器的镜像

挂载成功校验:

1.通过 exec 命令对指定的容器执行 bash:

docker exec -it 容器ID或name  bash

2.切换到指定的容器目录下

3.创建一个文件

4.在本地目录进行查看

挂载本地目录

Docker容器启动时,如果要挂载宿主机上的一个目录,可以用-v 或者 - mount参数指定。

# docker run -it -v 主机目录:容器目录

-v参数中,冒号":"前面的目录是宿主机目录,后面的目录是容器内目录。

冒号”:”前后的路径必须是绝对路径,以下斜线“/”开头。

宿主机目录如果不存在,则会自动生成。

1.1. MySql在docker中的持久化

1.1.1. 删除之前mysql容器

1.1.2. 使用命令运行容器并挂载
run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql

其中,/home/mysql/conf 是主机目录,/etc/mysql/conf.d是容器目录,后边data是容器目录

注意:如果按照上述方法写主机目录,docker会在虚拟机寻找此目录而非虚拟机

挂载在windows目录下,地址为/d/home/...    /d表示挂载在d盘

1.1.3. 查看是否成功

tips:

--mount 以及 -v的区别:

--mount 参数:

这是一种更为灵活和强大的挂载方式,允许你指定多个选项。

使用 --mount 参数,你可以指定挂载的类型(volume、bind mount),源路径、目标路径,并且可以设置一些额外的选项,比如读写权限。

-v 参数:

这是一种简化的挂载方式,提供了较为简洁的语法。

用 -v 参数,你只需提供源路径和目标路径即可。

Docker容器相关命令

常用的镜像命令

忘记命令时可以使用--help查看

1)查看安装的镜像:

docker images

2)下载指定镜像:从docker仓库下载指定镜像,也叫拉取和git相同

docker pull 镜像名

3)打包指定镜像:

docker save -o 打包的包名 要打包的镜像名:版本号

4)删除指定镜像:

docker rmi 镜像名:版本

5)解析打包的镜像:

docker load -i 包名 -q

-i :后跟要解析的包名

-q :不要输出信息,可选

常用的容器命令

1)创建容器:

docker run -d --name 容器名 -p 宿主机端口:进程端口(容器内) 镜像名称

-d:表示后台运行,一般不省略

--name :后跟容器名

-p :后跟端口映射

-e :环境变量,可选

命令最后添加镜像名称

2)查看运行的容器:

docker ps

3)查看所有容器:

docker ps -a

4)停止容器:

docker stop 容器名

5)启动容器:

docker start 容器名

6)查看日志:

docker logs -f 容器名

-f:持续输出日志信息

7)进入容器:一个容器就模拟了一个操作系统

docker exec -it 容器名 bash

-it:表示添加一个可输入的终端,后跟容器名

bash:交互方式,bash表示命令行交互方式

8)删除容器:

docker rm 容器名

注意:删除运行的容器时会提示报错,有两种办法:1、停止在删除,2、容器名后面添加-f参数进行强制删除

9)查看容器详情:

docker inspect 容器名

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

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

相关文章

FSMC读取FPGA的FIFO

一、硬件说明 FSMC配置 单片机的代码如下&#xff1a; #define VALUE_ADDRESS_AD1 (__IO uint16_t *)0x60400000while (1){if(!HAL_GPIO_ReadPin(GPIOF, GPIO_PIN_8)) //数据非空{data *(__IO uint16_t *)VALUE_ADDRESS_AD1;data2 *(__IO uint16_t *)VALUE_ADDRESS_AD1…

英伟达助力日本量子技术创新战略!合作打造量子超级计算机 ABCI-Q

内容来源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 文丨浪味仙 排版丨沛贤 深度好文&#xff1a;1000字丨5分钟阅读 摘要&#xff1a;日本将在英伟达的AI和HPC基础设施的帮助下&#xff0c;通过大规模开发&#xff0c;在量子计算和人工智能领域取…

xfce4 panel 不能显示QQ,钉钉的状态图标

有一段时间不能显示了&#xff0c;之前刚装完系统的时候很长时间内都是好的&#xff0c;所以刚开始肯定是支持显示这些状态图标的。就是因为不能显示的原因&#xff0c;所以还装了lxQt桌面&#xff0c;这个桌面确实不错。不过还是有时会怀念xfce4&#xff0c;想看看能不能解决这…

go语言实现心跳机制样例

目录 1、服务端代码&#xff1a; 2、客户端代码&#xff1a; 3、最终实现效果&#xff1a; 1、服务端代码&#xff1a; package mainimport ("fmt""net" )func handleClient(conn net.Conn) {defer conn.Close()fmt.Println("Client connected:&qu…

怎么用PHP语言实现远程控制电器

怎么用PHP语言实现远程控制电器呢&#xff1f; 本文描述了使用PHP语言调用HTTP接口&#xff0c;实现控制电器&#xff0c;通过控制电器的电源线路来实现电器控制。 可选用产品&#xff1a;可根据实际场景需求&#xff0c;选择对应的规格 序号设备名称厂商1智能WiFi通断器AC3统…

【Redis | 第十篇】Redis与MySQL保证数据一致性(两种解决思路)

文章目录 10.Redis和MySQL如何保证数据一致性10.1双写一致性问题10.2数据高度一致性10.3数据同步允许延时10.3.1中间件通知10.3.2延迟双删 10.Redis和MySQL如何保证数据一致性 10.1双写一致性问题 Redis作为缓存&#xff0c;它是如何与MySQL的数据保持同步的呢&#xff1f;特…

【Docker】Docker 实践(一):在 Docker 中部署第一个应用

Docker 实践&#xff08;一&#xff09;&#xff1a;在 Docker 中部署第一个应用 1.使用 YUM 方式安装 Docker2.验证 Docker 环境3.在 Docker 中部署第一个应用3.1 小插曲&#xff1a;docker pull 报 missing signature key 错误3.2 重新安装 Nginx 1.使用 YUM 方式安装 Docker…

Stable Diffusion 常用放大算法详解

常用放大算法 图像放大算法大致有两种&#xff1a; 传统图像放大算法&#xff08;Lantent、Lanczos、Nearest&#xff09;AI图像放大算法&#xff08;4x-UltraSharp、BSRGAN、ESRGAN等&#xff09; 传统图像放大算法是基于插值算法&#xff0c;计算出图像放大后新位置的像素…

不同技术实现鼠标滚动图片的放大缩小

摘要&#xff1a; 最近弄PC端的需求时&#xff0c;要求在layui技术下实现鼠标滚动图片的放大缩小的功能&#xff01;下面来总结一下不同框架剩下这功能&#xff01; layui: 看了一下layui文档&#xff0c;其实这有自带的组件的&#xff01;但是又版本要求的!并且layui的官方文档…

STM32学习和实践笔记(22):PWM的介绍以及在STM32中的实现原理

PWM是 Pulse Width Modulation 的缩写&#xff0c;中文意思就是脉冲宽度调制&#xff0c;简称脉宽调制。它是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术&#xff0c;其控制简单、灵活和动态响应好等优点而成为电力电子技术最广泛应用的控制方式&#xff…

Ubuntu16.04搭建webrtc服务器

本人查阅无数资料,历时3周搭建成功 一、服务器组成 AppRTC 房间+Web服务器 https://github.com/webrtc/apprtcCollider 信令服务器,在AppRTC源码里CoTurn coturn打洞+中继服务器 Nginx 服务器,用于Web访问代理和Websocket代理。AppRTC 房间+Web服务器使用python+js语言 App…

RFID技术引领3C手机镜头模组产线智能化转型

RFID技术引领3C手机镜头模组产线智能化转型 应用背景 随着智能手机市场的快速发展与技术创新&#xff0c;手机镜头模组作为影像功能的核心组件&#xff0c;其生产精度、效率及供应链管理的重要性日益凸显。面对复杂多变的市场需求、严格的品质要求以及激烈的市场竞争&#xf…

面试集中营—ElasticSearch架构篇

一、为什么用ElasticSearch&#xff1f; 1、支持多种数据类型。它可以处理非结构化、数值和地理信息等多种类型的数据&#xff1b; 2、简单的RESTful API。ES提供了一个简单易用的RESTful API&#xff0c;使得它可以从任何编程语言中调用&#xff0c;降低了学习的曲线。 3、近实…

12G-SDI视频分配器JR104D-4K-SDI

JR104D-4K-SDI 12G-SDI分配器1分4,12G-SDI分配器1分2,12G-SDI分配器1分8,机架式12G-SDI分配器1分4&#xff0c;12G-SDI分配器4组1分4&#xff0c;12G-SDI分配器16组1分4&#xff0c; 广播级指标生产厂家。 一、产品介绍&#xff1a; JR104D-4K-SDI视频分配器&#xff0c;是按…

Pytest用例自定义 - 重复、并行、串行

简介&#xff1a;面对快速迭代和持续交付的需求&#xff0c;提高测试效率变得至关重要。并行测试因其显著的时间节省优势而备受青睐。然而&#xff0c;并非所有测试都适合并行执行。在某些情况下&#xff0c;串行执行是必要的&#xff0c;以确保测试的正确性和稳定性。本文将探…

HarmonyOS 鸿蒙下载三方依赖 ohpm环境搭建

前言 ohpm&#xff08;One Hundred Percent Mermaid &#xff09;是一个集成了Mermaid的命令工具&#xff0c;可以用于生成关系图、序列图、等各种图表。我们可以使用ohpm来生成漂亮且可读性强的图表。 本期教大家如何搭建ophm环境&#xff1a; 一、在DevEco Studio中&#…

c++图论基础(2)

目录 图的存储方式&#xff1a; 邻接矩阵&#xff1a; 代码实现&#xff1a; 邻接表&#xff1a; 代码实现&#xff1a; 邻接矩阵邻接表对比&#xff1a; 带权图&#xff1a; 邻接矩阵存储&#xff1a; 邻接表存储(代码实现)&#xff1a; 图的存储方式&#xff1a; 邻…

【数据结构】合并两个有序链表

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 Definition for singly-linked list.struct ListNode {int val;struct ListNode *next;};typedef struct ListNode ListNode; struct ListNode* mergeTwoLists(struct Lis…

【网络安全】对称加密、非对称加密以及密钥分配

目录 1、对称加密 2、非对称加密 3、如何分配对称密钥&#xff1f; 4、如何分配非对称密钥&#xff1f; 1、对称加密 所谓对称加密&#xff0c;就是指加密密钥与解密密钥都使用相同的密钥。如下图所示&#xff0c;通信双方使用的就是对称加密密钥。//代表&#xff1a;DES和…

《DiffusionNER: Boundary Diffusion for Named Entity Recognition》

Submitted 22 May, 2023; originally announced May 2023. Comments: Accepted to ACL 2023, submission version https://github.com/tricktreat/DiffusionNER 在这里插入图片描述 问题&#xff1a; 命名实体识别任务中存在的噪声跨度&#xff08;边界不清晰&#xff09…