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 问题 ①大型项目组件复杂,运行环境复杂,部署时依赖复杂,出现兼容性问题。 ②开发,测试,生产环境有差异。不同的环境操作系统不同 解决 ①Docket将应用、依赖、函数库、配置一起打…...
1.1、Python基础-注释、变量声明及命名规则、数据类型
1.1、Python基础 Python基础1、注释2、变量3、数据类型 Python基础 1、注释 注释是给程序员看的,为了让程序员方便阅读代码,解释器会忽略注释。使用自己熟悉的语言,适当的对代 码进行注释说明是一种良好的编码习惯。 注释写法 #我是单行注…...
Python第三方库安装——使用vscode、pycharm安装Python第三方库
[TOC](Python第三方库安装——使用vscode、pycharm安装Python第三方库) # 前言 在这里介绍vscode、Pycharm安装python第三方库的方法。 操作系统:windows10 专业版 环境如下: Pycharm Comunity 2022.3 Visual Studio Code 2019 Python 3.8 pipÿ…...
【vue】组件通选方式
父子传值 props $emit 这是最基本的父子组件通讯方式。通过 props 属性将数据从父组件传递给子组件,而子组件通过触发事件($emit)将数据发送回父组件。 $children $parent 通过 $parent 属性可以访问父组件的实例,通过 $child…...
java 使用策略模式减少if
使用多态:通过使用面向对象的多态特性,可以将不同的逻辑封装到不同的类中,避免大量的 if 语句。使用继承和接口来定义通用的方法,并让具体的实现类实现这些方法。 使用设计模式:使用设计模式可以更好地组织和管理代码逻…...
第1章 引论
前言 这一章,阐述本书的目的,并简要复习离散数学以及程序设计的一些概念: 看到程序在较大输入情况下的运行性能与在适量输入情况下的运行性能具有同等重要性总结本书其余部分所需要的数学基础简要复习递归 1.1 本书讨论的内容 在许多问题当中…...
深入探究Linux文件:.sh、.swp文件的作用与意义 (linux .sh.swp)
近年来,Linux操作系统已经成为了许多服务器、云计算平台、嵌入式设备等领域的首选。Linux操作系统囊括了大量的命令和文件,而其中 .sh 和 .swp 文件是许多 Linux 用户较为熟悉的两种文件类型。那么,这两种文件的作用和意义是什么呢࿱…...

优雅的使用String字符串处理各种类型转换
文章目录 🌟 优雅的使用String字符串处理各种类型转换🍊 基本类型转字符串🍊 字符串转基本类型🍊 字符串与字符数组的转换🍊 字符串与字节数组的转换🍊 其他类型转字符串🍊 总结 📕我…...

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

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

tomcat的负载均衡、动静分离(nginx联动)
动静分离: 访问静态页面和动态页面分开 实现动态和静态页面负载均衡 实验5台虚拟机 一、动态负载均衡 3台虚拟机模拟: 代理服务器:30 tomcat动态页面:21、22 代理服务器: 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,您需要编写适用于服务器端的代码,而不是浏览器端的代码。以下是一些示例代码,用于在Node.js中创建一个简单的HTTP服务器并在浏览器中访问它: // 引入Node.js内置的http模块 const http require(http);…...

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

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

测试C#调用Windows Media Player组件
新建基于.net framework的Winform项目,可以通过添加引用的方式选择COM组件中的Windows Media Player组件,如下图所示: 也可以在VS2022的工具箱空白处点右键,选择“选择项…”菜单。 在弹出的选择工具箱项窗口中…...
面试经典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实例:通过圆括号使用and或or来组成复杂的表达式 目标数据库及表:使用 DRobot数据库,"T_Drobot" 表 假设我们需要查询"T_Drobot" 表,并从"T_Drobot"表中查询选取creator为 "…...

如何将本地 PDF 文件进行翻译
在日常工作和学习中,我们经常会遇到需要翻译 PDF 文件的情况。比如,我们需要将一份英文的技术文档翻译成中文,或者将一份中文的法律文件翻译成英文。 传统上,我们可以使用专业翻译软件或服务来翻译 PDF 文件。但是,这…...
Node.js的readline模块 命令行交互的模块
Node.js是一个非常流行的JavaScript运行时环境,它提供了许多内置模块来帮助我们开发应用程序。其中之一是readline模块,它提供了一种简单的方法来读取用户输入并进行交互。 本文将详细介绍readline模块的API和使用案例,并附有代码注释。 re…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...

微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
嵌入式常见 CPU 架构
架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集,单周期执行;低功耗、CIP 独立外设;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel(原始…...

MySQL体系架构解析(三):MySQL目录与启动配置全解析
MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录,这个目录下存放着许多可执行文件。与其他系统的可执行文件类似,这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中,用…...