• 微服务05-Docker基本操作


    Docker的定义

    1.什么是Docker

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

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

    2.为什么要用Docker

    例如一个项目中,部署时需要依赖于node.js、Redis、RabbitMQ、MySQL等,这些服务部署时所需要的函数库、依赖项各不相同,甚至会有冲突。给部署带来了极大的困难。
    在这里插入图片描述

    Docker·为了解决依赖的兼容问题的,采用了两个手段:

    • 将应用的Libs(函数库)、Deps(依赖)、配置与应用一起打包

    • 将每个应用放到一个隔离容器去运行,避免互相干扰

    在这里插入图片描述
    这样打包好的应用包中,既包含应用本身,也保护应用所需要的Libs、Deps,无需再操作系统上安装这些,自然就不存在不同应用之间的兼容问题了。

    Docker如何解决开发、测试、生产环境有差异的问题?

    • Docker镜像中包含完整运行环境,包括系统函数库,仅依赖系统的Linux内核,因此可以在任意Linux操作系统上运行

    Docker的基本操作

    1 Docker命令

    常见的镜像操作命令如图:
    在这里插入图片描述

    举例:
    需求:从DockerHub中拉取一个nginx镜像并查看

    1)首先去镜像仓库搜索nginx镜像,比如DockerHub:

    在这里插入图片描述

    2)根据查看到的镜像名称,拉取自己需要的镜像,通过命令:docker pull nginx

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    3)通过命令:docker images 查看拉取到的镜像
    在这里插入图片描述

    保存、导入镜像
    命令格式:

    docker save -o [保存的目标文件名称] [镜像名称]
    
    • 1

    1)使用docker save导出镜像到磁盘

    运行命令:

    docker save -o nginx.tar nginx:latest
    
    • 1

    结果如图:

    在这里插入图片描述

    2)使用docker load加载镜像

    先删除本地的nginx镜像:

    docker rmi nginx:latest
    
    • 1

    然后运行命令,加载本地文件:

    docker load -i nginx.tar
    
    • 1

    结果:

    在这里插入图片描述

    2 容器相关命令

    容器操作的命令如图:
    在这里插入图片描述
    容器保护三个状态:

    • 运行:进程正常运行
    • 暂停:进程暂停,CPU不再运行,并不释放内存
    • 停止:进程终止,回收进程占用的内存、CPU等资源

    其中:

    • docker run:创建并运行一个容器,处于运行状态

    • docker pause:让一个运行的容器暂停

    • docker unpause:让一个容器从暂停状态恢复运行

    • docker stop:停止一个运行的容器

    • docker start:让一个停止的容器再次运行

    • docker rm:删除一个容器

    举例
    创建并运行nginx容器的命令:

    docker run --name containerName -p 80:80 -d nginx
    
    • 1

    命令解读:

    • docker run :创建并运行一个容器
    • –name : 给容器起一个名字,比如叫做mn
    • -p :将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
    • -d:后台运行容器
    • nginx:镜像名称,例如nginx

    这里的-p参数,是将容器端口映射到宿主机端口。

    默认情况下,容器是隔离环境,我们直接访问宿主机的80端口,肯定访问不到容器中的nginx。

    现在,将容器的80与宿主机的80关联起来,当我们访问宿主机的80端口时,就会被映射到容器的80,这样就能访问到nginx了:
    在这里插入图片描述

    我们可以通过docker logs 容器名字 来查看日志

    在这里插入图片描述

    1. 先利用镜像产生容器,然后再对容器进行命令执行模式
      在这里插入图片描述

    exit退出容器

    docker stop 容器名称:停掉容器名称,直接死掉

    docker ps:默认查看运行中的容器

    docker ps -a:查看所有容器

    docker start 容器名字:开始容器,停掉的容器再开始

    在这里插入图片描述

    总结:

    在这里插入图片描述
    docker exec -it 容器名字 命令:是进入容器后修改文件,因为容器是隔离性的,所以我们不能使用vi命令,非常不方便修改,而且修改时没有日志记录的;

    数据卷

    出现问题:多个容器修改困难

    在这里插入图片描述

    解决方案:

    我们可以利用数据卷(是一个虚拟目录),将容器挂载到数据卷上,而数据卷映射文件系统:

    所以我们改动主机的文件系统,那么容器就会改变:因为容器挂载到了数据卷上->映射在主机文件系统上;

    主机文件系统位置:在创建数据卷的时候就自动设置了(数据卷相当于代理帮你自动设置位置),实际上跟你你设置的数据卷名字有关;

    容器挂载数据卷位置:通过创建容器的-v参数设置

    在这里插入图片描述
    在这里插入图片描述
    容器删除,数据卷不会被删,这样有利于数据的保存与维护(直接改变数据卷,也就是可以通过主机修改数据——>容器升级),较为安全;

    操作数据卷常见命令

    在这里插入图片描述

    作用:

    将容器与数据分离,降低耦合,方便操作容器内的数据(->通过主机进行操作),方便数据维护升级——>容器删除,数据卷依然在;

    注意:

    docker volume prune相当于强制删除卷(未使用)

    docker volume rm xx:指定删除

    练习数据卷操作:

    在这里插入图片描述

    挂载数据卷

    在这里插入图片描述

    如果此时我将数据卷删除的话,创建容器直接设置数据卷挂载位置,docker非常智能会自动创建没有的数据卷
    在这里插入图片描述

    练习:创建并且运行mysql容器,将宿主机目录挂载到容器(目录挂载)

    在这里插入图片描述
    步骤:

    通过mysql镜像启动mysql容器,设置主机挂载目录的位置以及容器挂载的位置(一一对应的感觉,没有代理帮你管理,自己设置两边的位置)

    docker run --name mysql -p 3308:3306 -v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf -v /tmp/mysql/data:/var/lib/mysql -d mysql:5.7.25
    
    
    • 1
    • 2

    在这里插入图片描述

    目录挂载与数据卷挂载的区别

    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    matlab新建数据字典及如何导入
    Golang 实现对配置文件加密
    【MySQL】左连接右连接内连接与Hash连接、子查询原理与实战(MySQL专栏启动)
    Cookie和Session学习总结
    ECS框架浅析
    BacNet4j-跨网段-项目运用
    SQL面试题练习 —— 用户行为路径分析
    前置知识--Quartz
    [附源码]Python计算机毕业设计Django勤工俭学管理小程序
    自己留着看的 python
  • 原文地址:https://blog.csdn.net/weixin_67201964/article/details/132744034