• [每周一更]-(第23期):Docker 逻辑图及常用命令汇总


    在这里插入图片描述
    Docker是一种轻量级的虚拟化技术,同时是一个开源的应用容器运行环境搭建平台,可以让开发者以便捷方式打包应用到一个可移植的容器中,然后安装至任何运行Linux或Windows等系统的服务器上。相较于传统虚拟机,Docker容器提供轻量化的虚拟化方式、安装便捷、启停速度快。

    Docker是一个开放源代码的开放平台软件,用于开发应用、交付(shipping)应用、运行应用。Docker允许用户将基础设施(Infrastructure)中的应用单独分割出来,形成更小的颗粒(容器),从而提高交付软件的速度。

    Docker容器与虚拟机类似,但二者在原理上不同。容器是将操作系统层虚拟化,虚拟机则是虚拟化硬件,因此容器更具有便携性、高效地利用服务器。 容器更多的用于表示 软件的一个标准化单元。由于容器的标准化,因此它可以无视基础设施(Infrastructure)的差异,部署到任何一个地方。另外,Docker也为容器提供更强的业界的隔离兼容。

    什么是容器?
    容器是包含在任何环境中运行所需的所有元素的软件包。容器可以虚拟化操作系统,并在任何地方运行,不管目标环境是私有数据中心、公有云,还是开发者的个人笔记本电脑。
    容器支持在操作系统级别轻松共享 CPU、内存、存储空间和网络资源,并提供了一种逻辑打包机制,以这种机制打包的应用可以脱离其实际运行的环境。

    容器的使用更多了占据了工作的内容,随着Go语言的兴起,Docker作为容器的最常用的载体,很好的起到隔离,与虚拟机比起来更多的对资源的有效利用;

    为什么要用 Docker?
    • 更高效地利用系统资源
    • 更快速的启动时间
    • 一致的运行环境
    • 持续交付和部署
    • 更轻松地迁移
    • 更轻松地维护和扩展

    Docker容器 VS VM

    Docker容器和传统VM技术,在技术实现上有所不同。下图显示的是VM与Docker容器的逻辑组成:

    • VM:使用Hypervisor提供虚拟机的运行平台,管理每个VM中操作系统的运行。每个VM都要有自己的操作系统、应用程序和必要的依赖文件等。
    • Docker容器:使用Docker引擎进行调度和隔离,提高了资源利用率,在相同硬件能力下可以运行更多的容器实例;每个容器拥有自己的隔离化用户空间。
      在这里插入图片描述

    虚拟机与Docker容器对比

    相较于VM,Docker容器作为一种轻量级的虚拟化方式,在应用方面具有以下显著优势:

    • Docker容器可以在秒级时间内快速启动和停止,相较传统虚拟机显著提升。
    • Docker容器对系统资源要求低,数千个Docker容器可同时运行在同一个主机上。
    • Docker容器通过类似Git的操作来方便用户获取和更新应用镜像。
    • Docker容器通过Dockerfile配置文件实现自动化创建和灵活部署,提高工作效率。
    • Docker容器除了运行其中的应用之外,基本不消耗额外的系统资源,保证应用性能的同时,尽量减小系统开销。
      下图可直观了解Docker容器与传统VM方式的区别:

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    常用命令

    1.启动docker     /etc/init.d/docker start 
    2.搜索镜像     docker search centos
    3.启动容器     docker run --name  -h  hostname
    4.停止容器     docker stop CONTAINER ID
    5.拉取镜像      docker pull  mysql5.6   这里标注的是版本号
    6.查看容器中的内容  docker inspect  容器id 
    7.运行安装好的镜像跑命令:run centos echo "hello world"
    
    docker stop `docker ps -a -p` 停止所有的容器
    docker exec -it 容器名 bash   进入到容器中
    docker-php-ext-install 模块名   容器中安装模块
    
    docker images #列出本地主机上的镜像 
    docker ps  #列出运行的容器 
    docker ps -a #查看所有容器 
    docker ps -s #查看容器的大小,可以再原有-a基础上追加
    docker search #查找镜像
    docker save 镜像名 -o tar包 #镜像打包 
    docker load -i 镜像包 #导入docker save的镜像 
    docker rm 容器名 #删除容器 
    docker rmi 镜像 #删除镜像 
    docker search php7 #查找php7镜像 
    docker pull php7 #下载php7镜像,可以指定镜像tag
    docker start name  # 运行容器中停止的镜像,如name=showdoc
    
    docker attach 容器id # 链接到正在运行的容器,观察该容器的运行情况,或者与容器到的主进程进行交互
    docker system df 命令来便捷的查看镜像、容器、数据卷所占用的空间
    docker image prune  虚悬镜像删除
    docker image ls -f dangling=true 专门显示虚悬镜像(由于新旧镜像同名,旧镜像名称被取消,从而出现仓库名、标签均为  的镜像。)
    docker image ls -a # 顶层镜像和中间镜像都展示
    docker image ls -q # 列出镜像的id
    
    docker top containerId  *# 查看容器内容的进程信息
    docker stats  containerId  # 查看统计信息,cpu,内存,存储,网络等; 
    -a 查所有信息
    --format string 格式化输出
    
    docker port containerId #查看容器的端口映射情况
    docker diff containerID #查看容器内文件系统的变更
    
    
    运行镜像:
    docker run --name nginx-test -p 8080:80 -d nginx
    参数说明:
    	--name nginx-test:容器名称。
    	-p 8080:80: 端口进行映射,将本地 8080 端口映射到容器内部的 80 端口。
    	-d nginx: 设置容器在在后台一直运行。
    
    
    docker中宿主机与容器(container)互相拷贝传递文件的方法
    
    1、从容器拷贝文件到宿主机
    docker cp mycontainer:/opt/testnew/file.txt /opt/test/
    
    2、从宿主机拷贝文件到容器
    docker cp /opt/test/file.txt mycontainer:/opt/testnew/
    
    需要注意的是,不管容器有没有启动,拷贝命令都会生效。
    
    容器中删除文件  rm -rf 文件名
    
    
    清理命令
    杀死所有正在运行的容器 docker kill $(docker ps -a -q)
    删除所有未打 dangling 标签的镜像 docker rmi $(docker images -q -f dangling=true)
    通过镜像的id来删除指定镜像   docker rmi 
    
    列出所有的容器 ID  docker ps -aq
    停止所有的容器 docker stop $(docker ps -aq)
    删除所有的容器 docker rm $(docker ps -aq)
    删除所有的镜像 docker rmi $(docker images -q)
    复制文件 docker cp mycontainer:/opt/file.txt /opt/local/docker cp /opt/local/file.txt mycontainer:/opt/
    
    为这些命令创建别名
    # ~/.bash_aliases
    
    # 杀死所有正在运行的容器.
    	alias dockerkill='docker kill $(docker ps -a -q)'
    
    # 删除所有已经停止的容器.
    	alias dockercleanc='docker rm $(docker ps -a -q)'
    
    # 删除所有未打标签的镜像.
    	alias dockercleani='docker rmi $(docker images -q -f dangling=true)'
    
    # 删除所有已经停止的容器和未打标签的镜像.
    	alias dockerclean='dockercleanc || true && dockercleani'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87

    错误信息

    1、Error response from daemon: conflict: unable to delete 1402670d9079 (must be forced) - image is being used by stopped container 5c8c07b32f09
    删除镜像失败
    解决: 需要先删除不运行的容器,docker ps -a
    docker rm 容器名
    docker rmi 镜像名
    
    • 1
    • 2
    • 3
    • 4
    • 5

    Docker容器间通信方法:https://juejin.cn/post/6844903847383547911

  • 相关阅读:
    服务器部署项目总结
    编码与测试
    【C语言】错题本(3)
    38.JavaScript中异步与回调的基本概念,以及回调地狱现象
    SpringBoot+Vue实现excel导入带格式化的时间参数(moment格式化明天日期并设置el-date-picker默认值)
    【C语言】#define宏与函数的优劣对比
    排序算法优化(二)
    分布式系统设计策略
    基于STM32F469 discovery kit 开发板的开发2
    PC_输入输出系统/设备_I/O系统(IO接口)基础
  • 原文地址:https://blog.csdn.net/hmx224_2014/article/details/128167558