码迷,mamicode.com
首页 > 其他好文 > 详细

docker

时间:2018-05-28 19:47:09      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:ges   镜像   标准   mis   htm   空格   rac   pts   信号   

docker

1. 什么是容器

首先 —— 容器是一种虚拟化的方案,但与传统的虚拟机不同

传统虚拟机—— 通过中间层将一台或多台独立的机器虚拟运行在物理硬件之上

容器 —— 直接运行在操作系统上的用户空间,所以也被成为操作系统虚拟化,

只能运行相同或相似内核的操作系统

docker —— 依赖于linux的内核特性,所以只能运行以linux为基础的系统

有点 —— 不需要包含操作系统(虚拟机包含),所以资源占用减少,虚拟机需要模拟硬件行为,对内存和cup损

耗比较大,容器技术较复杂,不易管理,不易自动化,而docker很好的解决了这一系列行为

docker —— 将应用程序自动部署到容器的开源引擎,go语言,拥有应用程序部署引擎

docker特点 —— 简单轻量的建模方式、职责的逻辑分离、快速高效的开发生命周期(环境一直),面向服务的架

构(单个容器只运行一个)

docker作用 —— 使用docker容器开发、测试、部署;隔离运行环境;测试环境;PaaS;SaaS

2. docker的基本组成

  • Client 客户端

  • Daemon 守护进程

  • Image 镜像

  • Container 容器

  • Registry 仓库

  1. 客户端/守护进程 ——> c/s

    客户端发送命令,命令传给守护进程,守护进程将结果返回给客户端

  2. 镜像

    容器的基石,基于镜像启动与运行,层叠的只读文件系统

  3. 容器

    通过镜像启动,执行单元,从镜像的可写层中(镜像顶层),写时复制

  4. 仓库

    保存用户构建的镜像,docker hub(公用镜像)

关系 —— 客户端访问docker的守护进程,从而操作docker的容器,而容器是通过镜像进行启动与执行的,而镜像

保存在仓库之中,以上几位docker各部分的关系

3. docker容器相关技术

docker依赖的linux内核特性

  • Namespaces 命名空间

  • Control groups(cgroups) 控制组

Namespaces

变成语言包含命名空间的概念,可以理解为是一种封装的概念,而封装本省就是代码隔离

在操作系统中命名空间提供系统资源隔离(进程、网络、文件系统等)

Control groups(cgroups)

分配资源。资源限制,优先级设定,资源计量,资源控制

 

docker容器的能力

  • 文件隔离系统——每个容器都有自己的root文件系统

  • 进程隔离——每个容器都运行在自己的进程环境之中

  • 网络隔离——容器间的虚拟网络接口和IP地址都是分开的

  • 资源隔离与分组——使用cgroups将cpu和内存之类的资源独立分配给每个docker容器

4. 安装命令

  • 检查内核版本

    uanme -a

  • 检查device mapper(存储驱动)

    ls -l /sys/class/misc/device-mapper、

 

推荐使用docker维护的版本

  • 检查APT的https支持查看/usr/lib/apt/methods/https文件是否存在,如果不存在则运行安装命令进行安装(apt-get update) ,然后 apt-get install -y apt-transport-https

  • 添加docker的APT仓库

    echo deb https://get.docker.com/ubuntu docker main > /etc/apt/sources.list.d/docker.list

  • 添加仓库的key

    apt-key adv --keyserver hkp://keysever.ubuntu.com:80 --recv-keys 36.......E9(此处为key,省略)

  • 安装

    apt-get update

    apt-get install -y lxc-docker

由于以上安装比较繁琐,所以推出了建议安装版本

  1. sudo apt-get install -y curl

  2. curl -sSL https://get.docker.com/ubuntu/ | sudo sh

5. 容器的基本命令

  • 启动容器

    docker run image【command】【arg...】

    docker run -i -t image /bin/bash 提供交互式的容器

    -i --interactive=true|false 默认为false 始终打开标准输入

    -t --tty=true|false 默认为false 为创建的容器分配一个伪tty终端

  • 查看容器

    docker ps 【-a】(列出所有的容器)【-l】(列出最新的容器)

    不加参数时是列出运行中的容器

    docker inspect 容器名字或者容器Id

  • 自定义容器名

    docker run --name (自定义名字) -i -t image /bin/bash

  • 重启启用停止的容器

    docker start 【-i】 容器名

  • 删除不在运行中的容器

    docker rm 容器名称或ID

 

守护式容器

什么是守护式容器——能够长期运行、没有交互式回话、适合运行应用程序与服务

启动守护式容器的方法

  • 以交互式容器的方式启动,然后以ctrl+P,ctrl+Q的方式退出该交互式容器,注意两个ctrl命令是连续的

  • 以run命令启动一个守护式容器 docker run -d image 【command】【arg...】

     

附加到运行中的容器(即重新进入守护式容器)

docker attach 容器名

查看容器日志

docker logs 【-f】【-t】【--tail】 容器名

-f --follows=true|false 默认为false 跟踪日志并返回结果

-t --timestamps=true|false 默认为false 返回的结果上加上时间戳

--tail ="all" 返回结尾处日志数量

查看容器内进程

docker top 容器名

在运行中的容器中启动新进程

docker exec 【-d】【-i】【-t】容器名【command】【args...】

停止守护式容器

  1. docker stop 容器名

    发送一个信号等待容器结束

  2. docker kill 容器名

    直接停止容器

man docker -run/man docker -logs查看清晰命令

6. 容器的使用(部署静态网站)

  1. 设置容器的端口映射

    run -P -p

    -P,--publish -all=true|false 默认为false 为容器暴露的所有端口进行映射

    docker run -P -i -t ubuntu /bin/bash

    -p,--publish=[] 指定映射那些容器的端口

    docker run -p 80 -i -t ubuntu /bin/bash

    其中端口的映射有多种方式,推荐下面两种

    指定宿主机和容器的端口,即 8080:80 ——将容器80端口映射到宿主机的8080端口

    指定宿主机IP+port:容器端口 ,即0.0.0.0:8080:80

  2. 安装Nginx

    • docker run -p 80 --name web -i -t ubuntu /bin/bash

    • 运行apt-get install -y nginx

    • 如果提示Unable to locate package nginx,则先运行 apt-get update

    • 安装vim apt-get install -y vim

    • 创建包 mkdir -p /var/www/html

    • 切换目录 创建一个index.html vim index.html

    • 书写简单的页面内容

    • 通过whereis nginx查看nginx的安装目录

    • ls /etc/nginx/sites-enabled/

    • vim /etc/nginx/sites-enabled/default

    • 编辑 增加 root /var/www/html

    • 切换到根目录运行nginx(直接输入nginx便可以直接运行)

    • 通过ps -ef便可以查到nginx已经运行

    • 以守护容器退出(上述方法)

    • 可以使用docker ps 查看端口使用情况,也可以使用docker port 容器名称,查看端口情况

    • 使用curl http://127.0.0.1:32768 查看是否可以返回index.html页面

    当容器停止后,端口号也会随之发生变化,这点要注意

    7. docker镜像的查看与删除

    • 列出镜像

      docker images 【optsions】【repository】

      -a,--all=false 不显示中间层镜像

      -f,--filter=[] 显示式的过滤条件

      --no-trunc = false 指定不使用截断的形式(id长度)

      -q,--quiet=false 只显示镜像的唯一Id

    • 镜像的仓库与标签组成一个完整的镜像,获得唯一Id

    • 查看镜像的完整信息

      docker inspect 【options】container|image (容器或镜像)

    • 删除一个镜像

      docker rmi 【options】image

      -f,--force 强制删除镜像

      --no-prune=false 不删除被打标签的父镜像

      docker rmi $(docker images ubuntu -q) 删除ubuntu的所有镜像 ,原因是docker images ubuntu -q

      只返回镜像id,而rmi支持多个删除,中间用空格间隔

 

 

 

 

docker

标签:ges   镜像   标准   mis   htm   空格   rac   pts   信号   

原文地址:https://www.cnblogs.com/fengerlong/p/9101829.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!