在这里插入图片描述
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 专门显示虚悬镜像(由于新旧镜像同名,旧镜像名称被取消,从而出现仓库名、标签均为 <none> 的镜像。)
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 <image id>

列出所有的容器 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、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 镜像名

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

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐