Docker核心原理与实操

这篇具有很好参考价值的文章主要介绍了Docker核心原理与实操。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Docker核心原理与实操,谷粒商城及附加技术,docker,容器,运维

第一章、Docker基本概念

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

Docker核心原理与实操,谷粒商城及附加技术,docker,容器,运维

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

3、组成(7部分):

  • 仓库:用于存放镜像

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

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

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

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

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

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

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

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

5、Docker架构

Docker核心原理与实操,谷粒商城及附加技术,docker,容器,运维

第二章、Docker常用命令

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

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

Docker核心原理与实操,谷粒商城及附加技术,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、数据卷概念

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

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

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

Docker核心原理与实操,谷粒商城及附加技术,docker,容器,运维

2、数据卷配置

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

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

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

Docker核心原理与实操,谷粒商城及附加技术,docker,容器,运维

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

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

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

3、数据卷容器

Docker核心原理与实操,谷粒商城及附加技术,docker,容器,运维

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

在查看各个容器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核心原理与实操,谷粒商城及附加技术,docker,容器,运维

Docker核心原理与实操,谷粒商城及附加技术,docker,容器,运维

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

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

Docker核心原理与实操,谷粒商城及附加技术,docker,容器,运维

不常用,了解即可

Docker核心原理与实操,谷粒商城及附加技术,docker,容器,运维

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

  • 常用命令(8条):

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

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

Docker核心原理与实操,谷粒商城及附加技术,docker,容器,运维

Docker核心原理与实操,谷粒商城及附加技术,docker,容器,运维

[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,容器,运维

第五章、docker服务编排

Docker Compose--多容器管理工具

Docker核心原理与实操,谷粒商城及附加技术,docker,容器,运维文章来源地址https://www.toymoban.com/news/detail-732762.html

到了这里,关于Docker核心原理与实操的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • R数据分析:多项式回归与响应面分析的理解与实操

    今天给大家分享一个新的统计方法,叫做响应面分析,响应面分析是用来探究变量一致性假设的(Congruence hypotheses)。本身是一个工程学方法,目前在组织行为学,管理,市场营销等等领域中使用越来越多。 Congruence hypotheses state that the agreement (i.e., congruence) between two construc

    2024年02月07日
    浏览(50)
  • 人工智能学习与实训笔记(十):百度对话大模型ERNIE调用实操

    人工智能专栏文章汇总:人工智能学习专栏文章汇总-CSDN博客 本篇目录 一、直接基于ERNIE Bot Sdk调用 1. SDK基础 1.1 安装EB SDK 1.2 认证鉴权 1.3 EB SDK Hello-World 1.4 多轮对话 1.5 语义向量 1.6 文生图 2. SDK进阶 - 对话补全(Chat Completion) 2.1 通过参数调节响应结果多样性 2.2 流式传输

    2024年02月20日
    浏览(51)
  • 谷粒商城实战(012 业务-商城业务)

    Java项目《谷粒商城》架构师级Java项目实战,对标阿里P6-P7,全网最强 总时长 104:45:00 共408P 此文章包含第203p-第p210的内容 介绍 这段除了210集都是商城业务,无太多可学习的,可跳过这7集,直接看第210集 一个页面需要获取多个 API 数据的情况 通常有两种主要的方式来处理:

    2024年04月17日
    浏览(38)
  • 谷粒商城----ES篇

    P128 ES在内存中,所以在检索中优于mysql。ES也支持集群,数据分片存储。 需求: 上架的商品才可以在网站展示。 上架的商品需要可以被检索。 分析sku在es中如何存储 商品mapping 分析:商品上架在es中是存sku还是spu? 1)、检索的时候输入名字,是需要按照sku的title进行全文检

    2024年02月09日
    浏览(45)
  • 【笔记/后端】谷粒商城高级篇

    全文检索工具:快速储存、搜索和分析海量数据。 Index (索引) → Mysql的库 动词,相当于MySQL中的insert; 名词,相当于MySQL中的Database。 Type (类型) → Mysql的表(过时) 在Index中,可以定义一个或多个类型。类似于MySQL中的Table;每一种类型的数据放在一起。 Document (文档) →

    2024年02月02日
    浏览(43)
  • 谷粒商城学习笔记

    1)、电商模式 2)、谷粒商城 谷粒商城是一个 B2C 模式的电商平台,销售自营商品给客户。 1、项目微服务架构图 2、微服务划分图 3、项目技术特色 4、项目前置要求 分布式是指将不同的业务分布在不同的地方。 集群指的是将几台服务器集中在一起,实现同一业务。 例如:

    2024年01月16日
    浏览(59)
  • 【笔记】谷粒商城高级篇

    全文检索工具:快速储存、搜索和分析海量数据。 Index (索引) → Mysql的库 动词,相当于MySQL中的insert; 名词,相当于MySQL中的Database。 Type (类型) → Mysql的表(过时) 在Index中,可以定义一个或多个类型。类似于MySQL中的Table;每一种类型的数据放在一起。 Document (文档) →

    2023年04月21日
    浏览(46)
  • 谷粒商城实战(008 缓存)

    Java项目《谷粒商城》架构师级Java项目实战,对标阿里P6-P7,全网最强 总时长 104:45:00 共408P 此文章包含第151p-第p157的内容 数据库承担落盘(持久化)工作 拿map做缓存 这种是本地缓存,会有一些问题 分布式系统无法同步,而且会有数据一致性的问题 分布式缓存 应该使用缓存

    2024年04月09日
    浏览(44)
  • 001-谷粒商城-微服务剖析

    还是很强的,该有的都有 SpringCloudAlibaba组件包括 Sentinel Nacos RocketMQ Seata 搭配SpringCloudAlibaba组件 OpenFeign GateWay Ribbn gateway使用了SpringWebFlux,前几天研究到,为什么springboot不直接使用SpringWebFlux, 还是依然使用tomcat的servelet,内部NIO进行处理请求。 Spring WebFlux 使用 Reactor库来实现

    2024年04月16日
    浏览(64)
  • 谷粒商城-elasticsearch入门

    Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。 作为 Elastic Stack 的核心,它集中存储您的数据,帮助您发现意料之中以及意料之外的情况。 MySQL中也有检索数据的方式,可是为什么不适合呢?因为术业有专攻,MySQL是专攻于数据

    2024年02月11日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包