docker基础手册范本.docx
- 文档编号:11389274
- 上传时间:2023-02-28
- 格式:DOCX
- 页数:19
- 大小:673.49KB
docker基础手册范本.docx
《docker基础手册范本.docx》由会员分享,可在线阅读,更多相关《docker基础手册范本.docx(19页珍藏版)》请在冰豆网上搜索。
docker基础手册范本
Docker基本介绍
基本概念
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上。
Docker是一个重新定义了程序开发测试、交付和部署过程的开放平台,Docker则可以称为构建一次,到处运行,这就是docker提出的“Buildonce,Runanywhere”
备注:
java提出的是”compileOnce,RunAnywhere”
Docker与linux核的关系
docker与linux核的关系
Cgroup:
对资源进行限制(如对物理资源CPU、存、I/O的限制)
Namespace:
对进程进行隔离
Chroot:
能改变当前运行的进程和子进程的根目录
AUFS:
联合文件系统,Docker利用AUFS将不同的Layer结合到1个image中去
Docker架构
Docker采用C/S架构,客户端与服务器端不一定要在一起。
客户端可以运行在windows、linux等机器上,然后服务器端必须运行在linux64bit的操作系统上。
Docker“组件间”关系
✓主机:
运行容器的机器
✓镜像:
文件的层次结构,以及包含如何运行容器的元数据,Dockerfile中的每条命令都会在文件系统中创建一个新的层次结构,文件系统在这些层次上构建起来,镜像就构建于这些联合的文件系统之上
✓容器:
一个从镜像中启动,包含正在运行的程序的进程
✓Registry(镜像仓库):
存放镜像的地方,如DockerHub
✓Volumn(卷):
将物理机的文件夹挂载到容器部.与openstack的volumn不一样,openstack中的卷是块存储,不能共享。
而这里的volumn可以共享。
✓Dockerfile:
用于创建镜像的脚本
Docker应用场景
面向开发人员:
快速开发、交付应用程序
主要体现在三个方面:
✓代码一致:
在没有docker之前,开发、测试、生成环境可能不一样,如发布某个服务的端口时,开发是1000,而生产是2000,这就导致配置文件不一致。
然而使用docker后,我在容器的端口都是一样的,而容器对外暴露的端口可能不一样。
✓开发环境与生产环境的一致性
我们知道,在生产环境的部署比较复杂,服务非常繁多。
通过docker,我们可以单机版上通过容器来模拟生产环境的分布式环境。
从而让开发人员的开发更有效率。
✓快速部署
可以将docker理解为轻量级的虚拟机,启动docker容器速度很快,启动虚拟机很慢。
面向运维人员:
降低运维成本
✓节约安装各种软件的时间。
在没有docker之前,在部署程序之前,势必要搭建环境,而搭建环境很花费时间,还要解决环境的各种依赖,而docker通过镜像机制,将你的代码和运行环境直接打包成镜像,扔到容器启动即可。
✓降低运维成本。
在没有docker之前,由于技术不断发展,运维也要不停的学习各种软件的使用技能,如Node.js、redis等。
有了docker,根本不用关系这些技术(或者少关心),只需要关注容器就可以了,能够正常的发布容器,停止容器、删除容器、迁移容器就可以了。
面向企业:
Paas层的实现
C、Oschina这些代码托管平台,有个功能即提供给用户程序的演示环境,我不知道他们底层到底采用的什么技术,但是如果Iaas层的openstack,给用户直接提供虚拟机,先得太“笨重”,因为虚拟机本身对物理机的开销就比较大,如果采用Docker,我1台物理机可以部署多个容器,可以降低企业的采购物理机的费用,而且运行效率上应该比采用Iaas层的方案快。
Docker基本命令
Docker安装相关命令
参考:
https:
//docs.docker./installation/ubuntulinux/
这里以在unbuntu14.04上安装为例:
Ø创建docker用户并将其纳入docker这个用户组
#useradddocker-gdocker
Ø更新源
#sudoapt-getupdate
Ø安装依赖包
#sudoapt-getinstalllinux-image-generic-lts-trusty
Ø重启
#sudoreboot
Ø安装docker
#sudoapt-getinstallwget//可以通过命令whichwget是否已安装
#wget-qO-https:
//get.docker./|sh//获取最新版本
Ø验证安装是否成功
#sudodockerrunhello-world
Docker服务相关命令
Docker服务启动|重启|停止
#servicedockerstart//启动
#servicedockerrestart//重启
#servicedockerstop//停止
Docker服务对应的版本查看
#sudodockerversion
Docker环境查看
#sudodockerinfo
Containers:
5
Images:
129
StorageDriver:
aufs
RootDir:
/var/lib/docker/aufs
BackingFilesystem:
extfs
Dirs:
ExecutionDriver:
native-0.2
KernelVersion:
3.13.0-32-generic
OperatingSystem:
Ubuntu14.04.1LTS
CPUs:
2
TotalMemory:
3.673GiB
Name:
docker
ID:
OWRW:
DDDW:
MQZD:
CCKM:
JDKM:
5ZEP:
LTBB:
YG3H:
QI7G:
EMDE:
MSMR:
XDFK
Username:
ningyougang
Registry:
[https:
//index.docker.io/v1/]
WARNING:
Noswaplimitsupport
Docker命令帮助
#sudodocker//查看docker的所有命令
#sudodockercommand--help//查看单个docker命令的帮助,如dockerru--help
Docker容器相关命令
启动一次性运行的容器
入门级例子:
从ubuntu:
14.04镜像启动一个容器,成功后在容器部执行/bin/echo‘helloworld’命令,如果当前物理机没有该镜像,则执行dockerpull从DockerHub获取镜像,执行成功后,容器立马停止
#sudodockerrunubuntu:
14.04/bin/echo'Helloworld'
参数解释
dockerrun:
docker中的启动容器命令
Ubuntu:
镜像名称
14:
04:
镜像TAG,如果不指定TAG,docker使用最新的发行版TAG:
latest
/bin/echo‘Helloworld’:
在容器执行的命令
该命令执行过程
●如果本地有ubuntu这个image就从它创建容器,否则从公有仓库下载
●从image创建容器
●分配一个文件系统,并在只读的image层外面挂载一层可读写的层
●从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
●从地址池配置1个ip地址给容器
●执行你指定的程序,在这里启动一个/bin/bash
启动交互模式容器
以交互模式启动一个容器(具体参数意义请执行dockerrun--help)
$sudodockerrun-t-iubuntu:
14.04/bin/bash
参数解释
-t:
开启一个终端
-i:
以交互模式运行
启动后台模式容器
以后台模式运行一个容器
#sudodockerrun-dubuntu:
14.04/bin/sh-c"whiletrue;doechohelloworld;sleep1;done"
1e5535038e285177d5214659a068137486f96ee5c2e85a4ac52dc83f2ebe4147
参数解释
-d:
以后台Daemon方式运行,执行成功后会返回一个该容器的ID
以映射端口方式启动一个Web容器
#sudodockerrun-d-Ptraining/webapppythonapp.py
参数解释
-d:
以后台Daemon方式运行,执行成功后会返回一个该容器的ID
-P:
端口映射,外部端口到容器端口的映射规则由docker负责
-p:
自己指定端口映射规则,格式为:
-p外部端口:
容器端口
通过dockerps-l,可以查看到其PORTS列的端口映射规则
当然你也可以,手工指定端口映射规则来启动Web容器
#sudodockerrun-d-p5000:
5000training/webapppythonapp.py
备注:
-p完整的参数为:
-pip:
hostport:
port,将当前物理机的ip的端口映射到容器的端口
如果你想通过很快捷的方式查看容器的端口
#sudodockerport容器ID或容器名称
查看容器的具体信息
以JSON的格式返回容器的具体信息
#sudodockerinspect容器ID或容器名称
进入容器执行命令
#sudodockerexec-it容器ID/bin/bash
备注:
一般对运行着的后台容器,执行该命令。
查看其容器部的情况。
查看容器的日志
$sudodockerlogs容器ID或容器名称
参数解释
-f:
以滚动的形式查看日志,类似于linux的tail-fXXX.log
退出当前容器
$sudoexit//在容器部执行该命令(或crtl+D),一般在交互模式下退出当前容器
备注:
容器仍然运行着
创建容器
#sudodockercreate--nameubuntContainerubuntu:
14.04/bin/echo'Helloworld'
重启容器
#sudodockerrestart容器ID
暂停容器
#sudodockerpause容器ID//暂停
#sudodockerunpause容器ID//解除暂停
停止容器
$sudodockerstop容器ID或容器名称
#dockerstop$(dockerps-q-a)//一次性停止所有容器,慎用
杀死容器
$sudodockerkill容器ID或容器名称
删除容器
$sudodockerrm容器ID或容器名称//删除容器,正在运行的容器不能删除
#sudodockerrm$(dockerps-q-a)//一次性删除所有容器,慎用
单个主机间的容器访问
下面我们通过mysql_server容器与mysql_client容器的互联来了解link
Ø创建mysql_server镜像,并生成一个容器
#cd/
#mkdirmysql_server
#viDockerfile
FROMcentos:
centos6
MAINTAINERningyougang"415622920@qq."
RUNyuminstall-ymysql-servermysql
RUN/etc/init.d/mysqldstart&&\
mysql-e"grantallprivilegeson*.*to'root'@'%'identifiedby'mysql';"&&\
mysql-e"grantallprivilegeson*.*to'root'@'localhost'identifiedby'mysql';"&&\
mysql-uroot-pmysql-e"showdatabases;"
EXPOSE3306
CMD["/usr/bin/mysqld_safe"]
#sudodockerbuild-tningyougang/mysql_server.//生成镜像
#sudodockerrun--name=mysql_server-d-Pningyougang/mysql_server//生成mysql_server容器
Ø创建mysql_client镜像,并生成一个link到mysql_server的client容器
#cd/
#mkdirmysql_client
#viDockerfile
FROMcentos:
centos6
MAINTAINERningyougang"415622920@qq."
RUNyuminstall-ymysql
#sudodockerbuild-tningyougang/mysql_client.//生成镜像
#sudodockerrun--name=mysql_client1--link=mysql_server:
db-t-iningyougang/mysql_client/usr/bin/mysql-hdb-uroot-pmysq//生成mysql_client容器
参数解释
--link:
alias
通过上面的命令,link中的别名(alias)db即是mysql_client连接mysql_server的连接串
Ø进入mysql_client研究其link的实现细节
#sudodockerexec-itbfc6cb037165/bin/bash//以交互模式进入mysql_client容器部
[root@bfc6cb037165/]#env|grepDB//查看与DB(也就是alias)相关的环境变量
DB_NAME=/mysql_client2/db
DB_PORT=tcp:
//172.17.0.25:
3306
DB_PORT_3306_TCP_PORT=3306
DB_PORT_3306_TCP_PROTO=tcp
DB_PORT_3306_TCP_ADDR=172.17.0.25
DB_PORT_3306_TCP=tcp:
//172.17.0.25:
3306
[root@bfc6cb037165/]#vi/etc/hosts
172.17.0.27bfc6cb037165#docker生成的mysql_client的IP、域名
172.17.0.25db#docker生成的mysql_server的IP、域名
总结:
可以发现docker在mysql_client通过生成别名的环境变量和profile相关的主机和域名的配置,打通了客户端到服务器端的tcp连接通道,而对于上层的应用,不需要关注IP、端口这些细节,只需要通过别名来访问即可
Docker网络
参考:
.open-open./doc/view/f720084681bb434bbed132d2bc1493ac
跨主机间的容器访问
Ø使用自定义网桥连接跨主机容器
N/A,待写
Ø使用Ambassador实现跨主机容器
N/A,待写
Økubernetes
N/A,待写
数据管理
Ø把物理机的目录挂载到容器里
以交互模式启动一个容器,将物理机的/src/webapp挂载到/opt/webapp下
#sudodockerrun-t-i-v/src/webapp:
/opt/webappubuntu:
14.04/bin/bash
参数解释
-v物理机目录:
容器目录:
读写权限
其中默认的权限为可读写,ro:
只读
Ø把物理机的文件挂载到容器里
#sudodockerrun-t-i-v/src/webapp/test.html:
/opt/webapp/test.htmlubuntu:
14.04/bin/bash
Ø把容器挂载到另外一个容器
#sudodockercreate-v/dbdata--namedbdataubuntu:
14.04//创建容器
#sudodockerrun-it--volumes-fromdbdataubuntu:
12.04/bin/bash//启动容器卷来自dbdata
参数解释
-volumn-from:
卷来自哪个容器
Ø把容器挂载作为数据备份
#sudodockerrun--volumes-fromdbdata-v$(pwd):
/backup--nameworkerubuntutarcvf/backup/backup.tar/dbdata
命令解释
首先利用ubuntu镜像创建一个容器worker.使用—volumes-fromdbdata参数来让容器挂载dbdata容器的数据卷;使用–v$(pwd):
/backup参数来挂载本机的当前目录到worker容器的/backup目录
Woker容器启动后,执行tar命令将/dbdata压缩到/backup/backup.tar,这样就到物理机的当前目录了
Ø把容器挂载作为数据迁移
#sudodockerrun-v/dbdata--namedbdata2ubuntu/bin/bash
#sudodockerrun--volumes-fromdbdata2-v$(pwd):
/backupbusyboxtarxvf/backup/.tar
挂载到某个容器
#sudodockerattach容器ID
显示运行容器的进程信息
#sudodockertop容器ID
从容器部拷贝文件到物理机
#sudodockercpcd0f61fb8256:
/opt/a.html/
列出容器里被改变的文件夹或文件
#sudodockerdiff容器ID
列表解释
list列表会显示出三种事件,A 增加的,D 删除的,C 被改变的
Docker镜像相关命令
镜像查看
#sudodockerimages//在本机进行镜像查看
#sudodockerinspect镜像ID//查看单个镜像的具体信息,以JSON格式返回
获取镜像
#sudodockerpullcentos//从DockerHub获取镜像
查询镜像
#sudodockersearch镜像名称//从DockerHub按照镜像名称模拟查询镜像
制作镜像
✓通过Dockerfile构建镜像
#sudocd///来到根“/”下
#sudomkdirredis//创建redis文件夹
#touchDockerfile//创建Dockerfile文件,文件容见如下灰色部分
FROMubuntu:
14.04
RUNapt-getupdate&&apt-getinstall-yredis-server
EXPOSE6379
ENTRYPOINT["/usr/bin/redis-server"]
#sudodockerbuild-tningyougang/redis.//通过dockerbuild制作镜像
参数解释
-t:
tag名称
.:
当前Dockerfile的路径,在此处表示当前文件夹下
✓对运行着的容器commit镜像
#sudodockercommit-m"Addedjsongem"-a"KateSmith"0b2616b0e5a8ouruser/sinatra:
v2
参数解释
-m:
提交注释,如此处你加了什么特别的功能
-a:
作者
0b2616b0e5a8:
运行着的容器ID
ouruser/sinatra:
v2:
给当前提交的镜像起名字并打标签
备注:
从上面可以看出,我们可以通过dockercommit来创建镜像,但是这种方式有点凌乱而且很难复制,更好的方式是通过Dockerfile来构建镜像,因为它步骤清晰并且容易复制
给镜像打标签
#sudodockertag5db5f8471261ouruser/sinatra:
devel//当commitorbuild后,对镜像打标签
参数解释
5db5f8471261:
此处的id为镜像ID
备注:
向私有仓库push镜像也要打标签
推送镜像到公共库DockerHub
#sudodockerpushouruser/sinatra
下面介绍下DockerHub
DockerHub是存放镜像的远程仓库,这里简单介绍下,如何使用
Ø注册
首先在https:
//hub.docker./account/signup/完成帐号注册
Ø登录
帐号注册成功后,在https:
//hub.docker./account/login/,即可登录
除了通过登录页面,您也可以通过命令行,通过指令sudodockerlogin登录
Ø查询镜像
点击“BrowseRepos”(或输入https:
//registry.hub.docker./),进入镜像查询页面
在此页面,您可以录入你感兴趣的镜像名称,进行模糊查询
当然你也可以通过dockersearchXXX进行镜像查询
Ø使用Docker帐号绑定GitHub帐号,进行自动化构建
需要细化,没有来得及研究
推送镜像到私有库
✓下载私有仓库镜像
#dockerpullregistry#从DockerHub下载registry镜像,里面含私库的运行环境,#当然你也可以自己下载源码包,自己安装
✓推送之前打tag
#dockertag704ca5ad68c5192.168.202.213:
5000/newtouch/activemq#打标签(必须先打标签,#在推送)
该命令格式为:
dockertag$ID$IP:
$port/$name。
push到私库上必须先打个tag,而tag名称的格式为:
$IP:
$port/$name,个人感觉此处设计不太好或我自己没有找到更好的办法。
如果设计良好应该可以直接push,不用打标签.
✓Pushtag到镜像
#dockerpush192.168.202.213:
5000/newtouch/activemq#将此tag推送到私有库
✓Push到仓库后,远程查看
#curl192.168.202.213:
5000/v1/search#push之后,远程查看
✓在另外一个docker客户端,从私有仓库下载
#dockerpull192.168.202.213:
5000/newtouch/activemq
Dockertag报https错误问题解决:
vi/etc/default/docker#红色部分是添加的部分,重启docker服务
#DockerUpstartandSysVinitconfigurationfile
#Customi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- docker 基础 手册 范本