docker

docker_第1张图片
docker_sence.png

容器,依托Linux内核功能的虚拟化技术

docker 将软件和库部署在主系统上

特点

PaaS platform as service

Saas software as service

docker

  • 客户端/守护进程
  • 镜像image,启动容器的所有信息,层叠只读文件系统
    (1.boot fs (基础镜像)-> 2.root fs (ubuntu) -> 3.add emacs,appache联合加载文件系统)
  • 容器 container 启动和执行阶段,写时复制copy on write,可写层
    创建新容器,创建可写层+镜像层=镜像,有服务可运行
  • 仓库 registry ,保存用户构建的镜像

docker 容器基本操作

docker pull IMAGE

  • 启动交互式命令,有终端
    docker run -it IMAGE /bin/bash
    -i -interactive 交互,false 默认
    -t -tty 终端,false默认

  • 查看容器
    docker ps -la
    -l 最新创建的容器
    -a all

  • inspect 检查
    docker inspect container_name/container_id

  • 自定义容器名字
    docker run --name=name_self -ti mysql /bin/bash

  • 重新启动停止的容器
    docker start -i container_name

  • 删除已经停止的容器
    docker rm container_name

  • 删除镜像
    docker rmi image

docker 守护容器

  • docker run -it ubuntu /bin/bash
    使用ctrl+p /ctrl +q退出,后台运行

  • docker ps -a
    查看容器在后台仍然运行

  • docker attach container_iid
    可以进入容器

  • docker run --name container_name -d ubuntu /bin/bash -c "while true,do echo hello word;done"
    后台执行守护进行-d

  • docker logs -f -t --tail container_name
    -f --follow 一直跟踪
    -t --timestamps 打印时间戳
    --tail = “all” 结尾多少数量的日志
    ex:docker logs -tf --tail 10 container_name 最新的10条日志

  • docker top container_name
    查看运行容器中的进程

  • docker exec -d -i -t container_name
    在运行中的容器内启动新进程,开启容器的多进程
    docker top 命令查看是否多进程

  • docker stop/kill container_name
    stop 发送信号,让容器停止,需要一定时间返回容器名字
    kill 直接暴力停止容器运行

  • 容器端口映射
    -p --publish=[]
    1.宿主机端口随机对应 container port
    docker run -p 80 -it ubuntu /bin/bash
    2.都进行指定端口 host port:container port
    docker run -p 8080:80 -it ubuntu /bin/bash
    3.对容器端口指定 ip:container port
    docker run -p 0.0.0.0:80 -it ubuntu /bin/bash
    4.对容器端口指定 ip:host port:container port
    docker run -p 0.0.0.0:8080:80 -it ubuntu /bin/bash

容器内部署静态网站

修改nginx/defalut.conf
host port : http://localhost:12345
container port : http://172.17.0.1:80
docker inspect container_name

  • stop-> start docker ,ip地址和端口都发生了改变
  • ctrl+p 退出后台运行
    docker exec -i container_name nginx 运行一次nginx,
    docker top 查看是否启动
    docker inspect container_name 查看对应IP地址

1.control groups 控制组(分配资源)

  • 资源限制-mem达到上限,outofmem
  • 优先级设定-更大磁盘io,CPU
  • 资源计量
  • 资源控制,挂起/恢复

隔离

  • 文件系统(每个系统有自己root文件系统),

  • NET 网络(虚拟网络接口和IP地址是分开的),

  • PID,进程(容器运行在自己的进程环境中),

  • MNT (挂在点)资源隔离和分组(CPU,cgroups,内存独立分配给docker容器)

  • IPC 跨进程通信访问

docker 网络链接

ifconfig 系统网络设备

  • 桥接/虚拟网卡docker0,网桥-osi七层(数据链路层:应用,表示,会话,传输,网络,数据链路,物理)
    ex:172.12.42.1,子网掩码:255.255.0.0 -地址:65534个
  • install brigde-utils 下载
  • brctl show 查看网桥

自定义虚拟网桥

自定义 docker0

  • ifconfig docker0 192.168.200.1 netmask 255.255.255.0
  • service docker restart 重启docker 服务
  • 运行容器,查看容器的ip地址

添加虚拟网桥

  • brctl addbr br0
  • ifconfig br0 192.168.100.1 netmask 255.255.255.0

更改docker 守护进程的启动配置

  • /etc/default/docker 中添加DOCKER_OPS值="addbr"
    -b=br0
  • 重启docker service
  • ps -ef |grep docker

Dockerfile可以构建镜像

docker 仓库,标签

  • 不同标签对应的是相同的仓库
  • 删除注意
  • 自定义镜像以软件形式打包并分发及其运行环境
  • docker commit 通过容器构建
    -- docker commit [options] CONTAINER [REPOSITORY:[TAG]]
    -- -p 不让容器暂停
    -- ex: docker commit -a author -m "container_id/container_name" repo_name:tag
  • docker build 通过Dockerfile 文件构建

First Dockerfile

FROM ubuntu:14:04
MANITAINER docker_hub_path_name
RUN apt-get update
RUN apt-get install -y nginx
expose 80
CMD /bin/bash

First Dockerfile volume

FROM ubuntu:14:04
VOLUME ["/a1","/a2"]
CMD /bin/bash

docker 构建命令

docker build -t="image_name_tag"

  • t --tag="tag name"
    每一步返回一个id,这是中间层的镜像

Docker Hub 查找与拉取镜像 - pull,push,search

  • 本地与远程镜像互动操作
  • docker hub 网站,需要注册 账号
  • docker search ubuntu
  • docker pull image ubuntu:tag
  • docker 使用第三方平台拉取镜像
    -- 修改docker的配置文件 /etc/default/docker DOCKER_OPTS = "加速地址"
    -- 重启docker 服务并查看docker 的守护进程
    -- 例如 :注册daocloud,加速器-> 加速地址
  • docker push 传送镜像到docker hub,提交修改的部分

docker 容器的数据卷volume

添加数据卷在启动容器前

docker run -v ~/datavolume:/data -it ubuntu /bin/bash
-v volume 相当于挂载

添加对数据卷的权限访问

  • docker run -it -v ~/datavolume:/data:ro ubuntu /bin/bash
    :ro read only
  • docker inspect container_name
    查看具体数据卷的权限
    -- 独立于docker 容器,分离docker容器的生存周期,可以目录,文件进行数据共享(一数据卷对多容器)
    -- 容器对数据卷的修改是及时进行的
    -- 数据卷变化不会影响镜像的更新

docker 容器的数据卷容器(不用暴露主机的目录)

创建数据卷容器

  • docker run --volumes-from container_name

创建容器后常见挂载数据卷

  • 在数据卷容器内 touch 文件

查看host 主机的数据卷情况

  • docker inspect --format="{{.Volumes}}" container_dv1
  • docker inspect --format="{{.Volumes}}" container_dv2

总结:
1.数据卷容器删除,还是在容器查看对应的数据卷信息,证明数据卷容器只是配置作用
2.docker 中如果一个容器的数据卷还是使用,就不会被删除掉

数据卷的备份和还原-数据备份

docker run --volume-from [container_name] -v $(pwd 目录:/backup ubuntu tar cvf /xvf /backup/backup.tar [container data volume ]

  • cvf 压缩
  • xvf 解压

docker run --volume-from dv1 -v /backup_datavolume:/backup --name dv2 ubuntu tar cvf /xvf /backup/backup.tar /datavolume1

host : /backup_datavolume

re ### 容器互联
docker run -it --name --link:cct1:webtest container_path_name
重启docker,仍然可以实现ip地址(容器)不变,容器之间可以互相链接

容器拒绝互联,通过ping验证

--icc= false

允许特定容器之间的互联

--icc= false --iptables=true
--link

re ### Docker容器跨主机链接

  • 网桥实现跨主机容器链接
  • 使用Open vSwitch实现跨主机容器链接(虚拟主机)
  • 使用weave实现跨主机容器链接(开源)

容器的集群管理Caas

容器的调度:docker swarm,kubernetes(google)
同步集群:etcd,zookeeper
服务发现:etcd,haproxy
日志监控:elk

  • 云集容器管理
    -- 除了以上
    -- 网络配置
    -- 安全配置
    -- 负载均衡
    -- 数据持久化
    -- 容错、高可用

  • Parcelles

Caas 概述

  • 提供容器运行平台并管理容器所需资源
  • Iaas灵活,Paas搬便利
  • 支持多租户
  • 伸缩性-弹性的扩大或缩小所需资源
  • 可视化(UI)和可控性

Caas机遇和挑战
1.共享容器技术带来的所有优势
2.解决了Iaas和Paas在实践中存在的问题
3.应用开发专注于应用开发,一键配置
4.快速迭代,简化部署
5.微服务的理想平台

挑战:
1.共享容器技术不足
2.技术日新月异
3.容器镜像云平台化

4.国内社区认知度不高

你可能感兴趣的:(docker)