docker总结
2016-05-24 00:00
525 查看
摘要: docker微服务能降低运营成本,提高开发效率。配置一个环境从开发、测试、生存都适用。直接将我们从繁杂的环境配置中解脱出来,docker会越来越多的工程师使用。现在简单介绍下docker的一些概念和使用方法。
b.创建应用镜像并进行复制
c.创建容易分分的即启即用的应用
d.运行实例简单、快速地扩展
e.测试应用并随后销毁它们
f、docker是一个基于LXC开源应用容器引擎,使用沙箱机制。
Docker的镜像类始于一种虚拟机的快照,但是更加轻。给容器提供环境配置,创建后会有唯一的ID、名称和标签对
b.容器(container)
容器是从镜像中创建的,是一个启动了的环境,相当于一个独立的虚拟机系统。启动后有唯一的ID、名称。
ps:容器一般用来运行一个单应用,而这些应用的依赖会依赖容器。在创建镜像的时候,我们一般会一层一层的创建,然后通过依赖完成我们的应用。比如:创建一个tomcat的镜像,我们先创建一个centos镜像,然后创建一个jdk镜像,最后在创建一个tomcat镜像。这里推荐,每一个镜像都只有一个应用。
c.数据卷(volume)
我们的容器在运行的时候,Docker会单独维护一套rootfs文件系统。当我们创建、销毁容器的时候,都会将rootfs的内容格式化。Docker的数据券,可以将主机的文件挂载在容器上,在容器销毁的时候,不会销毁挂载内容。再次创建容器,可以直接使用同样的数据,这就为我们的SQL数据安装做了保证,可以利用这种特性将日志和数据库数据存放在主机上
d.连接(network)
Docker程序会维护一套自己的network网络(相当于一个网关),我们每一个container都是通过这套network和外接、其它容器通信。
1.提供了容器间相互通信的渠道。在创建容器的时候,直接引用,就能将两个容器连接。
2.容器将共享一个本地网络
ps:最佳实践:不要在Dockerfile中使用expore和volumn命令,而是在run的时候,通过-p和-v来实现端口、数据卷。
Mapped Device:是内核对外提供的逻辑地址,提供给用户态、bash使用。
Mapping Table:提供的是逻辑地址和Target Device的映射关系,有Mapped Device 逻辑的起始地址、范围、和表示在 Target Device 所在物理设备的地址偏移量以及Target 类型等信息(注:这些地址和偏移量都是以磁盘的扇区为单位的,即 512 个字节大小,所以,当你看到128的时候,其实表示的是128*512=64K)。
Target Mapped: 记录的是物理空间段。
(这种使用中间映射表的映射机制,可以将逻辑地址和物理地址解耦,
Ⅰ:通过mappering table,我们可以映射物理地址、逻辑地址,一切我们需要存放信息的地方。
Ⅱ:通过mappringTable我们还可以将逻辑地址的大小,映射为不同物理大小。这样在使用过程中,不端添加,修改。
)
7、在/var/lib/docker的文件
b.最佳实践
Ⅰ.保持常见的指令响MAINTAINER以及从上至下更新DockerFile命令。
Ⅱ.当构建镜像时使用可理解的标签,以便更好的管理镜像。
Ⅲ.避免在DockerFile中映射文件系统,公有端口。在run的时候使用-v,-p设置。
Ⅳ.CMD和ENTRYPOINT命令使用数组语法,这连个命令会被run,exec 后面的commond命令替换掉
Ⅴ.如果设置CMD和ENTRYPOINT执行命令,在run的时候,执行完命令后容器会关闭。一般都是直接使用脚本。
生成tomcat:8 的镜像
运行镜像
在宿主机查看9000端口是否打开
在外面查看
docker总结
docker微服务能降低运营成本,提高开发效率。配置一个环境从开发、测试、生存都适用。直接将我们从繁杂的环境配置中解脱出来,docker会越来越多的工程师使用。现在简单介绍下docker的一些概念和使用方法。1、Docker能做什么
a.隔离应用依赖b.创建应用镜像并进行复制
c.创建容易分分的即启即用的应用
d.运行实例简单、快速地扩展
e.测试应用并随后销毁它们
f、docker是一个基于LXC开源应用容器引擎,使用沙箱机制。
2、Docker的镜像、容器、数据券、连接
a.镜像(image)Docker的镜像类始于一种虚拟机的快照,但是更加轻。给容器提供环境配置,创建后会有唯一的ID、名称和标签对
b.容器(container)
容器是从镜像中创建的,是一个启动了的环境,相当于一个独立的虚拟机系统。启动后有唯一的ID、名称。
ps:容器一般用来运行一个单应用,而这些应用的依赖会依赖容器。在创建镜像的时候,我们一般会一层一层的创建,然后通过依赖完成我们的应用。比如:创建一个tomcat的镜像,我们先创建一个centos镜像,然后创建一个jdk镜像,最后在创建一个tomcat镜像。这里推荐,每一个镜像都只有一个应用。
c.数据卷(volume)
我们的容器在运行的时候,Docker会单独维护一套rootfs文件系统。当我们创建、销毁容器的时候,都会将rootfs的内容格式化。Docker的数据券,可以将主机的文件挂载在容器上,在容器销毁的时候,不会销毁挂载内容。再次创建容器,可以直接使用同样的数据,这就为我们的SQL数据安装做了保证,可以利用这种特性将日志和数据库数据存放在主机上
d.连接(network)
Docker程序会维护一套自己的network网络(相当于一个网关),我们每一个container都是通过这套network和外接、其它容器通信。
1.提供了容器间相互通信的渠道。在创建容器的时候,直接引用,就能将两个容器连接。
2.容器将共享一个本地网络
3.Docker镜像的可移植性
Docker允许在一个镜像中指定卷和端口,从这个镜像创建的容器继承这些设置。但是Docker不允许在镜像上指定不可以移植的内容,因为你不知道宿主机上面是否有这些卷和端口可以使用。ps:最佳实践:不要在Dockerfile中使用expore和volumn命令,而是在run的时候,通过-p和-v来实现端口、数据卷。
4、docker的container的实现过程:
[code=plain]1.创建镜像image文件:DockerFile 2.docker build -ti 镜像名 dockerFile的地址 3.docker images(查看我们的镜像是否创建) 3.dcoker run -d -p 主机port:docker的port --name container名称 镜像名 (先启动依赖的container,在启动我们自己的container) 4.docker ps -a (查看我们的container运行) 5.docker exec -ti container名称 /bin/bash(进入container中) 6.exit 退出 7.docker stop container名称 暂停container运行
5、docker常用命令
[code=plain](image和container都可以使用ID和名称,一般推荐使用名称,查询的时候很直观) 1.镜像管理:(创建、导入、导出、删除、保存、修改标签) a、创建:docker build [-t:一个tag;-f:Dockerfile地址] filepath (这里推荐使用-t) b、查看:docker images c、删除:docker rmi IMAGE/ d、查看历史:docker history IMAGE(查看image有多少层) e、保存:docker save IMAGE f、标签:docker tag IMAGE DockerHub_Name/image_Name:image_version g、导入:docker import <soft_path>/name.tar h、导出: docker export > path/name.tar 2、容器的rootfs命令:(在容器创建的时候,应用启动之前,都会配置文件系统、端口信息) a、提交:docker commint CONTAINER b、复制:docker cp CONTAINER/path Host/path 从容器拷贝到主机上 docker cp Host/path CONTAINER/path 从主机拷贝到容器中 c、变化:docker diff CONTAINER 查看创建过程的文件系统变化 3、容器的生命周期: a、关闭:docker top CONTAINER b、启动:docker start CONTAINER c、创建:docker run [OPTION] IMAGE (这里的区别是在使用docker ps -l 显示image时的名字,推荐使用IMAGE_NAME) [--name:container名称;-ti:前端运行,可交互;-d:后端运行;-p:主机port=container—port] d、重启:docker restart CONTAINER e、关闭:docker stop/kill CONATER f、暂停:docker pause CONTAINER g、删除:docker rm CONTAINER 4、运维(进入、查看) a、进入:docker exec -ti CONTAINER commond(container的bash:设置的执行入口,例如市面上linux发行版默认的都是bin/bash) b、从内部退出:exit c、查询变动:dcoker diff CONTAINER (查询目录、文件:添加:A-add; 删除:D-delete; 修改:C-change) d、查看:docker ps -a e、查看容器配置信息:docker inspect CONTAINER f、阻塞:docker wait CONTAINER g、日志:docker logs CONTAINER 5、dockerhub: a、查询: docker search IMAGE_NAME c、登录:docker login --username=dockerHub_Name --email=email b、下载: docker pull 库/IMAGE_NAME:TAG (默认:库--》docker.io,tag-->latest ,也可以用自己的私有库) c、上传: docker push 库/IMAGE_NAME:TAG (默认:库--》docker.io,tag-->latest ,也可以用自己的私有库)
6、docker的device Mapper
docker的rootfs文件系统,在centos里面用的是device Mapper。这个文件系统包括了:Mapped Device,Mapping Table,Target Device。Mapped Device:是内核对外提供的逻辑地址,提供给用户态、bash使用。
Mapping Table:提供的是逻辑地址和Target Device的映射关系,有Mapped Device 逻辑的起始地址、范围、和表示在 Target Device 所在物理设备的地址偏移量以及Target 类型等信息(注:这些地址和偏移量都是以磁盘的扇区为单位的,即 512 个字节大小,所以,当你看到128的时候,其实表示的是128*512=64K)。
Target Mapped: 记录的是物理空间段。
(这种使用中间映射表的映射机制,可以将逻辑地址和物理地址解耦,
Ⅰ:通过mappering table,我们可以映射物理地址、逻辑地址,一切我们需要存放信息的地方。
Ⅱ:通过mappringTable我们还可以将逻辑地址的大小,映射为不同物理大小。这样在使用过程中,不端添加,修改。
)
7、在/var/lib/docker的文件
[code=plain]containers:运行的容器 devicemapper:docker的文件系统(从docker build image:tag 后就一直存在) graph:存放的images信息 linkgrahdb: network: repositories-devicemapper: tmp:这里存放的有docker pull下载时候的iamge信息/build时的Dockerfile文件 trust: volumes:容器和主机的之间的文件映射信息?
8、dockerFile编写
a.常用的命令[code=plain]ps:写的时候,尽量不要设置volumn、expore值,这两个值在run的时候使用-v,-p直接设置。因为,不能确定宿主机的文件和网络端口是否被占用 【FROM】 语法:FROM <image name> 解释:设置要制作的镜像基于哪个镜像,FROM指令必须是整个Dockerfile的第一个指令,如果指定的镜像不存在默认会自动从Docker Hub上下载 【MAINTAINER】 语法:MAINTAINER <author name > 解释:MAINTAINER指令允许你给将要制作的镜像设置作者信息 【ENV】 语法:ENV <key> <value> 解释:ENV指令用于设置环境变量,在Dockerfile中这些设置的环境变量也会影响到RUN指令,当运行生成的镜像时这些环境变量依然有效,如果需要在运行时更改这些环境变量可以在运行docker run时添加–env =参数来修改。 注意:最好不要定义那些可能和系统预定义的环境变量冲突的名字,否则可能会产生意想不到的结果。 【RUN】 语法:①RUN 《run》 #将会调用/bin/sh -c ②RUN ["executable", "param1", "param2"] #将会调用exec执行,以避免有些时候shell方式执行时的传递参数问题,而且有些基础镜像可能不包含/bin/sh 解释:RUN指令会在一个新的容器中执行任何命令,然后把执行后的改变提交到当前镜像,提交后的镜像会被用于Dockerfile中定义的下一步操作,RUN中定义的命令会按顺序执行并提交,这正是Docker廉价的提交和可以基于镜像的任何一个历史点创建容器的好处,就像版本控制工具一样。(相当于每次run都会创建一个image层,提供给下一层使用) 【EXPOSE】 语法:EXPOSE <port> 解释:EXPOSE指令用来告诉Docker这个容器在运行时会监听哪些端口,Docker在连接不同的容器(使用–link参数)时使用这些信息。配合run -p 主机port:容器port 可以访问外部 【ADD】 语法:ADD 《src》《destibation》 解释:ADD指令用于从指定路径拷贝一个文件或目录到容器的指定路径中,是一个文件或目录的路径,也可以是一个url,路径是相对于该Dockerfile文件所在位置的相对路径,是目标容器的一个绝对路径,例如/home/yooke/Docker/Dockerfile这个文件中定义的,那么ADD /data.txt /db/指令将会尝试拷贝文件从/home/yooke/Docker/data.txt到将要生成的容器的/db/data.txt,且文件或目录的属组和属主分别为uid和gid为0的用户和组,如果是通过url方式获取的文件,则权限是600。 注意: ①如果执行docker build – < somefile即通过标准输入来创建时,ADD指令只支持url方式,另外如果url需要认证,则可以通过RUN wget …或RUN curl …来完成,ADD指令不支持认证。 ②路径必须与Dockerfile在同级目录或子目录中,例如不能使用ADD ../somepath,因为在执行docker build时首先做的就是把Dockerfile所在目录包含子目录发送给docker的守护进程。 ③如果是一个url且不是以”/“结尾,则会下载文件并重命名为。 ④如果是一个url且以“/”结尾,则会下载文件到/,url必须是一个正常的路径形式,“http://example.com”像这样的url是不能正常工作的。 ⑤如果是一个本地的压缩包且是以“/”结尾的目录,则会调用“tar -x”命令解压缩,如果有同名文件则覆盖,但是一个url时不会执行解压缩。 【ENTRYPOINT】 语法:①ENTRYPOINT ["executable", "param1", "param2"] #将会调用exec执行,首选方式 ②ENTRYPOINT command param1 param2 #将会调用/bin/sh -c执行 解释:ENTRYPOINT指令中指定的命令会在镜像运行时执行,在Dockerfile中只能存在一个,如果使用了多个ENTRYPOINT指令,则只有最后一个指令有效。ENTRYPOINT指令中指定的命令(exec执行的方式)可以通过docker run来传递参数,例如docker run -l启动的容器将会把-l参数传递给ENTRYPOINT指令定义的命令并会覆盖CMD指令中定义的默认参数(如果有的话),但不会覆盖该指令定义的参数,例如ENTRYPOINT ["ls","-a"],CMD ["/etc"],当通过docker run 启动容器时该容器会运行ls -a /etc命令,当使用docker run -l启动时该容器会运行ls -a -l命令,-l参数会覆盖CMD指令中定义的/etc参数。 注意: ①当使用ENTRYPOINT指令时生成的镜像运行时只会执行该指令指定的命令。 ②当出现ENTRYPOINT指令时CMD指令只可能(当ENTRYPOINT指令使用exec方式执行时)被当做ENTRYPOINT指令的参数使用,其他情况则会被忽略。 【VOLUME】 语法:VOLUME ["samepath"] 解释:VOLUME指令用来设置一个挂载点,可以用来让其他容器挂载以实现数据共享或对容器数据的备份、恢复或迁移,具体用法请参考其他文章。 【USER】 语法:USER <uid> 解释:USER指令用于设置用户或uid来运行生成的镜像和执行RUN指令。 【WORKDIR】 语法:WORKDIR /path/to/workdir 解释:WORKDIR指令用于设置Dockerfile中的RUN、CMD和ENTRYPOINT指令执行命令的工作目录(默认为/目录),该指令在Dockerfile文件中可以出现多次,如果使用相对路径则为相对于WORKDIR上一次的值,例如WORKDIR /data,WORKDIR logs,RUN pwd最终输出的当前目录是/data/logs 【ONBUILD】 语法:ONBUILD [INSTRUCTION] 解释:ONBUILD指令用来设置一些触发的指令,用于在当该镜像被作为基础镜像来创建其他镜像时(也就是Dockerfile中的FROM为当前镜像时)执行一些操作,ONBUILD中定义的指令会在用于生成其他镜像的Dockerfile文件的FROM指令之后被执行,上述介绍的任何一个指令都可以用于ONBUILD指令,可以用来执行一些因为环境而变化的操作,使镜像更加通用。 注意: ①ONBUILD中定义的指令在当前镜像的build中不会被执行。 ②可以通过查看docker inspeat 命令执行结果的OnBuild键来查看某个镜像ONBUILD指令定义的内容。 ③ONBUILD中定义的指令会当做引用该镜像的Dockerfile文件的FROM指令的一部分来执行,执行顺序会按ONBUILD定义的先后顺序执行,如果ONBUILD中定义的任何一个指令运行失败,则会使FROM指令中断并导致整个build失败,当所有的ONBUILD中定义的指令成功完成后,会按正常顺序继续执行build。 ④ONBUILD中定义的指令不会继承到当前引用的镜像中,也就是当引用ONBUILD的镜像创建完成后将会清除所有引用的ONBUILD指令。 ⑤ONBUILD指令不允许嵌套,例如ONBUILD ONBUILD ADD . /data是不允许的。 ⑥ONBUILD指令不会执行其定义的FROM或MAINTAINER指令。 【CMD】使用【ENTRYPOINT】代替,在使用run的时候,如果后面的指令和cmd指令相同,会被替换掉 【COPY】使用【ADD】 代替
b.最佳实践
Ⅰ.保持常见的指令响MAINTAINER以及从上至下更新DockerFile命令。
Ⅱ.当构建镜像时使用可理解的标签,以便更好的管理镜像。
Ⅲ.避免在DockerFile中映射文件系统,公有端口。在run的时候使用-v,-p设置。
Ⅳ.CMD和ENTRYPOINT命令使用数组语法,这连个命令会被run,exec 后面的commond命令替换掉
Ⅴ.如果设置CMD和ENTRYPOINT执行命令,在run的时候,执行完命令后容器会关闭。一般都是直接使用脚本。
9、tomcat为服务使用
Dockerfile文件[code=plain]#tomcat Dockerfile FROM centos:latest #设置变量 ENV JAVA_HOME /usr/local/jdk1.8.0_91 ENV CATALINA_HOME /usr/local/apache-tomcat-8.0.35 ENV PATH=.:$JAVA_HOME/bin:$:$CATALINA_HOME/bin:$PATH #将jdk、tomcat换成自己的版本,add会直接将压缩文件解压开 ADD /jdk-8u91-linux-x64.tar.gz /usr/local/ ADD /apache-tomcat-8.0.35.tar.gz /usr/local/
生成tomcat:8 的镜像
[code=plain]docker build -ti myapp/tomcat:8 .
运行镜像
[code=plain]1.运行container:-p 主机端口:容器端口 -v 主机文件:容器文件 docker run -ti --name tomcat -p 9000:8080 -v /usr/local/logs/tomcat8/:/usr/local/apache-tomcat-8.0.35/logs/ myapp/tomcat:8 /bin/bash (ps:容器映射文件的时候,和mount的方式一样,会将/usr/local/logs/tomcat8/:/usr/local/apache-tomcat-8.0.35/logs/内容格式化,然后将宿主机的文件/usr/local/logs/tomcat8/ 挂载上,在运行的时候,需要将宿主机的文件挂载空的容器文件价下面) 2.在容器里面运行docker # ./usr/local/apache-tomcat-8.0.35/startup.sh
在宿主机查看9000端口是否打开
[code=plain]netstat -antp
在外面查看
[code=plain]http://宿主机ip:9000/
相关文章推荐
- centos6.5上安装docker
- docker容器的网络信息查看
- openstack kilo-with-dokcer
- 在windows下的安装Docker的教程
- 8个你可能不知道的Docker知识
- 在Docker中自动化部署Ruby on Rails的教程
- 搭建基于Docker的PHP开发环境的详细教程
- 利用OpenVSwitch在多台主机上部署Docker的教程
- ubuntu14.04+docker的安装及使用
- Docker 清理命令集锦
- 再Docker中架设完整的WordPress站点全攻略
- 基于 Docker 开发 NodeJS 应用
- 使用Docker来加速构建Android应用的基本部署思路解析
- 在Docker上部署Python的Flask框架的教程
- 在Docker上开始部署Python应用的教程
- 详解在Python和IPython中使用Docker
- python脚本监控docker容器
- 使用IPython来操作Docker容器的入门指引
- Alpine Linux Repository本地镜像制作
- OSX下brew安装docker(boot2docker)