• 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 镜像关键字                     搜索远程仓库中的镜像

    • 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

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

    1. docker run -id \
    2. > -p 3307:3306 \
    3. > --name=c_mysql \
    4. > -v /root/mysql/conf:/root/mysql/etc/mysql/conf.d \
    5. > -v /root/mysql/logs:/root/mysql/logs \
    6. > -v /root/mysql/data:/root/mysql/var/lib/mysql \
    7. > -e MYSQL_ROOT_PASSWORD=123456 \
    8. > 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包制作成镜像 直接运行

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

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

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

    重新build镜像 又好了 哈!

    第五章、docker服务编排

    Docker Compose--多容器管理工具

  • 相关阅读:
    JS 数字
    【原创】VMware Workstation查看虚拟机实际使用的内存量并通过PID找到对应的虚拟机
    multiprocessing.pool详解
    认识java
    无所不谈,百无禁忌,Win11本地部署无内容审查中文大语言模型CausalLM-14B
    【Prism系列】Prism子窗口实现
    【数据结构】排序算法复杂度 及 稳定性分析 【图文详解】
    c++ 字符串匹配算法sunday算法
    关于重装系统后,Anaconda和Pycharm无法使用的问题及解决方案
    Qt/C++开源作品45-CPU内存显示控件/和任务管理器一致
  • 原文地址:https://blog.csdn.net/m0_61843855/article/details/132803575