标签:
一、介绍
1、 Docker的特性:
2、docker 应用场景
二、环境搭建:
Docker对Linux环境有两个要求,一是64位系统,二是内核在3.8以上。 下面以centos 上搭建为例:
docker仓库用来保存我们的images,当我们创建了自己的image之后我们就可以使用push、pull命令从公有或者私有仓库下载、上传镜像;Docker Registry私有服务器用于保存管理我们的私有镜像。
需要注意的是CentOS 6.X与7.0的安装是有一点点不同的,CentOS-6上docker的安装包叫docker-io,并且来源于Fedora epel库,这个仓库维护了大量的没有包含在发行版中的软件,所以先要安装EPEL,而CentOS-7的docker直接包含在官方镜像源的Extras仓库(CentOS-Base.repo下的[extras]节enable=1启用)。前提是都需要联网。
centos 6.8 的具体安装启动过程如下。
centos 7 的安装启动过程如下
三、基本操作&命令
简单查询:
镜像相关:
centos6.8: /var/lib/docker/repositories-devicemapper.json ( 注意centos 6.8 没有var/lib/docker/image/文件夹, 在docker 1.10 后,容器的所有配置文件同意移动到了 /var/lib/docker/image文件夹中)
centos7.X: /var/lib/docker/image/devicemapper/repositories.json
centos /var/lib/docker/graph/{imageid}/
json -保存着关于这个镜像的元数据
layersize – 一个整数,表示layer的大小。
存储: 一个镜像就是的基础是一系列的layers, 一个docker 镜像就是一组制度的layer组成,
docker 1.7之前: docker images --tree 可以查看一个镜像包含的所有layers
1.7之后: dockviz images -d |dog -Tpng -o images.png
由于目Docker支持AUFS,Btrfs,Device mapper,OverlayFS,ZFS五种存储驱动,所有各自存储的位置是不一样的
centos 6.8 &docker1.7: docker daemon -D -s overlay -g /varlib/docker 首先会提示内核版本过低
容器相关:
-d 后台运行
-t -i 合用, 交互模式运行
-net 指定网络, 默认bridge (会使用172段的ip依次分配给启动的docker 容器), host 模式为共享主机的网络配置和端口。
-p 当net不为host 模式时, 将容器的端口 映射到宿主机器的端口上。
--ip 指定容器的ip
-e 环境变量设置
docker export containId >mycontain.tar 注意导出只是容器的静态文件快照,docker file 描述将会丢失。
cat mycontain.tar |docker import - tqcommontomcat:0.01 导入发布为本地的一个镜像。
docker save imageName:version > save.tar 或者 docker save -o save.tar imageName:version保存镜像,包含layers ,和dockerfile
docker load < /home/save.tar 或 docker load -i save.tar
docker commit contarinId imageName:version
docker daemon
所谓docker damemon 即为docker server 主进程, centos 6.8 : /etc/init.d/docker start , centos 7 : systemctl start docker.service
Docker 1.10增加了新功能(http://geek.csdn.net/news/detail/54953),从这个版本以后,用户在Linux上跑Docker时都不必再以root权限运行了。
1.10之前所有容器都只能在Docker daemon下以root权限运行。
安全的命名空间. 通过命名空间,Docker 1.10将Docker daemon和容器区别开来,对二者的权限分别加以处理,同时为各个容器分配相应的权限等级。在1.10下,Docker daemon仍然要取得主机的root权限,但容器就可以不用了。
传统的容器管理工具 LXC 即将退出 Docker 的舞台,
在 Linux 内核版本 3.10+ 上,使用内嵌的 overlay 驱动来完成跨主机的网络互联
在docker 1.10以前: 启动dokcer server 实际执行命令为:docker -d $other_args
设置dns使用 docker -d --dns 8.8.8.8
设置dns搜索域 docker -d --dns-search example.com
输出调试log docker -d -D
在docker 1.10 后: docker daemon $other_args
docker daemon -D -s overlay -g /var/lib/docker
进入容器内部:
容器网络
docker network ls 列出所有容器的网络id ,和网络模式
docker network inspect networkId 列出网络的详细信息
docker network connect --option containId 为运行中容器创建网络
dockerfile 相关
四、example
镜像tqtestjava:2.0 制作,tqtestjava:2.0 是一个userauth 和userauthweb的运行环境,
容器启动的功能包括:
1、能够在容器内部自动更新svn代码.
2、自动mvn install ,自动启动两个java .
3、容器的端口自动映射.
4、容器打包
下载一个基础的centos 镜像,docker pull centos
以交互模式启动centos 容器: docker run -d -ti centos /bin/bash,
进入容器bash后,安装yum , net , jdk, svn ,maven , svn co 社管代码到 /usr/local/project/zhejiange 下, 编写启动脚本/usr/local/start_zhejiang.sh
(这里需要注意的是我一开始讲许多环境变量设置在/etc/profile 中,其实对docker 来说,这可能是无效的,因为docker 的许多镜像,都市linux 精简版本 ,系统启动也仅仅加载必要的资源),所以需要我们在docke run 是指定环境变量,或者在dockerfile 中指定(固定不变的话)。
提交镜像: docker cmmoit mycontainId tqtestjava:1.0
5、tqtestjava:1.0 虽然有了我们需要自行的环境, 我们也可以以交互模式进入,启动我们的应用,但是如果要让我们的应用在容器启动的时候自动启动应用, 需要 在docker run 命令后面拼接以系列的环境变量, 换需要手动指定docker 启动的时自行的脚本, 工作目录等。
例如:
这对使用人员来说不太方面。
所以我们编写dockeFile : dockerUseranthTest.txt
然后执行: docker build -f dockerUseranthTest.txt -t tqtestjave:2.0 .
这样我们就新生成了一个 tqtestjave:2.0 镜像。
最后执行: docker -d --net=host tqtestjave:2.0 就可以实现启动容器时应用自启动了
6、网络选择: 这里我们选择host 模式, 不是说host 模式好,而且线上也不建议使用host模式。 而且因为如果我们选择bridge 模式,需要在路由器上设置一个172段的路由网关,同时固定宿主机器上分配的docker 容器的ip 段。 这适合于有网络经验的人来搞。
五、docker REST API
docker的所有命令可以通过一系列的restful 的API , 这对生产环境编写漂亮发布,部署脚本十分有效
docker images 可以等级与:
echo -e "GET /images/tomcat/json HTTP/1.0\r\n" |nc -U /var/run/docker.sock
docker ps 可以等级与:
echo -e "GET /containers/json HTTP/1.0\r\n" |nc -U /var/run/docker.sock
默认情况下 Docker 的守护进程启动会生成一个 socket (/var/run/docker.sock)进程通信文件,而并没有监听端口,只能在本机操作 Docker。如果想在其它地方操作 Docker 主机,就需要让 Docker 主机监听一个端口号,这样可以通过端口号就能实现远程操作。
1、对于手动启动的docker daemon :可以这样配置
docker -d -H unix:///var/run/docker.sock -Htcp://0.0.0.0:5678
2、ubuntu :
vim /etc/default/docker.io :
DOCKER_OPTS=" -H unix:///var/run/docker.sock" =====修改为====>DOCKER_OPTS=" -H tcp://0.0.0.0:5678 -H unix:///var/run/docker.sock"
service docker.io restart
3、Red Hat 7系列
systemctl stop docker
vim /etc/sysconfig/docker
#修改other_args 的值
other_args=" -H tcp://0.0.0.0:5678 -H unix:///var/run/docker.sock"
systemctl start docker
配置验证:
docker -H localhost:5678 version
六、相关资源
https://github.com/docker
QQ交流群:534368042
标签:
原文地址:http://www.cnblogs.com/luyulong/p/5844518.html