Spring Cloud之Docker的学习【详细】

news2024/11/25 4:22:10

目录

Docker

项目部署问题

总结

镜像与容器

Docker的安装

Docker基本操作

镜像相关命令

拉取镜像

镜像保存

删除镜像

镜像加载

容器相关命令

删除容器

数据卷

数据卷命令

数据挂载

自定义镜像

Dockerfile

案例

Docker-Compose

Compose文件

Docker-Compose安装

修改文件权限

Base自动补全提示


Docker

项目部署问题

大型项目组件较多,运行环境也较为复杂,部署时会碰到一些问题

  • 依赖关系复杂,容易出现兼容性问题
  • 开发、测试、生产环境有差异

Docker如何解决依赖的兼容问题的

  • 将应用的Libs (函数库)、Deps (依赖)配置与应用一起打包
  • 将每个应用放到一个隔离容器去运行,避免互相干扰

Docker解决不同操作系统的方法

Ubuntu与CentOS系统函数库的实现都是基于Linux。那么Docker就将它们的系统函数库与程序一起打包,避免Ubuntu中没有CentOS的函数方法而无法使用程序的问题

总结

Docker是一个快速交付应用、运行应用的技术

  • 可以将程序及其依赖、运行环境一起打包为一个镜像,可以迁移到任意Linux操作系统
  • 运行时利用沙箱机制形成隔离容器,各个应用互不干扰
  • 启动、移除都可以通过一行命令完成,方便快捷

Docker和虚拟机的差异

docker是一个系统进程;虚拟机是在操作系统中的操作系统

docker体积小、启动速度快、性能好;虚拟机体积大、启动速度慢、性能一般

镜像与容器

镜像:Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。

容器:镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器做隔离,对外不可见。

Docker的安装

我这里使用的是CentOS7虚拟机,使用FinalShell连接虚拟机后。输入安装指令

yum install -y docker-ce

docker的指令

systemctl start docker  # 启动docker服务

systemctl stop docker  # 停止docker服务

systemctl restart docker  # 重启docker服务

systemctl enable docker  # 开启自动开启docker服务

systemctl status docker # docker服务的状态

docker -v # 查看docker版本

配置Docker镜像(针对CentOS)

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
 "registry-mirrors":["https://n0dwemtq.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

Docker基本操作

镜像相关命令

镜像名称一般分为两部分组成:[repository]:[tag]

在没有指定tag时,默认代表最新版本镜像

拉取镜像
docker pull xxx

我先拉取Nginx测试

镜像保存

删除镜像

镜像加载

容器相关命令

访问虚拟机的80端口

使用命令进入容器内部

docker exec -it mn bash
  • docker exec :进入容器内部,执行一个命令
  • -it : 给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互
  • mn:要进入的容器的名称
  • bash:进入容器后执行的命令,bash是一个linux终端交互命令

容器中的nginx被安装在/usr/share/nginx目录下(查询Docker镜像文档知道的),修改Nginx的起始页面

在容器中没有vi的命令。只能通过sed指令来替换文本内容

sed -i 's#Welcome to nginx#hello world#g' index.html
sed -i 's#<head>#<head><meta charset="utf-8">#g' index.html

再次访问80端口

需要注意的是,ps命令默认只展示运行中的容器。如果需要查询全部容器,需要添加指令-a

删除容器

注意:并不推荐在容器内部修改文件内容,因为不会留下任何日志,无法知道究竟做过什么操作

数据卷

一个数据卷可以被多个容器挂载。一旦完成数据卷挂载,对容器的一切操作都会作用在数据卷对应的宿主机目录了。同时,我们操作宿主机的/var/lib/docker/volumes/html目录,就等于操作容器内的/usr/share/nginx/html目录了(双向绑定)。这样我们就可以不进入容器内部修改其数据文件了。

数据卷命令

docker volume命令是数据卷操作

  • create 创建一个volume
  • inspect 显示一个或多个volume的信息
  • ls 列出所有的volume
  • prune 删除未使用的volume
  • rm 删除一个或多个指定的volume
数据挂载

我们在创建容器时,可以通过 -v 参数来挂载一个数据卷到某个容器内目录,命令格式如下:

docker run \
  --name mn \
  -v html:/root/html \
  -p 8080:80
  nginx \

以上命令就是将html数据卷挂载到容器中的/root/html目录

自定义镜像

Dockerfile

构建自定义的镜像时,并不需要一个个文件去拷贝,打包。

我们只需要告诉Docker,我们的镜像的组成,需要哪些BaseImage、需要拷贝什么文件、需要安装什么依赖、启动脚本是什么,将来Docker会帮助我们构建镜像。而描述上述信息的文件就是Dockerfile文件。

Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。每一个指令都会形成一层Layer,而第一行必须是FROM,从一个基础镜像来构建。基础镜像可以是基本操作系统,如Ubuntu。也可以是其他人制作好的镜像,例如:java:8-alpine

案例

案例链接:https://pan.baidu.com/s/1MjiIuhNF90iWWIHQ_C8uPQ?pwd=zmbw

将下载好的文件移动到linux系统下的docker-demo文件下

接下来创建镜像

docker build -t javaweb:1.0 .

镜像名称为Javaweb,版本为1.0 Dockerfile在当前目录下

执行后结果

启动容器

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

访问地址yourIP:8090/hello/count

在Dockerfile中内容如下

大部分操作都是在构建Java环境,我们可以直接在构建我们镜像时引入Java的镜像将上面文件修改为后,重新构建

# 指定基础镜像
FROM java:8-alpine
COPY ./docker-demo.jar /tmp/app.jar
# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

可以看到,使用其他镜像更加轻量。

Docker-Compose

Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。

Compose文件

Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。可以看做是将多个docker run命令写到一个文件,只是语法稍有差异。格式如下

version: "3.8"
 services:
  mysql:
    image: mysql:5.7.25
    environment:
     MYSQL_ROOT_PASSWORD: 123 
    volumes:
     - "/tmp/mysql/data:/var/lib/mysql"
     - "/tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf"
  web:
    build: .
    ports:
     - "8090:8090"

Docker-Compose安装

将上面链接中的Docker-Compose下载完成后,放入linux中的/usr/local/bin目录下

修改文件权限

进入目录/usr/local/bin目录下

执行如下命令

chmod +x /usr/local/bin/docker-compose

Base自动补全提示

curl -L https://raw.githubusercontent.com/docker/compose/1.29.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose

在编辑compose文件时会像IDEA编辑yml文件一样提示配置名称

如果情况如上,则需要添加一行命令

echo "199.232.68.133 raw.githubusercontent.com">> /etc/hosts

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

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

相关文章

openGauss学习笔记-109 openGauss 数据库管理-管理用户及权限-角色

文章目录 openGauss学习笔记-109 openGauss 数据库管理-管理用户及权限-角色109.1 创建、修改和删除角色109.2 内置角色 openGauss学习笔记-109 openGauss 数据库管理-管理用户及权限-角色 角色是一组用户的集合。通过GRANT把角色授予用户后&#xff0c;用户即具有了角色的所有…

[计算机提升] Windows设置

2.1 Windows设置 Windows设置提供了一个用户界面&#xff0c;用于更改和定制Windows操作系统的各种功能和选项。通过Windows设置&#xff0c;用户可以轻松访问和修改各种系统设置&#xff0c;包括个性化选项、网络和互联网设置、设备设置、应用程序安装和管理、隐私设置等。 以…

【Linux】Linux的安装以及常见命令

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于Linux的相关操作吧 一.Linux的安装 1.创建虚拟机 2.选择linux 3.配置虚拟机 4.开启虚拟机 默认回车即可 5.安装linux 5.登录账户 6.解决网络问题 ①先查看一下…

mathtype7.4激活密钥免费2023最新

准确来讲MathPage支持MathJax技术&#xff0c;可利用MathPage技术选择发布您的Word文档与MathML方程&#xff0c;显示为网页页面。实际上我们可以这样讲兼容个版本office&#xff1a;MathType与Office有很好的兼容性&#xff0c;可与office办公软件或WPS配合使用。大家都知道支…

Java-逻辑控制

本章重点&#xff1a; 1. Java中程序的逻辑控制语句 2. Java中的输入输出方式 3. 完成猜数字游戏 1. 分支结构 1.1 if语句 //如果布尔表达式结果为true&#xff0c;执行if中的语句&#xff0c;否则不执行。 比如&#xff1a;小明&#xff0c;如果这次考试考到90分或…

leetcode经典面试150题---3.删除有序数组中的重复项

目录 题目描述 前置知识 代码 方法一 双指针 思路 图解 实现 复杂度 题目描述 给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致…

FL Studio21.2演示版下载

FL Studio 21.2 带有 stem 分离和 FL Cloud&#xff0c;这是一项专为 FL Studio 打造的具有里程碑意义的新服务。其他新功能包括 FL Studio Fruity Edition 的 Audio Clips&#xff08;音频剪辑&#xff09;和一个新的模拟建模合成器 Kepler。 为庆祝 FL Studio 21.2 的发布&am…

抖音很火的情侣飞行棋/真心话大冒险/情侣扫雷html网站源码带在线支付、代理分销等!

-------- 演示地址 -------- 演示地址&#xff1a;http://game.71.vy386.cn 演示后台&#xff1a;http://game.71.vy386.cn/admin 后台账号&#xff1a;admin888 后台密码&#xff1a;admin888 -------- 程序特色 -------- 1、完整的分销制度&#xff0c;可自定义多种不同…

黔院长 | 一文了解五脏的脏象!

你知道五脏的脏象是怎样的吗&#xff1f;下面一起来了解一下吧。 首先是我们的心&#xff0c;心主血脉&#xff0c;在体合脉&#xff0c;开窍于舌&#xff0c;其华在面。是说心脏是我们生命的根本&#xff0c;心气推动全身的血脉得以正常运行&#xff0c;心发生的生理和病理可…

C语言浮点型在内存中的存储

目录 前言&#xff1a; 引言&#xff1a; 浮点数存储规则 举个栗子&#xff1a; TIP&#xff1a; 单精度浮点数存储的模型&#xff08;float&#xff09; 双精度浮点数存储的模型&#xff08;double&#xff09; IEEE对 M 的特殊规定 IEEE对 E 的特殊规定 小试牛刀 先…

qt-C++笔记之在两个标签页中按行读取两个不同的文件并且滚动条自适应滚动范围高度

qt-C笔记之在两个标签页中按行读取两个不同的文件并且滚动条自适应滚动范围高度 code review! 文章目录 qt-C笔记之在两个标签页中按行读取两个不同的文件并且滚动条自适应滚动范围高度1.运行2.文件结构3.main.cc4.main.pro5.a.txt6.b.txt7.上述代码中QVBoxLayout&#xff0c…

EasyRecovery2024免费激活码

EasyRecovery这款软件可以恢复被删除的数据&#xff0c;那我就简单为大家介绍一下这款数据恢复软件EasyRecovery吧&#xff01; EasyRecovery是一款操作简单、功能强大数据恢复软件&#xff0c;通过EasyRecovery可以从硬盘、光盘、U盘、数码相机、手机等各种设备中恢复被删除或…

Leetcode刷题详解——下降路径最小和

1. 题目链接&#xff1a;931. 下降路径最小和 2. 题目描述&#xff1a; 给你一个 n x n 的 方形 整数数组 matrix &#xff0c;请你找出并返回通过 matrix 的下降路径 的 最小和 。 下降路径 可以从第一行中的任何元素开始&#xff0c;并从每一行中选择一个元素。在下一行选择…

vue源码分析(七)—— createComponent

文章目录 前言一、createComponent 参数说明二、createComponent 源码详解1.baseCtor的实际指向2.extend 方法3.判断Ctor是否是函数的判断4.installComponentHooks方法5.返回一个带标识的组件 vnode 前言 createComponent文件的路径&#xff1a; src\core\vdom\create-componen…

C++之C++11引入enum class与传统enum关键字总结(二百五十一)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

ubuntu配置 Conda 更改默认环境路径

我的需求是以后凡是新建一个虚拟环境都需要安装在一个挂载了大容量的分区/data里面 /home里面的是即将爆满但是还能塞点东西的硬盘. 如果您想要永久更改 Conda 的默认环境路径&#xff0c;可以编辑 Conda 的配置文件。首先&#xff0c;找到 Conda 的配置文件通常是 .condarc 文…

WAF绕过-权限控制之代码混淆造轮子48

我们拿到权限要做&#xff0c;读文件&#xff0c;写文件&#xff0c;命令执行等等&#xff0c;这些功能如果部署于对方waf环境的话&#xff0c;也会被拦截。 一个文件下载到本地之后&#xff0c;杀毒网站会对这个文件进行检测&#xff0c;有没有病毒或者木马&#xff0c;这个杀…

rhcsa目录练习

要求 在根下创建一个叫做test的目录&#xff0c;在test的目录下创建三个普通文件file1 file2 file3&#xff0c;给file1创建一个软链接aa&#xff0c;给file2创建两个硬链接&#xff0c;在test目录下创建一个ceshi的目录&#xff0c;在ceshi的目录下创建a1-a8,b1-b8,ac1-ad8的…

车载音频项目

加我微信hezkz17进数字音频系统研究开发交流答疑群(课题组) ー 1&#xff0e;负责此项目的音频链路的设计及其实现 在ADSP21375上实现音频链路的处理。如噪声门&#xff0c;压限器&#xff0c;高低通&#xff0c;PEQ、各种效果等。 2&#xff0e;负责DSP与MCU端SPI协议实现。M…

评价模型:CRITIC客观赋权法

目录 1.算法原理介绍2.算法步骤2.1 数据标准化2.2 计算信息承载量2.3 计算权重和得分 3.案例分析 1.算法原理介绍 CRITIC方法是一种客观权重赋权法&#xff0c;其基本思路是确定指标的客观权数以两个基本概念为基础。一是对比强度&#xff0c;它表示同一指标各个评价方案取值差…