docker认识及安装

版权声明:文章转发需标明文章出处地址及作者 https://blog.csdn.net/weixin_44267608/article/details/89470676

简介

容器( container-based )虚拟化方案,充分利用了操作系统本身已有的机制和特性,以实现轻量级的虚拟化(每个虚拟机安装的不是完整的虚拟机),甚至有人把他称为新一代的虚拟化技术, Docker 无疑就是其中的佼佼者,在一台服务器上同时运行上百个虚拟机,肯定会被认为是痴人说梦,而在一台机器上同时运行一千个 Docker 容器,这已成为现实。

特点

优点:

  • 启动快,资源占用小 , 资源利用高,快速构建标准化运行环境
  • 创建分布式应用程序时快速交付和部署,更轻松的迁移和扩展,更简单的更新管理

局限:

  • Docker 是基于 Linux 64bit 的,无法在 windows/unix 或 32bit 的 linux环境下使用。
  • LXC 是基于 cgroup 等 linux kernel 功能的,因此 container 的 guest 系统只能是linux
  • 隔离性相比 KVM 之类的虚拟化方案还是有些欠缺,所有 container 公用一部分的运行库管理相对简单,主要是基于 namespace
    隔离
  • cgroup 的 cpu 和 cpuset 提供的 cpu 功能相比 KVM 的等虚拟化方案相比难以度量( 所以 dotcloud
    主要是按内存收费 )
  • docker 对 disk 的管理比较有限
  • container 随着用户进程的停止而销毁, container 中的 log 等用户数据不便收集

与虚拟机比较

  • 启动快比虚拟机 , 可以秒级启动
  • 对资源占用小 , 宿主机上可运行千台容器 方便用户获取 , 分布 , 和更新应用镜像 , 指令简单 , 学习费用低
  • 通过 Dockerfile 配置文件来灵活的自动创建和部署镜像 & 容器 , 提高工作效率
  • Docker 除了运行其中应用外 , 基本不消耗其他系统资源 , 保证应用性能同时 ,尽量减小系统开销

重要网站

https://hub.docker.com/
https://docs.docker.com/
http://docs.docker-cn.com/

三大组件

image镜像、docker容器、Docker Registry

image镜像

Docker镜像是一个特殊的文件系统,镜像不包含任何动态数据,其内容在构建之后也不会被改变

因为镜像包含操作系统完整的root文件系统,其体积往往是庞大的,因此在docker设计时,就利用union fs的技术,将其设计为分层存储的架构。

镜像构建时,会一层层构建,前一层是后一层的基础。每一个构建完就不会再发生改变,后一层上的任何改变只发生在自己的这一层。例如删除前一层文件的操作,不是真的删除前一层的文件,而实仅在当前层标记为该文件已删除。因此,在构建镜像的时候,需要额外的小心,任何额外的东西应该在该层构建结束前清理掉。

Docker容器

容器的实质是进程,容器进程运行于属于自己的独立的命名空间。因为容器可以拥有自己的root文件系统、网络配置、进程空间、甚至自己的用户ID空间。它是运行在在一个隔离的环境里,就像一个独立于属猪的系统下操作一样。

每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层。。这个为容器运行时读写而准备的存储层称为容器存储层。

Docker Registry(仓库)

镜像构建完成后,可以很容易在当前的宿主机上运行,但是,如果需要在其他服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,而docker registry就是这样的服务。
一个docker registry中可以包含多个仓库(repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像
而这里又分公有和私有registry

三者关系,以docker标志logo为例
鲸鱼背上有集装箱
蓝色的大海--------宿主机系统
鲸鱼-----------------docker
集装箱--------------容器实例,来自镜像模板

下载docker-ce

更新下yum源,使用国内的
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

如果发生错误yum-config-manager: command not found,则是因为系统默认没有安装这个命令,这个命令在yum-utils 包里,可以通过命令yum -y install yum-utils 安装就可以了。

下载依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2

之后下载
yum -y install docker-ce

阿里云平台加速器地址
aliyun.com

centos7.0及以上的
mkdir /etc/docker
cd /etc/docker/
touch daemon.json
vim /etc/docker/daemon.json #加速器地址是自己注册会员才有的,每个人的不相同。

{
  "这里省略,在阿里云中镜像服务中镜像加速有"]
}

systemctl daemon-reload
systemctl restart docker

运行图
在这里插入图片描述

为什么docker有着比虚拟机更少的抽象层?

docker不需要hypervusir实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源,因此在cpu、内存利用率上docker将会在效率上有明显优势。

docker利用的是宿主机的内核,而不需要Guest OS,因此,docker不需要和虚拟机一样重新加载一个操作系统。新建一个虚拟机时,虚拟机软件需要加载Guest OS,这个过程是分钟级别的,而docker由于直接利用宿主机的操作系统,则省略了这个过程。因此docker新建虚拟机只需要几秒钟。

docke镜像常用命令

docker images 列出本地镜像
在这里插入图片描述
镜像格式为 docker [OPTIONS] COMMAND
options说明:

  • -a :列出本地所有镜像(含中间映像层)
  • -q :只显示镜像ID
  • –digests:显示镜像的摘要信息
  • –no-trunc:显示完整的镜像信息 #例如 docker search --no-trunc tomcat

docker search 某个镜像名字 #查找需要的镜像 ,镜像没有版本号默认为latest
options:

  • -s : 列出 收藏数不小于指定值的镜像
  • –automated : 只列出automated build类型的镜像
  • –no-trunc:显示完整的镜像描述

docker pull 某个镜像名字 #下载某个镜像
例子#docker pulll tomcat 等价于 docker pull tomcat:latest

docker rm删除容器
docker rmi 删除镜像
docker rmi 某个镜像名字ID

  • 删除单个:docker rmi -f 镜像ID #docker rmi -f nginx
  • 删除多个:docker rmi -f 镜像ID 镜像ID2 #以空格隔开
  • 删除全部:docker rmi -f $(docker images -qa)

容器命令

新建并启动容器:docker run [options] image [command] [arg]
options:

  • –name="容器新名字“ #为容器制定一个名称
  • -d;后台运行容器,并返回容器ID,也即启动守护式容器。
  • -i:以交互模式运行容器,通常与-t同时使用
  • -t :为容器重新分配一个伪输入终端,通常与-i同时使用
  • -P:随机端口映射
  • -p:指定端口映射。

列出当前所有正在运行的容器 docker ps [options]
options:

  • -a :列出当前所有正在运行的容器+历史上运行过的
  • -l :显示最近创建的容器
  • -n :显示最近n个创建的容器
  • -q:静默模式,只显示容器编号
  • –no-trunc :不截断输出

退出容器:

exit #容器停止退出
ctrl+P+Q 容器不停止退出

启动容器
docker start 容器ID或者容器名
重启容器
docker restart 容器ID或者容器名
停止容器
docker stop 容器ID或者容器名
强制停止容器
docker kill 容器ID或者容器名

删除:
一次性删除多个容器
docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm

常用命令

docker run -d centos /bin/sh -c “while true;echo hello chen;sleep 2;done”

查看容器日志
docker logs -f -t --tail 容器ID

  • -t 加入时间戳
  • -f 跟随最新的日志打印
  • –tail n #显示最后多少条

查看容器运行的进程 docker top 容器ID

看查容器内部细节 docker inspect 容器ID

进入正在运行的容器并以命令行交互

  • docker exec -it 容器ID (不进入终端,且返回执行结果)如加/bin/bash,则是进如终端)
  • docker attach 容器ID 重新进入

区别

  • exec :是在容器中打开新的终端,并且可以启动新的进程 (并没有直接进去终端,并且返回执行结果)
  • attach :直接进入容器启动命令的终端,不会启动新的进程

猜你喜欢

转载自blog.csdn.net/weixin_44267608/article/details/89470676