版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
为什么会出现docker•初识docker使用docker运行一个容器docker
run-i-tcentos/bin/bashls(文件)ps(进程)ipa(网络)从这里可以看出,这个容器和虚拟机还是比较类似的。平时使用的•虚拟机和容器对比•虚拟机和容器的区别相同点都可以在不同的主机之间迁移都具备root权限都具有备份操作不同点虚拟机是硬件级别的虚拟化,容器是操作系统级别的虚拟化。虚拟机启动需要几分钟,而容器可以达到秒级启动。一个虚拟机会占用几个GB的磁盘空间,而容器只占用几百MB。虚拟机的性能要弱
生系统,而容器的性能接近生系统,因为容器底层使用的是宿主机系统。一台服务器最多支持几十个虚拟机,但是可以支持上千个容器。•Docker的应用加速本地开发和构建流程。容器可以在开发环境中构建,然后轻松提交到测试环境中,最终进入生产环境。能够让应用程序在不同的环境中,得到相同的运行结果。为开发、测试提供一个轻量级的独立沙盒环境。提供
即服务应用程序。高性能、超大规模的宿主机部署。•docker核心组件docker采用的是c/s架构,具有客户端和服务端,如右图,它主要包含以下三大组件镜像镜像是构建docker世界的基石。也是docker生命周期中的“构建”部分。可以把镜像当作容器的"源代码"镜像体积小,非常“便携”,易于分享、存储和更新。可以把镜像简单的理解为windows系统的镜像Registry(仓库)docker用registry来保存用户构建的镜像以及官方的镜像,registry分为公有和私有。可以简单的理解为一个仓库。Docker公司运营的registory叫做docker
hub容器容器是基于镜像启动的,容器中可以运行一个或多个进程。镜像是docker生命周期中的构建或打包阶段,而容器则是启动或执行阶段。仓库里面存储着镜像,基于镜像可以启动容器。•docker案例流程Docker运行环境Docker可以运行在任何安装了linux内核的64位CPU的主机上,不支持32位CPU。的内核版本是3.8或者更高。在ubuntu或者redhat系列主机中部署Docker宿主机的内核必须支持一种适合的 驱动DeviceMapper(默认驱动)宿主机的内核必须支持并开启cgroup和命名空间(namespace)功能cgroup和namespaces在2.6版本之后已经集成在linux内核之中了。Docker的开销比较低,可以用于服务器、台式机、或笔记本。•安装Docker以centos7(64位)为例:必须是64位系统,建议使用英文版本,中文版本也会有问题。centos7(64位)
地址:/centos/7.1.1503/isos/x86_64/CentOS-7-x86_64-DVD-1503-01.iso1:验证linux内核版本,uname-a,版本以上。2:检查Device
Mapper(Docker的建议使用3.8驱动),grepdevice-mapper
/proc/devices如果不存在则安装yum
install-y
device-mapper加载dm_mod内核模块modprobe
dm_mod3:安装docker(centos7)yum
-y
install
docker(默认安装 版)•安装指定版本的docker查看可安装的版本yum
makecache
fast(相当于更新本地缓存
yum
list
docker--showduplicates安装指定版本yum
-y
install
docker-1.6.2-14.el7.centos•Docker入门启动dockersystemctl
start
docker(centos7)启动dockersystemctl
enable
docker(centos7)添加开机启动项验证docker是否正常systemctl
status
dockerdocker
info运行一个容器(交互式)docker
run
-i
-t
centos
/bin/bash-i
表示stdin标准输入-t表示tty终端退出容器exit查看docker命令docker帮助命令docker
help
run•执行docker
run提示警告信息docker
1.6.2版本修改/etc/sysconfig/docker文件•docker
run
命令的内部流程•docker容器操作命令(1)查看容器列表docker
ps
[-a]
[-l]
[-n
num]给容器命名docker
run
--name
crxy
-t
-i
centos
/bin/bash合法的容器名称正则[a-zA-Z0-9_.-]重新启动已经停止的容器docker
start
容器名称/容器ID附着到一个容器上docker
attach容器名称/容器ID创建长期运行的容器docker
run
--name
daemon_crxy
-d
centos
/bin/bash
-c
"while
true;do
echoo
world;
sleep
1;done"获取容器日志docker
logs[--tail
num][-t][-f]容器名称/容器ID(日志位置/var/lib/docker/containers/ID/ID-json.log)查看容器内的进程dockertop
容器名称/容器ID在容器 运行进程(docker1.3之后才支持)docker
exec
-d
daemon_crxy
touch/etc/crxy_file:表示只执行一条命令docker
exec-t-i
daemon_crxy/bin/bash:表示可以执行多条命令•docker容器操作命令(2)停止容器docker
stop
容器名称/容器IDdocker
kill
容器名称/容器ID获取容器详细信息docker
inspect
[--format
|-f]容器名称/容器ID例子:docker
inspect--format='{{.State.Running}}'crxy容器
位置:/var/lib/docker/containers删除容器docker
rm
容器名称/容器IDdocker
rm
`docker
ps-a-q`(删除所有容器)容器的导入和导出导出:docker
export
容器ID>my_container.tar导入:cat
mycontainer.tar
|
docker
import-镜像名称:镜像的保存和加载保存:docker
save
镜像ID>my_image.tar加载:docker
load<my_image.tar•深入docker镜像拉取镜像文件到本地docker
pull
centos查看本地镜像:docker
images查找镜像docker
search[镜像名称]构建镜像1:使用docker
commit
命令docker
commit
容器名称/ID
crxy/centos-tomcatdocker
commit-m="describe"--author="teacher"容器名称/IDcrxy/centos-tomcat:testdocker
inspect
crxy/centos-tomcat:test2:使用docker
build命令和Dockerfile文件(
)docker
build
-t="crxy/centos"
.查看构建的步骤和层级docker
history
用户ID/镜像名•Dockerfile中指令执行流程dockerfile中的指令会按照从上到下执行docker按照如
程执行dockerfile中的指令docker首先从基础镜像运行一个容器执行一条指令,对容器进行修改执行类似docker
commit的操作,提交一个新的镜像层。docker再基于刚提交的镜像运行一个新容器
执行dockerfile中的下一条指令,直到所有指令都执行完毕。•Dockerfile指令详解一所有指令都必须为大写字母以#开头的都认为是注释
第一条指令必须是FROMFROM(指定使用的基础镜像)MAINTAINER(指定镜像的作者信息)RUN(指定镜像被构建时要运行
令)默认会使用/bin/bash-c
执行RUN
后面指定
令也可以使用RUN
["mkdir","a.txt"]EXPOSE(告诉docker该容器需要对外开放的端口)docker的构建缓存由于每一步的构建过程都会将结果提交为镜像,所以docker的构建镜像过程就显得非常聪明,它会将之前的镜像层看作缓存。再进行重新构建时会从第一条发生了变化的指令开始,前面的都使用缓存可以使用--no-cache
参数来指定不使用缓存功能一般会在dockerfile中使用ENV指令设置一个时间(ENV
CREATE_TIME
2015-01-01)•容器端口映射默认情况下docker不会自动打开这些端口,必须在运行容器的时候指定-P(大写)参数,这样就可以打开expose指定的所有端口。使用expose指定端口只是为了方便使用-P参数在启动容器的时候开放端口。EXPOSE指令可以同时指定一个或多个需要对外开放的端口expose
80
8080
6379如果没有使用expose指定需要对外开放的端口,还可以在启动容器的时候动态指定,使用-p(小写)参数-p
80(docker会在宿主机上随机选择一个未被使用的端口来映射到容器中的80端口上)-p
8080:8080(把宿主机上的8080端口映射到容器的8080端口)-p
80:80-p
8080:8080
同时指定多个使用docker
ps
可以查看容器的端口分配情况或者使用docker
port
容器ID/名称查看总结-P(大写)这样的话会将dockerfile文件中EXPOSE
指令指定的所有端口一并公开-p(小写)可以手工指定需要对外公开的端口这两个参数可以同时使用•Dockerfile指令详解二CMD(指定一个容器运行时要执行 令)docker
run-i-t
crxy/cenos-tomcat
/bin/bash在Dockerfile中添加
CMD
["/bin/ps"]注意:使用docker
run
命令可以覆盖CMD指令。ENTRYPOINT(与CMD类似,但是ENTRYPOINT指定令不会被dockerrun指定
令覆盖,它会把docker
run命令行中指定的参数传递给ENTRYPOINT指令中指定 令当作参数。)ENTRYPOINT
["/bin/ps"]docker
run
-t
-i
crxy/centos
-lENTRYPOINT
还可以和CMD组合一块来用,可以实现,当用户不指定参数的时候使用默认的参数执行,如果用户指定的话就使用用户提供的参数ENTRYPOINT
["/bin/ps"]CMD["-h"]注意:如果确实要覆盖默认的参数的话,可以在docker
run中指定--entrypoint进行覆盖WORKDIR(指定工作
)WORKDIR
/etc
RUN
touch
a.txtWORKDIR
/usr/local,但是不会影响之前在工作中执行RUN
touch
b.txt注意:可以在docker
run命令中使用-w覆盖工作令•Dockerfile指令详解三ENV设置环境变量,在这设置的环境变量可以在后面的指令中使用,使用$并且这个环境变量也会被持久保存到从
的镜像创建的任何容器中。可以使用env命令查看也可以使用docker
run命令行的-e参数来传递环境变量,这些变量只在运行时有效-eJAVA_HOME=/usr/local•Dockerfile指令详解四VOLUME(可以理解为设置共享
,磁盘挂载)这个指令用来向基于镜像创建的容器添加卷,一个卷可以存在于一个或者多个容器内的特定的
。特点1:卷可以在容器间共享和重用2:对卷的修改是立刻生效的3:对卷的修改不会对更新镜像产生影响4:卷会一直存在直到没有任何容器再使用它。卷功能可以让
一些数据添加到镜像中而不是将将这个内容提交到镜像中。并且允许在多个容器间共享这些内容。格式:VOLUME["/usr/projrct"]还可以一次指定多个VOLUME["/usr/project","/data"]创建数据卷VOLUME
["/usr/projrct"]或者在启动容器的时候创建docker
run-it-v/webapp
centos/bin/bash注意:默认情况下,如果只是 数据卷而没有
到宿主机上的具体
,docker会在/var/lib/docker/vfs/dir/下分配一个具有唯一名字的
给该数据卷。通过docker
inspect
命令可以查看具体路径指定宿主主机
作为数据卷docker
run
-it
-v
/usr/local/webapp:/webapp
centos
/bin/bash注意:如果容器 已经存在webapp
,那么 中的文件将会被覆盖。默认情况下,数据卷是具有读写权限,rw权限,可以改为只读权限,ro
docker
run
-it
-v
/usr/local/webapp:/webapp:ro
centos
/bin/bash见备注•使用volume注意注意:如果发现执行下面命令创建volume在容器中没有写权限的时候docker
run
-it
-v
/usr/local/webapp:/webapp
centos/bin/bash进入容器
cdwebapptoucha.txttouch:
cannot
touch'a':
Permission
denied解决方法:1:setenforce
0(立刻生效,不需要重启操作系统)
2:修改/etc/selinux/config文件中的SELINUX=disabled,然后重启生效•Dockerfile指令详解五下的指定文件到镜像中(注意只能是构建目ADDADD指令用来将构建录下面的文件)ADD
a.txt/etc/a.txtADD
在添加压缩文件的时候会把压缩文件自动解压。(gzip
bzip2
xz),如果,那么这些文件将会被覆目的位置已经存在了和压缩文件同名的文件或者盖。COPYCOPY和ADD类似,但是COPY命令不会对压缩文件进行解压,只负责复制。如果目的位置不存在,docker会自动创建所有需要的 ,就像使用make-p一样的源文件必须在当前构建环境注意:使用COPY和ADD
令的时候,之内,也就是和Dockerfile同一,否则会找不到。•Dockerfile指令详解六.dockerignore在执行build的时候忽略掉不需要的文件。•推送镜像•删除镜像删除镜像docker
rmi
用户ID/镜像名或者docker
rmi
`docker
images-a-q`删除所有未打 的镜像docker
rmi
-f
$(docker
images
--filter
'dangling=true')•Docker应用实例-web应用web服务器容器首先安装jdk(jdk1.7.0_75)ENV
JAVA_HOME
/usr/local/jdk1.7ENV
JRE_HOME
/usr/local/jdk1.7/jreENVCLASSPATH
.:$JAVA_HOME/jre/lib/rt.jar
:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarENV
PATH
$JAVA_HOME/bin:$PATH再安装tomcat启动tomcat使用这个命令./catalina.sh
rundocker
run
-d
-P
-v/usr/local/crxy:/usr/local/tomcat7/webapps/ROOTcrxy/tomcat
./catalina.sh
run•Docker应用实例-redis服务redis数据库容器(单机)注意:在启动redis的容器之后,如果没有在docker
run中指定-P,那么只能在宿主机或者其他容器里面 这个redis服务,在其他机器上是不能reids服务的,使用-P参数指定端口 之后就可以在其它机器上指定宿主机的ip和端口进行 容器里面的redis服务了。redis主从结构数据库使用容器互联实现主从数据库通信•安装redis镜像首先安装c的编译环境yum
-y
install
cppyum
-yinstall
binutilsyum
-yinstall
glibcyum
-y
install
glibc-kernheadersyum
-yinstall
monyum
-y
install
glibc-develyum
-y
install
gccyum
-yinstall
makemake
MALLOC=libchtt/article/14/1219/42002.html•容器互联使两个容器互联--link
要
的容器名字:
后容器的别名这样在启动一个容器的话就不需要使用-p公开端口了,因为通过把容器链接到一起,可以让父容器直接 任意子容器的公开端口。如果想让redis服务于多个web应用的话,只需要把对应web应用程序的容器和同一个redis容器连接到一起就可以了。注意:被
的容器必须运行在同一个docker宿主机上,不同docker宿主机上运行的容器无法连接。容器连接之后,docker会在父容器里的以下两个地方写入 信息。/etc/hosts文件,里面会保存子容器的ip和主机名的
,当子容器重启的时候(ip地址会发生变化),这个文件中的ip地址会被对应的更新(从docker1.3开始)。环境变量,使用env可以看到子容器的配置信息这样的话在父容器中就可以使用子容器的别名来
子容器中的服务了。•docker
run命令常用参数总结dockerrun-t-i打开stdin和伪终端-d
运行容器--name
指定容器名称-h/--hostname
指定容器主机名-p
开放指定端口-P
开放expose指定的端口-v
向容器中挂载卷--volumes-from
把指定容器里的所有卷都加入到新创建的容器里docker
run
-it
--name
test
-v
/usr/local/crxy:/usr/local/crxycentos
/bin/bashdocker
run
-it
--volumes-from
test
centos
/bin/bash--rm
删除容器--link
容器互联•shipyardShipyard()是建立在docker集群管理工具Citadel之上的可以管理容器、主机等资源的web图形化工具。重新启动docker(添加TCP
)默认情况下docker
只接受来自本机的root用户的请求。事实上,Docker
默认的是
管理。unix//var/run/docker.sock套接字文件。这里需要修改docker
的 端口,使docker支持docker
-H
tcp://0.0.0.0:2375-H
unix:///var/run/docker.sock
-d或者修改vi/etc/sysconfig/docker,添加-H
tcp://0.0.0.0:2375-Hunix:///var/run/docker.sock启动rethinkdbdocker
run-it-d--nameshipyard-rethinkdb-data
--entrypoint
/bin/bashshipyard/rethinkdb
-ldocker
run
-it-P-d
--nameshipyard-rethinkdb
--volumes-from
shipyard-rethinkdb-data
shipyard/rethinkdb启动shipyard控制器docker
run-it
-p
8080:8080
-d--name
shipyard
--link
shipyard-rethinkdb:rethinkdbshipyard/ship
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《比与比例总复习》课件
- 2026年大四《(食品科学与工程)食品质量管理》试题及答案
- 2026年多重耐药菌医院感染防控模拟题库及答案
- 2026年高处作业安全操作培训考试试卷试题及答案
- 2026年山东科技大学综合评价招生综合素质考核笔试+面试模拟试题及答案解析
- 2026年机器学考试模拟试卷(含答案)
- 2026年公务员廉洁从政、廉洁奉公模拟题及答案详解
- 2026年医学影像技术专业题库(含答案)
- 2026年护士中心血站考试题库(含答案)
- 2026年度会计人员继续教育模拟题及答案详解
- 2026小学苏教版五年级科学上册全册教案
- 顶板管理专项安全技术措施培训课件
- 畜牧养殖场智能化生产系统方案
- 中大考博骨科试题及答案
- 山东国惠(香港)控股有限公司招聘笔试题库2026
- 2026年社会保障卡知识竞赛题库(附答案)
- 正畸科普流程
- 中石油承包商培训课件
- 教育教学评价
- 19 11 坐井观天-坐井观天(第2课时)-课件2
- 220kV输电线路事故应急预案
评论
0/150
提交评论