1.1什么是容器?
一种虚拟化的方案
操作系统级别的虚拟化
只能运行相同或相似内核的操作系统
依赖于linux内核特性:namespace 和cgrops(control group)
1.2 什么是docker?
将应用程序自动部署到容器
go语言开源引擎
2013年初发布
基于apache 2.0 开源授权协议发行
1.3 doceker的目标
提供简单轻量的建模方式
职责的逻辑分离
快速高效的开发生命周期
鼓励使用面向服务的架构
1.4 docker 的使用场景
使用docker容器开发、测试、部署服务
创建隔离的运行环境
搭建测试环境
构建多用户的平台即服务(paas)基础设施
提供软件即服务(saas)应用程序
高性能、超大规模的宿主机部署
2.1 docker 客户端/守护进程
c/s 架构
本地/远程
2.2 docker 镜像
容器的基石
层叠的只读文件系统
联合加载
2.3 doceker container容器
通过镜像启动
启动和执行阶段
写时复制(copy on write)
2.4 docker registry 仓库
公有
私有
docker hub
3.1 namespaces 命名空间
编程语言
封装———代码隔离
操作系统
系统资源的隔离
进程、网络、文件系统、资源…….
3.2 control groups 控制组
用来资源分配
来源于google
提供的功能
资源限制
优先级设定
资源计量
资源控制
3.3 docker容器的能力
文件系统隔离:每个容器都有自己的root文件系统
进程隔离:每个容器都运行在自己的进程环境中
网络隔离:容器间的虚拟网络接口和ip地址都是分开的
资源隔离和分组:使用cgroups将cpu和内存之类的资源独立分配给每个docker容器
http://www.docker.org.cn/ 参考文档 docker中文社区
https://docs.docker.com/ 下载
2.1 在red-hat安装docker
docker目前可以在红帽企业版7(red hat enterprise linux 7)版本下面安装。
依赖性检查:
docker需要一个64位系统的红帽系统,内核的版本必须大于3.10。可以用下面的命令来检查是否满足docker的要求。
$ uname -r 3.10.0-229.el7.x86_64
如果上述的依赖满足的话,还是推荐您全面地更新红帽系统,以保证内核相应的bug都得到修复。
目前红帽rhel系统下面安装docker可以有两种方式:一种是使用curl获得docker的安装脚本进行安装,还有一种是使用yum包管理器来安装docker。
一、使用安装脚本安装。
备注:你可以按照同样的步骤在centos系统下面安装docker。
- 使用一个有sudo权限的帐号登录红帽系统。
- 更新现有的yum包。
$ sudo yum update
- 执行docker安装脚本。
$ curl -ssl https://get.docker.com/ | sh
- 启动docker服务。
$ sudo service docker start
- 确认docker安装成功。
- $ sudo docker run hello-world
二、使用yum包安装
1. yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2.yum makecache fast
3.yum -y install docker-ce
- 启动docker服务。
service docker start
- 确认docker是否安装成功。
docker run hello-world
2.2 在windows安装docker
方法一、下载docker for windows (需要运行microsoft hyper-v);docker community edition(社区版)和docker enterprise edition(企业版)docker ce仅支持win10,而docker ee仅支持win server 2016.
方法二、下载docker toolbox(需要运行oracle virtual box);docker 给旧版本的win系统提供的是docker toolbox下载
docker toolbox共包含5个docker工具:
- docker machine:包含了docker-machine命令。
- 运行docker命令所需要的引擎。
- kitematic,docker gui界面。
- 事先为docker 命令行环境配置好的shell。
- oracle公司的vm virtualbox包。
因为docker守候进程依赖于linux内核,所以无法直接在windows环境中直接运行docker。ag真人游戏的解决方案就是使用docker-machine命令创建一个docker虚拟机并附加到它上面。这个docker虚拟机来为你的windows系统提供docker服务。
这个docker虚拟机专门为windows运行环境优化过,轻量级,完全在内存中运行,很小,下载不超过24m,5秒那可以启动。
安装完成后桌面会生成三个快捷方式,分别为:
(1) docker quickstart terminal: 提供docker的命令行操作
(2) oracle vm virtualbox: 虚拟机软件。
(3) kitematic (alpha):图形化的docker工具
4.1容器的基本操作
启动容器:
$ docker run image [command][arg…]
run 在新容器在中执行命令
启动交互式容器:
$ docker run –i –t image /bin/bash
-i --interactive=ture | false 默认是false -------告诉守护进程始终打开标准输入 交互式
-t --tty=ture | false 默认是false -------打开命令终端
查看容器:
$ docker ps [-a][-l]
$ docker inspect (id/name) 查看容器详细信息
$ docker run --name自定义 –i – t ubutun /bin/bash ---- 自定义容器名称
$ docker start [-i] 容器名 -----重新启动
$ docker rm [容器名] -----删除一个停止的容器
3.2守护式容器
$ docker run -i –t image /bin/bash 退出时用 ctrl p ctrl q;
$ docker attach (id/name) 重新进入退出时的容器
启动守护式容器
$ docker run –d 镜像名 [command][arg…]
$ docker logs [-f][-t][-tail] 容器名
-f --follows=ture | false 默认为false ---跟踪日志变化并返回结果
-t --timestamps=true | false ---加上时间戳
--tail = “all” ---返回行数
在运行中的容器内启动新的进程
$ docker exex [-d][-it[-t]
$docker stop 容器名
$ docker kill 容器名
3.3部署静态网站
设置容器的端口映射
run [-p] [-p]
nginx 部署流程
docker run --name web1 -p 8080 -i -t centos /bin/bash 创建docker
正常部署并启动tomcat
ctrl p ctrl q 返回宿主机
[root@qiyong-app-t01 ~]# docker port web1
8080/tcp -> 0.0.0.0:32769
显示宿主机的32769端口映射docker的8080端口
访问宿主机的32769端口正常显示页面
docker top web1 显示docker的进程
docker exec web1 nginx 启动容器相关服务
5.1 查看和删除镜像
存储位置:/var/lib/docker
docker info ----查看信息
列出镜像
删除镜像
5.2 获取和推送镜像
查找镜像
获取和推送镜像——拉取镜像
使用国内仓库镜像服务器
登录https://www.daocloud.io注册
在dashboard中申请链接xxx
修改启动配置文件 vi /etc/default/docker
添加docker_opts=”.xxx”
重启
上传镜像到dockerhup中
docker push image
5.3 构建镜像
手动构建镜像
实例:
1.运行一个docker容器并做修改
docker run -i -t --name test centos /bin/bash ---运行了一个test的容器
安装一个nginx 然后退出
[root@qiyong-app-t01 ~]# docker ps –l 列出docker信息
container id image command created status ports names
72a9de314e75 centos "/bin/bash" 2 minutes ago up 2 minutes test
2.将容器转化为镜像作者齐勇镜像名image_test
docker commit -a qiyong test image_test
[root@qiyong-app-t01 ~]# docker images 列出镜像
repository tag image id created size
image_test latest 9cf7917b729d 15 seconds ago 298mb
使用dockerfile构建镜像
- 创建doclerfile文件
- 使用docker build 命令
创建一个目录创建dokerfile文件并将以上内容放入,使用build构建镜像
6.1 docker的c/s 模式(客户端支持远程访问sercer)
remote api
链接方式
6.2守护进程的配置和操作
启动关闭重启守护进程
systemctl [commod] docker start stop restart
docker –d --以守护方式运行
以上选项在配置文件中配置
6.3 docker的远程访问
修改服务端启动配置文件
修改客户端
- dockerfile
7.1 dockerfile指令
指令格式(两部分:注释 指令)
四种指令
from
maintainer
run ----指定镜像中运行的命令
run
expose ----指定运行改镜像的容器使用的端口
其他指令
cmd
entrypoint
add
copy
volume [“/data”]
workdir /path/to/workdir ----指定工作目录 默认使用绝对路径
env
user daemon ----指定
onbuild [intruc] 创建触发器
7.2 dockerfile构建镜像过程
1.从基础镜像运行一个容器
2.执行一条指令,对容器进行修改
3.执行类似docker commit的操作,提交一个新的镜像层
4.再基于刚提交的镜像运行一个新容器
5.执行dockerfile的下一条指令,直至所有指令执行完毕
docker history
dockerfile镜像缓存,再次构建更高效
- 网络连接
8.1docker容器的网络基础
brctl show --显示网桥信息
8.2 容器的互联
1)允许容器互联
默认(-icc=ture)情况下同一宿主机之间的容器没有网络限制,都是通过虚拟网桥进行链接的
容器在重启后ip地址会发生改变,这样我们就无法链接到指定的服务器了,这是我们不希望的,所以docker给我们提供了下面的选项:为容器间创建链接和别名,设置link选项后容器在重启时,系统会自动修改ip地址和别名的映射 具体可以 /etc/hosts 实验
2)拒绝容器的互联
-icc=false
vi /etc/default/docker
添加:docker_opts=” –icc=false”
3)允许特定的容器间链接
1.vi /etc/default/docker
添加:docker_opts=” --icc=false --iptables=true”
webtest为别名
2.iptables –f 清空配置
3.重启docker docker restart
4.重启容器
5.进入容器查看 iptables –l
docker链变成了第一位,而且设置link的两个容器之间是通的规则
8.3 docker容器与外部网络的链接
ip_forward linux中的变量:决定了系统是否会转发流量 默认值 ture
查看命令 :systectl net4.conf.all.forwarding
iptables(包过滤)
主要
iptables -i docker -s 10.3.3.3 –d 10.3.3.2 –p tcp --dport 80 –j drop (阻止10.3.3.3 访问10.3.3.2)
9.1容器的数据卷
不能指定本地映射的路径
9.2 卷容器
--volumes-from 指定数据卷容器
docker run –it --name dvt5 --volumes-from dvt4 ubutun /bin/bash
9.3 数据卷的备份和还原
10.1 网桥实现跨主机链接
10.2 使用open switch实现跨主机链接
10.3 使用weave实现跨主机链接
chmod x /usr/bin/weave
weace launch 启动
启动命令时 会在主机上创建一个weave的docker容器
weave launch 192.168.59.103 分配一个ip(第二台也传入这个ip
)
用weave命令创建一个容器
c2=$(weave run 192.168.1.2/24 -it centos /bin/bash)
echo $c2 返回docker的id
docker attrch $c2 进入容器
第二台一致的动作