Docker小结

1. docker简介

Docker是一个用Go语言开发的开源引擎。Docker可以将任何应用以及依赖打包到一个轻量级、可移植的容器中,然后发布到Linux机器上,并实现虚拟化。Docker容器使用沙箱机制,性能开销极低,相互之间不会有任何关联。

docker应用场景:

  • web应用的自动化打包和发布;
  • 自动化测试和持续集成、发布;
  • 在服务型环境中部署和调整数据库或其他的后台应用;
  • 从头编译或扩展现有OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。

Docker和虚拟机的区别

  • 传统的虚拟机需要模拟整合机器包括硬件,每台虚拟机都需要自己的操作系统,虚拟机一旦被开启,预分配给它的资源将全部被占用。每个虚拟机包含应用、二进制库以及完整的操作系统。
  • 容器与宿主共享硬件资源及操作系统,可以实现资源的动态分配。容器包含应用和依赖包,并与其他容器共享内核。容器在宿主操作系统中,已分离的进程在用户空间运行。容器没有自己的内核,也没有进行硬件虚拟。

Docker特点
对比虚拟机

  • 更快的启动速度:docker直接运行于宿主内核,无需启动完整的操作系统,因此启动速度属于毫秒级。
  • 更高效的资源利用率:容器不需要进行硬件虚拟以及运行完整操作系统。
  • 更高的系统支持量:docker架构可以共用一个内核与共享应用程序库,所占内存极小。同样的硬件环境,docker运行的镜像数远多于虚拟机数量,对系统的利用率极高。
  • 持续交付于部署: Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过 Dockerfile 来进行镜像构建,并进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至进行自动部署。
  • 更轻松的迁移:由于 Docker 确保了执行环境的一致性,使得应用的迁移更加容易。Docker 可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本,其运行结果是一致的。因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。
  • 更轻松的维护和扩展:Docker 使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。此外,Docker 团队同各个开源项目团队一起维护了一大批高质量的 官方镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。
  • 更低的隔离性:相比于虚拟机系统级别隔离,docker属于进程之间的隔离。
  • 更弱的安全性:Docker 的租户 root 和宿主机 root 等同,一旦容器内的用户从普通用户权限提升为 root 权限,它就直接具备了宿主机的 root 权限,进而可进行无限制的操作。虚拟机租户 root 权限和宿主机的 root 虚拟机权限是分离的,并且利用硬件隔离技术可以防止虚拟机突破和彼此交互,而容器至今还没有任何形式的硬件隔离,这使得容器容易受到攻击。

2. docker基本概念

docker包括三个基本概念:镜像(Image),容器(Container),仓库(Repository)。这个三个概念囊括了Docker的整个生命周期。
镜像
Docker镜像,是一种文件形式,可以把许多文件做成一个镜像文件,与GHOST等程序放在一个盘里用GHOST等软件打开后,又恢复成许多文件,镜像(Mirroring)是冗余的一种类型,一个磁盘上的数据在另一个磁盘上存在一个完全相同的副本即为镜像。常见的镜像格式有:ISO、BIN、IMG、TAO、DAO、CIF、FCD。
容器
容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间,可以被创建、启动、停止、删除和暂停等。容器相当于镜像的实例。
仓库
仓库作为集中存储和分发镜像的服务,可以为不同服务器提供镜像。Docker可以包含多个仓库,每个仓库可以包含多个镜像。通常,一个仓库包含同一个软件不同版本的镜像,而标签对应该软件的各个版本。可以通过过<仓库名>:<标签>的格式指定镜像具体的版本。

3. docker常用命令

容器操作

  • 创建并启动容器
docker run -it --name=inspect_shell centos:7 /bin/bash
创建一个名字为inspect_shell的容器,并启动了该容器(交互式容器)
docker run --name daemon_hello -d centos:7 /bin/bash -c "while true;do echo hello word;sleep 1;done"
创建一个名字为daemon_hello的容器,并启动了该容器(后台型容器)
  • 容器管理
查看日志
docker logs -f 容器ID
进入容器
docker exec -it 容器ID bash或者docker exec-it 容器ID sh
资源占用情况
docker stats           
显示宿主主机上的pid
docker top 容器id        
显示容器内的pid
docker exec 容器id    
停止一个正在运行中的容器
docker stop           
强制终止一个容器
docker kill            
启动一个或多个已经被停止的容器
docker start 
重启容器      
docker restart   
删除一个或多个容器
docker rm              
列出容器
docker ps                             
显示所有容器,包括未运行的
docker ps –a                    
获取容器/镜像的元数据 
docker inspect mysql:5.6        
检查容器里文件结构的更改
docker diff mymysql             
列出指定容器的端口映射
docker port mymysql            
从服务器获取实时事件
docker events          
获取容器IP地址(容器必须是Up状态)
docker inspect 容器ID | grepIPAddress | cut -d '"' -f 4
获取端口映射
docker inspect -f '{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index$conf 0).HostPort}} {{end}}' id
获取环境变量
docker exec container_id env
杀掉所有正在运行的容器
docker kill $(docker ps -q)
删除老的(一周前创建)容器
docker ps -a |grep 'weeks ago' | awk '{print $1}' | xargs docker rm
删除已经停止的容器
docker rm `dockerps -a -q`

镜像操作

  • 显示本地所有的镜像列表
docker images
  • 进入dockerfile目录,创建镜像
docker build -t 镜像名称:tag .命令
  • 删除镜像
docker image rm 镜像ID 
  • 删除指定镜像
docker rmi 镜像id
  • 删除所有镜像
docker image rm$(docker images -q)
  • 为镜像起一个别名
docker tag 镜像ID 别名:版本
  • 创建镜像
docker import 从一个tar包创建一个镜像,往往和export结合使用;
docker load   从一个tar包创建一个镜像,和save配合使用;
docker load < centos.tar
  • 保存镜像为tar包,带layers和tag信息
docker save 镜像ID > 保存的名称:保存的版本.tar
  • 显示生成一个镜像的历史命令
docker image history
  • 显示一个或多个镜像详细信息
docker image inspect
  • 从容器创建一个新的镜像
docker commit -a "runoob.com" -m "my apache" a404c6c174a2  mymysql:v1 
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停

仓库操作

docker login          # 登录到一个registry
docker search        # 从registry仓库搜索镜像
docker pull            # 从仓库下载镜像到本地
docker push          # 推送一个镜像到镜像仓库

4. docker安装

菜鸟教程

参考
https://zhuanlan.zhihu.com/p/91303839
https://yeasy.gitbooks.io/docker_practice/content/install/ubuntu.html
https://www.runoob.com/docker/ubuntu-docker-install.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值