Docker核心原理与实操

第一章、Docker基本概念

1、概念:Docker是一种容器技术,可以解决软件跨环境迁移问题。

2、实现原理:是一个分层复用的文件系统;每一层都是一个独立的软件;                                                                在最底层复用Linux系统的bootfs;

3、组成(7部分):

  • 仓库:用于存放镜像

  • 本地守护进程:这个就是软件运行的进程

  • 客户端:命令行中的docker 命令

  • 镜像:就是一个制作好的操作系统文件,类似安装操作系统的iso --静态的

  • 容器:就是镜像运行起来的运行态系统 ;可被创建启动停止         --动态的

  • docker-compose:用于批量管理容器的工具

  • dockerfile:使用脚本来制作镜像的工具

镜像和容器就像是面向对象编程中的  类和实例。

4、Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器

5、Docker架构

第二章、Docker常用命令

1、Docker守护进程/服务的操作命令【6个】

  • systemctl start docker
  • systemctl stop docker
  • systemctl restart docker
  • systemctl status docker
  • systemctl enable docker   //开机自启动
  • systemctl disenable docker

2、Docker 镜像的操作命令【7个】

远程镜像

  • docker search 镜像关键字                     搜索远程仓库中的镜像

    • 也可以通过hub.docker.com/网站进行搜索
  • docker pull 镜像名称:镜像版本              下载镜像到本地

  • docker push                                             把本地的镜像上传到远程仓库

本地镜像

  • 删: docker rmi 镜像名称:镜像版本

    • docker rmi 主键
    • 有容器则不能删除对应的镜像
  • 查: docker images          查询本地有啥镜像

    • docker images -q      指查询镜像的主键
  • 导入:docker load -i 压缩文件名称

  • 导出: docker sava -o 压缩文件名称 镜像名称:版本

3、Docker容器的操作命令【10个】

  • 查看容器 docker ps                                   查看当前有那些运行的容器

    • docker ps -a                       查看当前本机有那些容器(运行和停止的容器)
  • 创建容器 docker run 参数 镜像名称:版本 启动后执行的命令

    • 交互式:创建后立即进入容器,如果推出容器,则容器自动关闭(exit)

      • docker run -it 镜像名称:版本 /bin/bash     权限问题要加参数
 docker run -it --privileged=true -u=root --name=mysqlTest -v /root/data:/root/data_container mysql:5.7 /bin/bash
    • 守护式:创建容器后,不自动进入,容器在后台运行

      • docker run -id 镜像名称:版本 /bin/bash
  • 进入容器:docker exec -it 【容器的名称、容器的ID】 /bin/bash

  • 删除容器:docker rm 【容器的名称、容器的ID】

    • 运行中的容器不能删除
  • 启动容器:docker start 【容器的名称、容器的ID】

  • 停止容器:docker stop 【容器的名称、容器的ID】

  • 重启容器:docker restart 【容器的名称、容器的ID】

  • 查看容器详情:docker inspect 【容器的名称、容器的ID】

  • 把容器提交成镜像:docker commit 【容器的名称、容器的ID】 镜像名称:版本

  • 查看容器日志:docker logs -f 容器名称

容器是个动态的 stop后依然占用着资源 restart后依然可以重启;但是删除后就彻底没有了!

第三章、Docker容器的数据卷

1、数据卷概念

为了实现容器与外部交互,但又不可以直接,所以在宿主机单独搞一个数据卷,也就是一个目录,让容器内也搞一个目录,将容器内的目录挂载到宿主机的目录(数据卷),并且同步共享数据。从而实现容器内数据持久化,容器与其他容器交互,与外部机器交互。

数据卷本质:宿主机的目录/文件

容器三大作用:数据持久化:容器与外部机器通信;容器之间数据交互

2、数据卷配置

创建启动容器时,直接使用 -v 参数配置数据卷

docker run...  -v 宿主机目录(文件):容器目录(文件)

注意:目录必须为绝对路径;若目录不存在则自动创建;可挂载多个数据卷,添加多个-v

将容器目录挂载到宿主机目录,实现数据同步共享,当删除容器后 宿主机的目录及数据依然还在!容器的都没了。当其他容器挂载到此目录 就可以获取宿主机该目录下的数据 也就是实现宿主机与容器的交互。

俩容器交互 也就是将俩容器都挂载到同一宿主机的同一目录。

一个容器在数据卷内的任何操作的数据 另外一个容器在数据卷挂载的目录都可以获取。

3、数据卷容器

数据卷容器扮演一个中介的角色,只是为了在将容器目录挂载到数据卷上 书写简单些!!!

在查看各个容器mounts时,本质上:挂载到的仍然是宿主机的目录!!!

  • 配置数据卷容器c3

使用参数         -v /自定的本地目录名

docker run -it --privileged=true -u=root --name=c3 -v /volume mysql:5.7 /bin/bash

数据卷容器 自动 挂载到宿主机某个目录下 !想知道使用docker inspect c3在mounts下可看见

  • 创建容器c1挂载到数据卷容器c3

使用参数        --volumes-from  数据卷容器名

docker run -it --privileged=true -u=root --name=c1 --volumes-from c3 mysql:5.7 /bin/bash
  • 创建容器c1挂载到数据卷容器c3
 docker run -it --privileged=true -u=root --name=c2 --volumes-from c3 mysql:5.7 /bin/bash

第四章、应用部署

1、部署MySQL

 上述可能报错,正确使用以下绝对路径:

docker run -id \
> -p 3307:3306 \
> --name=c_mysql \
> -v /root/mysql/conf:/root/mysql/etc/mysql/conf.d \
> -v /root/mysql/logs:/root/mysql/logs \
> -v /root/mysql/data:/root/mysql/var/lib/mysql \
> -e MYSQL_ROOT_PASSWORD=123456 \
> mysql:5.7

docker exec -it c_mysql /bin/bash进入容器 就是打开MySQL了!!!!

直接登录:  mysql -uroot -p123456

就是亲切地 >mysql 操作界面了

Navicat连接数据库 可能会面临很多问题:防火墙、权限、端口开放、、、

2、部署redis

1、创建容器

docker run -it --privileged=true -u=root --name=redis -p 6379:6379 \

-v /home/redis/data:/data \

-v /home/redis/conf/redis.conf:/etc/redis/redis.conf \

redis:latest /bin/bash

2、启动容器

docker exec -it redis /bin/bash

3、打开服务端

root@d34513b96283:/data# redis-server

4、进入客户端

root@d34513b96283:/data# redis-server

远程连接 还要设置redis.conf  ;打开6379端口 防火墙

# 允许任何主机连接、访问
bind 127.0.0.1 改为 bind 0.0.0.0
 
# 关闭保护模式
protected-mode yes 改为 protected-mode no
 
# 允许启动后在后台运行,即关闭命令行窗口后仍能运行
daemonize no 改为 daemonize yes

注意配置文件 redis.conf 使用了挂载 -v后面就是宿主机目录 直接操作就行了 可能是空的 该咋设置就咋设置

配置文件修改后要重启docker!

第五章、dockerfile

不常用,了解即可

dockerfile本质-----是用脚本来制作镜像的工具。

  • 常用命令(8条):

    • FROM,指定当前镜像的上一个镜像名称和版本
    • COPY,拷贝宿主机上的文件到镜像中,不解压
    • RUN 在镜像中执行一条linux命令,mkdir /home/123
    • ADD,拷贝宿主机上的文件到镜像中,并且解压缩
    • ENTRYPOINT,镜像运行启动后,执行的命令,不可覆盖
    • CMD,镜像运行启动后,执行的命令,可覆盖
    • ENV,设置环境变量
    • EXPOSE,镜像运行成容器后,自动暴露的端口

例如部署springboot项目 将jar包制作成镜像 直接运行

[root@localhost ~]# mkdir docker-files
[root@localhost ~]# cd docker-files
[root@localhost docker-files]# ll
总用量 0
[root@localhost docker-files]# vim centos_dockerfile
//编辑完文件[root@localhost docker-files]# docker build -f ./centos_dockerfile -t mycentos:1 .

最终build镜像文件时 -f 指定文件路径   -t指定最终构造的镜像文件名称及版本

好奇 并不是按照/usr 启动而且也并不能使用vim?

重新build镜像 又好了 哈!

第五章、docker服务编排

Docker Compose--多容器管理工具

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

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

相关文章

java:逆序排序的三种方法

// 逆序第一种方法 public static void main(String[] args) {int arr[] {11, 22, 33, 44, 55, 66};for (int i arr.length-1; i > 0; i--) {System.out.print("\t"arr[i]);}}缺点:这个是直接逆转,如果里面是随机数没办法比较 逆序第二种…

小技巧!Python生成excel文件的三种方式!

在我们做平常工作中都会遇到操作excel,那么今天写一篇,如何通过python操作excel。当然python操作excel的库有很多,比如pandas,xlwt/xlrd,openpyxl等,每个库都有不同的区别,具体的区别&#xff0…

5.9.Webrtc线程事件处理

在前面的课程中呢,我已经向你介绍了事件处理的一些基础知识,那今天呢,我们再来看一下外边儿rtc下事件处理的基本逻辑是什么? 那首先呢,我们来看一下事件是如何协调线程工作的,那就如果这张图所展示的有两个…

ArcGIS标注的各种用法和示例

标注是将描述性文本放置在地图中的要素上或要素旁的过程。 本文整理了ArcGIS中的各种标注方法、可能遇到的问题和细节,内容比较杂,想到哪写到哪。 一、正常标注某一字段值的内容 右键点击【属性】,在【标注】选项卡下勾选【标注此图层中的的要素】,在【文本字符串】栏中…

【SpringBoot集成Redis + Session持久化存储到Redis】

目录 SpringBoot集成Redis 1.添加 redis 依赖 2.配置 redis 3.手动操作 redis Session持久化存储到Redis 1.添加依赖 2.修改redis配置 3.存储和读取String类型的代码 4.存储和读取对象类型的代码 5.序列化细节 SpringBoot集成Redis 1.添加 redis 依赖 …

指针进阶(2)

6.函数指针数组 数组是一个存放相同类型数据的存储空间,那我们已经学习了指针数组, 比如: int *arr[10]; //数组的每个元素是int* 那要把函数的地址存到一个数组中,那这个数组就叫函数指针数组,那函数指针的数组如何定义呢&…

dart项目规范

​ dart项目结构 假设有一个名称为 enchilada 的完整的包目录(基本用到了所有的子目录),那么它的目录结构看起来像下面这样: enchilada/ .dart_tool/ * .packages * pubspec.yaml pubspec.lock ** LICENSE README.md CHANGELOG…

【LeetCode每日一题】——面试题10.11.峰与谷

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 排序 二【题目难度】 中等 三【题目编号】 面试题10.11.峰与谷 四【题目描述】 在一个整数…

灰度变换原理//test later

灰度变换原理 图像灰度变换变换原理:通过变换函数T将原图像像素灰度值r映射为灰度值s: 2、灰度反转 2.1原理 灰度反转:将图像亮暗对调,可以增强图像中暗色区域细节 ��(�)�−1−…

【C++】哈希表的实现

哈希是什么理解哈希哈希所用的容器计算key值方法哈希的插入和查找解决哈希冲突闭散列也叫开放寻址法开散列 哈希闭散列实现闭散列结构闭散列结构插入闭散列查找闭散列删除 哈希开散列实现(链表式)开散列结构开散列结构插入开散列结构查找开散列结构删除 …

Map和Set及其实现类详解

目录 一, 搜索 1,传统搜索 2,Map和Set模型 二, Map的使用 1,Map接口的继承及实现图 2,Map接口的使用 3,TreeMap和HashMap的使用和对比 1,TreeMap 代码示例 map中插入的数据按照key进行排序 map中插入的数据必须具有可比较性(或者实现了比较器相关接口) ​map中插入…

Echarts 折线图的详细配置过程

文章目录 折线图 简介配置步骤简易示例 折线图 简介 Echarts是一款基于JavaScript的开源可视化库,由百度开发和维护。它提供了丰富多样的图表类型,其中折线图是其中一种常用的图表类型。 折线图通过连接数据点所形成的折线来展示数据的变化趋势。在折线…

互联网3.0 数字原生——数物虚实多维细粒度泛在融合

随着计算机、宽带网、通信技术的飞速发展,互联网技术和软硬件系统也不断演进,催生了一场前所未有的数字化革命。从Web1.0到Web3.0,以及虚拟现实、人工智能和数字孪生等领域的崛起,每一步都勾画出了一个崭新的数字未来,…

实战SpringMVC之CRUD

目录 一、前期准备 1.1 编写页面跳转控制类 二、实现CRUD 2.1 相关依赖 2.2 配置文件 2.3 逆向生成 2.4 后台代码完善 2.4.1 编写切面类 2.4.2 编写工具类 2.4.3 编写biz层 2.4.4 配置mapper.xml 2.4.5 编写相应接口类(MusicMapper) 2.4.6 处…

高效成绩查询系统助力,让学校管理事半功倍

各位老师们,大家好!作为教育工作者,我们都了解成绩查询在学校管理中的重要性。然而,传统的查询方式往往繁琐耗时,给我们带来了不少困扰。因此,今天我将向大家介绍一个极其便捷的查询工具,能够帮…

生成式人工智能在高等教育 IT 中的作用

作者:Jared Pane 通过将你大学的数据与公共 LLMs 和 Elasticsearch 安全集成来找到你需要的答案。 根据 2023 年 4 月 EDUCAUSE 的一项调查,83% 的受访者表示,生成式人工智能将在未来三到五年内深刻改变高等教育。 学术界很快就询问和想象生…

盘点:人工智能发展趋势下的4大常见AI算法以及应用场景

近年来,人工智能的发展速度十分惊人,在安防监控、工业制造、农业、教育、金融、医疗等领域中的应用越来越广泛,并且未来几年也将继续保持高速的发展趋势。通过人工智能技术提高自动化程度、减少人工干预、提高监管效率,已经成为当…

虚拟机Ubuntu操作系统常用终端命令(2)(详细解释+详细演示)

本篇概要 本篇讲述了Ubuntu操作系统常用的几个功能,即超级用户,虚拟机系统损坏如何修复,用户和组,如何以root登录界面以及文件的权限方面的知识。希望能够得到大家的支持。 文章目录 本篇概要1.超级用户1.1使用超级用户1.2切换到…

【Robotframework+python】实现http接口自动化测试

前言 下周即将展开一个http接口测试的需求,刚刚完成的java类接口测试工作中,由于之前犯懒,没有提前搭建好自动化回归测试框架,以至于后期rd每修改一个bug,经常导致之前没有问题的case又产生了bug,所以需要…

Feign远程接口调用

概述 目的:解决微服务调用问题。如何从微服务A调用微服务B提供的接口。 特性: 声明式语法,简化接口调用代码开发。像调用本地方法一样调用其他微服务中的接口。集成了Eureka服务发现,可以从注册中心中发现微服务。集成了Spring…