Spring Cloud之Docker的学习【详细】

目录

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:80nginx \

以上命令就是将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.25environment: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.rhkb.cn/news/173767.html

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

相关文章

磁盘的结构(磁道,扇区,盘面,柱面,物理地址)

目录 1.磁盘、磁道、扇区的概念1.磁盘2.磁道3.扇区 2.如何在磁盘中读/写数据3.盘面、柱面的概念4.磁盘的物理地址1.根据地址读取一个“块” 5.磁盘的分类1.活动头磁道2.固定头磁盘3.根据盘片是否可更换 1.磁盘、磁道、扇区的概念 1.磁盘 磁盘的表面由一些磁性物质组成&#xf…

项目基础配置

1、Spring整合MyBatis&#xff1a; 在子工程中加入所需要的依赖 准备jdbc.properties 创建spring的配置文件、整合spring和mybatis 在spring的配置文件中加载jdbc.properties 配置数据源 测试数据库连接 配置SqlSessionFactoryBean 装配数据源 指定XXXMapper.xml文件的位…

DIANA算法c++实现

第一步对具有最大直径的簇中每个点计算平均相异度找出最大的点放入splinter group&#xff0c;其余放在放入splinter group 第二步 在old party里找出到splinter group中点的最近距离 < 到old party中点的最近距离的点&#xff0c;并将该点加入splinter group 重复第二步的…

Vue2 跨域问题报错AxiosError net::ERR_FAILED、 Network Error、ERR_NETWORK

请求场景&#xff1a; 当前页面URL&#xff1a;http://127.0.0.1:8000/testcase 跳转请求页面URL&#xff1a;http://127.0.0.1:5000/testcase_orm 使用axios请求 时 页面提示跨域报错 跨域报错信息 > Access to XMLHttpRequest at http://127.0.0.1:5000/testcase_orm fr…

Python爬虫(二十四)_selenium案例:执行javascript脚本

本章叫介绍如何使用selenium在浏览器中使用js脚本&#xff0c;更多内容请参考&#xff1a;Python学习指南 隐藏百度图片 #-*- coding:utf-8 -*- #本篇将模拟执行javascript语句from selenium import webdriver from selenium.webdriver.common.keys import Keysdriver webdri…

13. 机器学习 - 数据集的处理

文章目录 Training data splitNormalizationStandardizedONE-HOT补充&#xff1a;SOFTMAX 和 CROSS-ENTROPY Hi&#xff0c; 你好。我是茶桁。 上一节课&#xff0c;咱们讲解了『拟合』&#xff0c;了解了什么是过拟合&#xff0c;什么是欠拟合。也说过&#xff0c;如果大家以…

leetCode 76. 最小覆盖子串 + 滑动窗口 + 哈希Hash

我的往期文章&#xff1a;此题的其他解法&#xff0c;感兴趣的话可以移步看一下&#xff1a; leetCode 76. 最小覆盖子串 滑动窗口 图解&#xff08;详细&#xff09;-CSDN博客https://blog.csdn.net/weixin_41987016/article/details/134042115?spm1001.2014.3001.5501 力…

android button 按钮,设置左/右小图标,与文字居中距离

参考博客地址 功能点 支持自定义图标与文字的距离支持小图标宽高自定义支持左右自定义小图标 maven { url https://jitpack.io } implementation com.github.CMzhizhe:AppCompatButtonProject:1.0.0<com.gxx.buttonlibrary.DrawableCenterButtonandroid:layout_marginTop&…

OpenCV #以图搜图:感知哈希算法(Perceptual hash algorithm)的原理与实验

1. 介绍 感知哈希算法&#xff08;Perceptual Hash Algorithm&#xff0c;简称pHash&#xff09; 是哈希算法的一种&#xff0c;主要用来做相似图片的搜索工作。 2. 原理 感知哈希算法&#xff08;pHash&#xff09;首先将原图像缩小成一个固定大小的像素图像&#xff0c;然后…

TCP / UDP 概念 + 实验(计网自顶向下)

Github源码 moranzcw/Computer-Networking-A-Top-Down-Approach-NOTES: 《计算机网络&#xff0d;自顶向下方法(原书第6版)》编程作业&#xff0c;Wireshark实验文档的翻译和解答。 (github.com) 暂定打算分2步走&#xff0c;前置是中科大对应计网黑书的视频 第1步完成14个Wire…

Transformers实战(二)快速入门文本相似度、检索式对话机器人

Transformers实战&#xff08;二&#xff09;快速入门文本相似度、检索式对话机器人 1、文本相似度 1.1 文本相似度简介 文本匹配是一个较为宽泛的概念&#xff0c;基本上只要涉及到两段文本之间关系的&#xff0c;都可以被看作是一种文本匹配的任务&#xff0c; 只是在具体…

基于tornado BELLE 搭建本地的web 服务

我的github 将BELLE 封装成web 后端服务&#xff0c;采用tornado 框架 import timeimport torch import torch.nn as nnfrom gptq import * from modelutils import * from quant import *from transformers import AutoTokenizer import sys import json #import lightgbm a…

macOS M1安装wxPython报错

macOS12.6.6 M1安装wxPython失败&#xff1a; 报错如下&#xff1a; imagtiff.cpp:37:14: fatal error: tiff.h file not found解决办法&#xff1a; 下载源文件重新编译&#xff08;很快&#xff0c;5分钟全部搞定&#xff09;&#xff0c;分三步走&#xff1a; 第一步&…

Leetcode—21.合并两个有序链表【简单】

2023每日刷题&#xff08;十三&#xff09; Leetcode—21.合并两个有序链表 直接法实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* mergeTwoLists(struct ListNode* list1, struct…

leetCode 136.只出现一次的数字 + 位运算

136. 只出现一次的数字 - 力扣&#xff08;LeetCode&#xff09; 给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法来解决此问题&#xff0c;且该算…

STM32H750之FreeRTOS学习--------(一)初识RTOS

FreeRTOS 一、初识RTOS 裸机&#xff1a;裸机又称为前后台系统&#xff0c;前台系统指的中断服务函数&#xff0c;后台系统指的大循环&#xff0c;即应用程序 实时性差,程序轮流执行delayCPU空等待&#xff0c;效率低程序混乱&#xff0c;臃肿&#xff0c;功能都放在while循环…

vim使用

概述 vi&#xff08;visual editor&#xff09;是Unix/Linux编辑器的一种。类似于win中notepad。vim&#xff08;vi improved&#xff09;加强版 安装vim&#xff1a; $ yum install vim -y四种模式 命令模式&#xff1a;快速进行复制、粘贴、删除等操作&#xff0c;还可以…

Spring-声明式事务

声明式事务 一、简介1、准备工作2、测试 二、声明式事务概念1、编程式事务2、声明式事务3、基于注解的声明式事务1.测试无事务情况2.加入事务①Transactional注解标识的位置②事务属性&#xff1a;只读③事务属性&#xff1a;超时④事务属性&#xff1a;回滚策略⑤事务属性&…

STM32中除零运算,为何程序不崩溃?

在 C 语言中&#xff0c;除零运算会导致异常吗&#xff1f; 在 C 语言中&#xff0c;当一个数除以零时&#xff0c;会导致除法运算错误&#xff0c;通常表现为“除以零”错误或被称为“浮点异常”&#xff08;floating-point exception&#xff09;。 对于整数除法&#xff0c…