当前位置: 首页 > news >正文

03初始Docker

一、初始Docker

1.什么是Docker

问题

①大型项目组件复杂,运行环境复杂,部署时依赖复杂,出现兼容性问题。

②开发,测试,生产环境有差异。不同的环境操作系统不同

解决

①Docket将应用、依赖、函数库、配置一起打包,形成可移植镜像。每个应用放在隔离容器运行,避免相互干扰。

②Docker镜像包含完整的运行环境,包括系统库函数,仅依赖系统的Linux内核。可以在任意的linux系统运行。

 2.Docker架构

镜像

将应用程序及其依赖、环境、配置打包在一起

容器

镜像运行起来的就是容器,一个镜像可以运行多个容器

Docker架构

服务端:接收命令或远程请求,操作镜像或容器

客户端:发送操作或者请求到Docker的服务端

DockerHub

一个镜像托管的服务器

3.镜像操作命令

 案例:从DockerHub中拉取一个nginx镜像并查看

systemctl start docker  # 启动docker服务

①去镜像仓库搜索nginx镜像

 ②在linux通过命令拉取到本地 docker pull nginx

 ③查看本地的镜像docker images

案例:利用docker save将nginx镜像导出磁盘,然后再通过load加载回来

①把镜像包导出tar

docker save -o nginx.tar nginx:latest

②把导出的tar加载到本地镜像

docker load -i nignx.tar

 镜像操作有哪些?

  • docker images  查看镜像
  • docker rmi 删除镜像
  • docker pull 拉取镜像到本地
  • docker push 把镜像推到仓库
  • docker save 把镜像打包成tar
  • docker load 把tar文件加载到本地镜像

4.容器相关命令

①docker run 创建容器

②docker pause 暂停容器

③docker unpause 暂停到运行容器

④docker stop 停止容器

⑤docker start 停止到运行容器

⑥docker ps 查看运行的容器的状态

⑥docker rm 删除指定容器

⑦docker logs 查看容器运行日志

⑧docker exec 进入容器执行其他命令

5.Docker基本操作-容器

案例一:创建并运行一个Nginx容器

命令: docker run --name mn -p 80:80 -d nginx

①docker run创建并运行一个容器

②--name给容器起了名字是mn

③-p虚拟机的端口与容器端口映射 虚拟机端口:容器端口

④-d 后台运行

⑤nginx镜像名称

测试:

查看运行容器的状态docker ps

 ①访问虚拟机的ip地址

②持续查看容器日志

docker logs mn -f

 总结

 

案例二: 进入Nginx容器,修改HTML文件内容,添加“Hello world”

①进入容器docker exec -it mn bash

docker exec 进入容器内部,执行命令

-it与容器交互

mn进入容器的名称

bash进入容器后执行的命令,bash是一个linux终端交互命令

②进入nginx的HTML所在目录 /usr/share/nginx/html

cd /usr/share/nginx/html

③修改index.html的内容

sed -i 's#Welcome to nginx# Hello world #g' index.html

sed -i 's#<head>#<head><meta charset="utf-8">#g' index.html

总结

练习:进入redis容器,并执行redis-cli客户端命令,存入num=666

①创建并允许一个Redis容器

docker run --name redis -p 6379:6379 -d redis redis-server --appendonly yes

②进入redis容器

docker exec -it redis bash

③执行redis-cli客户端命令

redis-cli

④设置数据 set num 666

⑤获取数据get num

二、数据卷Volume

1.数据卷简介

数据卷解决容器与数据耦合问题。将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全

数据卷Volume是一个虚拟目录,指向虚拟机系统的某个目录(/var/lib/docker/volumes)

容器目录与虚拟机目录相关联,容器与虚拟机修改同时更新。

2.数据卷操作

docker volume[写命令]

①create 创建一个volume

②inspect 显示一个或多个volume信息

③ls 列出所有的volume

④prune 删除未使用的volume

⑤rm 删除一个或多个指定的volume

3.案例:创建一个数据卷,并查看数据卷在宿主机的目录位置

①创建数据卷html

docker volume create html

②查看所有的数据卷

docker volume ls

③查看数据卷的详细信息

docker volume inspect

④删除指定的html数据卷,-f是强制删除

docker volume rm -f html

4.挂载数据卷-V(volume)

创建容器时,通过-v参数来挂载一个数据卷到某个容器目录。

 

案例:创建一个nginx容器,修改容器内的html目录内的index.html内容

①创建容器并挂载数据卷到容器内的HTML目录

docker run --name mn -p 80:80 -v html:/usr/share/nginx/html  -d nginx

-v 数据卷:容器目录的路径

如果容器运行时volume的html不存在,会自动被创建出来

②进入html数据卷所在位置,并修改HTML内容

# 查看html数据卷的位置

docker volume inspect html

# 进入该目录

cd /var/lib/docker/volumes/html/_data

# 修改文件

vi index.html

三、Dockerfile自定义镜像

概念:镜像将应用程序以及系统函数库,环境,配置,依赖打包而成。

结构:以mysql镜像为例子

 

①基础镜像:mysql应用依赖的系统函数库,环境,配置,文件。

②层:在基础镜像基础上添加安装包,依赖,配置,每次操作后都形成一个层 。镜像是分层的

③入口:启动的脚本

2.Dockerfile语法

概念:Dockerfile是一个文本文件,包含一个个指令,用指令说明执行的操作来构建镜像。每一个指令形成一层Layer

3.案例:基于Ubuntu镜像构建一个新镜像,运行一个java项目

Dockerfile

# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar# 安装JDK
RUN cd $JAVA_DIR \&& tar -xf ./jdk8.tar.gz \&& mv ./jdk1.8.0_144 ./java8# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

步骤:

①新建一个空文件夹docker-demo,把资料复制在这个文件夹

②运行命令:

docker build -t javaweb:1.0 .

③查看镜像:

④启动此镜像:

docker run --name web -p 8090:8090 -d javaweb:1.0

⑤访问:

http://192.168.137.129:8090/hello/count

四、DockerCompose

1.什么是DockerCompose

①DockerCompose基于Compose文件快速部署分布式应用,无需手动一个个创建和运行容器

②Compose是一个文本文件,通过指令定义集群中每个容器怎样运行

 

2.案例:将cloud-demo微服务集群利用DockerCompose部署

①查看课前资料提供的cloud-demo文件夹,里面已经编写好了docker-compose文件

② 修改自己的cloud-demo项目,将数据库、nacos地址都命名为docker-compose中的服务名

③使用maven打包工具,将项目中的每个微服务都打包为app.jar

④将打包好的app.jar拷贝到cloud-demo中的每一个对应的子目录中

⑤将cloud-demo上传至虚拟机,利用 docker-compose up -d 来部署

http://192.168.137.129:10010/user/2?authorization=admin

⑥停止是docker-compose down

五、Docker镜像仓库

1.搭建私有镜像仓库

①配置Docker信任地址

# 打开要修改的文件
vi /etc/docker/daemon.json
# 添加内容:
"insecure-registries":["http://192.168.150.101:8080"]
# 重加载
systemctl daemon-reload
# 重启docker
systemctl restart docker

②创建Compose

version: '3.0'
services:registry:image: registryvolumes:- ./registry-data:/var/lib/registryui:image: joxit/docker-registry-ui:staticports:- 8080:80environment:- REGISTRY_TITLE=私有仓库- REGISTRY_URL=http://registry:5000depends_on:- registry

③部署

docker-compose up -d

2.向镜像仓库推送镜像

①推送镜像到私有镜像服务必须先tag

docker tag nginx:latest 192.168.137.129:8080/nginx:1.0

②上传

docker push 192.168.137.129:8080/nginx:1.0

3.从镜像仓库拉取镜像

docker pull 192.168.137.129:8080/nginx:1.0

4.总结

相关文章:

03初始Docker

一、初始Docker 1.什么是Docker 问题 ①大型项目组件复杂&#xff0c;运行环境复杂&#xff0c;部署时依赖复杂&#xff0c;出现兼容性问题。 ②开发&#xff0c;测试&#xff0c;生产环境有差异。不同的环境操作系统不同 解决 ①Docket将应用、依赖、函数库、配置一起打…...

1.1、Python基础-注释、变量声明及命名规则、数据类型

1.1、Python基础 Python基础1、注释2、变量3、数据类型 Python基础 1、注释 注释是给程序员看的&#xff0c;为了让程序员方便阅读代码&#xff0c;解释器会忽略注释。使用自己熟悉的语言&#xff0c;适当的对代 码进行注释说明是一种良好的编码习惯。 注释写法 #我是单行注…...

Python第三方库安装——使用vscode、pycharm安装Python第三方库

[TOC](Python第三方库安装——使用vscode、pycharm安装Python第三方库) # 前言 在这里介绍vscode、Pycharm安装python第三方库的方法。 操作系统&#xff1a;windows10 专业版 环境如下&#xff1a; Pycharm Comunity 2022.3 Visual Studio Code 2019 Python 3.8 pip&#xff…...

【vue】组件通选方式

父子传值 props $emit 这是最基本的父子组件通讯方式。通过 props 属性将数据从父组件传递给子组件&#xff0c;而子组件通过触发事件&#xff08;$emit&#xff09;将数据发送回父组件。 $children $parent 通过 $parent 属性可以访问父组件的实例&#xff0c;通过 $child…...

java 使用策略模式减少if

使用多态&#xff1a;通过使用面向对象的多态特性&#xff0c;可以将不同的逻辑封装到不同的类中&#xff0c;避免大量的 if 语句。使用继承和接口来定义通用的方法&#xff0c;并让具体的实现类实现这些方法。 使用设计模式&#xff1a;使用设计模式可以更好地组织和管理代码逻…...

第1章 引论

前言 这一章&#xff0c;阐述本书的目的&#xff0c;并简要复习离散数学以及程序设计的一些概念&#xff1a; 看到程序在较大输入情况下的运行性能与在适量输入情况下的运行性能具有同等重要性总结本书其余部分所需要的数学基础简要复习递归 1.1 本书讨论的内容 在许多问题当中…...

深入探究Linux文件:.sh、.swp文件的作用与意义 (linux .sh.swp)

近年来&#xff0c;Linux操作系统已经成为了许多服务器、云计算平台、嵌入式设备等领域的首选。Linux操作系统囊括了大量的命令和文件&#xff0c;而其中 .sh 和 .swp 文件是许多 Linux 用户较为熟悉的两种文件类型。那么&#xff0c;这两种文件的作用和意义是什么呢&#xff1…...

优雅的使用String字符串处理各种类型转换

文章目录 &#x1f31f; 优雅的使用String字符串处理各种类型转换&#x1f34a; 基本类型转字符串&#x1f34a; 字符串转基本类型&#x1f34a; 字符串与字符数组的转换&#x1f34a; 字符串与字节数组的转换&#x1f34a; 其他类型转字符串&#x1f34a; 总结 &#x1f4d5;我…...

Harmony 个人中心(页面交互、跳转、导航、容器组件)

个人中心 前言正文一、创建工程二、登录① 更换启动页面② 拓展修饰符③ 页面跳转④ 等待进度条 三、导航栏四、首页① 轮播图② 网格列表 五、我的① 带参数跳转 六、源码 前言 今天是1024&#xff0c;祝各位程序员们&#xff0c;钱多事少离家近&#xff0c;不秃也强bug黄。在…...

AlDente Pro for Mac: 掌控电池充电的终极解决方案

你是否曾经为了保护你的MacBook的电池&#xff0c;而苦恼于无法控制它的充电速度&#xff1f;AlDente Pro for Mac 是一款专为Mac用户设计的电池管理工具&#xff0c;它能帮助你解决这个问题。 AlDente Pro for Mac 是一款电池最大充电限制软件&#xff0c;它能够让你自由地设…...

tomcat的负载均衡、动静分离(nginx联动)

动静分离&#xff1a; 访问静态页面和动态页面分开 实现动态和静态页面负载均衡 实验5台虚拟机 一、动态负载均衡 3台虚拟机模拟&#xff1a; 代理服务器&#xff1a;30 tomcat动态页面&#xff1a;21、22 代理服务器&#xff1a; proxy_pass http://tomcat; proxy_set_h…...

基于单片机的温湿度检测及远程控制系统设计

目 录 引 言. 2 第一章 绪 论. 2 1.1 单片机简介 2 1.2 传感器简介 2 1.3 LCD液晶显示器简介 2 1.4 本设计的主要内容和目标 2 第二章 系统总体设计. 2 2.1 系统功能要求与技术指标 2 2.1.1 功能要求. 2 2.1.2 技术指标. 2 2.2 系统设计思路 2 2.3系统设计原则 2 2.4 系…...

前后端交互系统:在Node.js中运行JavaScript

在Node.js中运行JavaScript&#xff0c;您需要编写适用于服务器端的代码&#xff0c;而不是浏览器端的代码。以下是一些示例代码&#xff0c;用于在Node.js中创建一个简单的HTTP服务器并在浏览器中访问它&#xff1a; // 引入Node.js内置的http模块 const http require(http);…...

Maven学习

Maven介绍 Maven是Apache的一个开源项目&#xff0c;主要服务于基于Java平台的项目构建&#xff0c;依赖管理和项目信息管理。 Maven可以让团队能够更科学的构建项目&#xff0c;我们可以用配置文件的方式&#xff0c;对项目的名称、描述、项目版本号、项目依赖等信息进行描述…...

《动手学深度学习 Pytorch版》 10.2 注意力汇聚:Nadaraya-Watson 核回归

import torch from torch import nn from d2l import torch as d2l1964 年提出的 Nadaraya-Watson 核回归模型是一个简单但完整的例子&#xff0c;可以用于演示具有注意力机制的机器学习。 10.2.1 生成数据集 根据下面的非线性函数生成一个人工数据集&#xff0c;其中噪声项 …...

测试C#调用Windows Media Player组件

新建基于.net framework的Winform项目&#xff0c;可以通过添加引用的方式选择COM组件中的Windows Media Player组件&#xff0c;如下图所示&#xff1a;   也可以在VS2022的工具箱空白处点右键&#xff0c;选择“选择项…”菜单。   在弹出的选择工具箱项窗口中&#xf…...

面试经典150题——Day20

文章目录 一、题目二、题解 一、题目 14. Longest Common Prefix Write a function to find the longest common prefix string amongst an array of strings. If there is no common prefix, return an empty string “”. Example 1: Input: strs [“flower”,“flow”…...

[SQL开发笔记]AND OR运算符复杂表达式开发实例

结合 AND & OR实例&#xff1a;通过圆括号使用and或or来组成复杂的表达式 目标数据库及表&#xff1a;使用 DRobot数据库&#xff0c;"T_Drobot" 表 假设我们需要查询"T_Drobot" 表&#xff0c;并从"T_Drobot"表中查询选取creator为 "…...

如何将本地 PDF 文件进行翻译

在日常工作和学习中&#xff0c;我们经常会遇到需要翻译 PDF 文件的情况。比如&#xff0c;我们需要将一份英文的技术文档翻译成中文&#xff0c;或者将一份中文的法律文件翻译成英文。 传统上&#xff0c;我们可以使用专业翻译软件或服务来翻译 PDF 文件。但是&#xff0c;这…...

Node.js的readline模块 命令行交互的模块

Node.js是一个非常流行的JavaScript运行时环境&#xff0c;它提供了许多内置模块来帮助我们开发应用程序。其中之一是readline模块&#xff0c;它提供了一种简单的方法来读取用户输入并进行交互。 本文将详细介绍readline模块的API和使用案例&#xff0c;并附有代码注释。 re…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...