docker基础手册范本.docx

上传人:b****3 文档编号:5683793 上传时间:2023-05-09 格式:DOCX 页数:19 大小:673.49KB
下载 相关 举报
docker基础手册范本.docx_第1页
第1页 / 共19页
docker基础手册范本.docx_第2页
第2页 / 共19页
docker基础手册范本.docx_第3页
第3页 / 共19页
docker基础手册范本.docx_第4页
第4页 / 共19页
docker基础手册范本.docx_第5页
第5页 / 共19页
docker基础手册范本.docx_第6页
第6页 / 共19页
docker基础手册范本.docx_第7页
第7页 / 共19页
docker基础手册范本.docx_第8页
第8页 / 共19页
docker基础手册范本.docx_第9页
第9页 / 共19页
docker基础手册范本.docx_第10页
第10页 / 共19页
docker基础手册范本.docx_第11页
第11页 / 共19页
docker基础手册范本.docx_第12页
第12页 / 共19页
docker基础手册范本.docx_第13页
第13页 / 共19页
docker基础手册范本.docx_第14页
第14页 / 共19页
docker基础手册范本.docx_第15页
第15页 / 共19页
docker基础手册范本.docx_第16页
第16页 / 共19页
docker基础手册范本.docx_第17页
第17页 / 共19页
docker基础手册范本.docx_第18页
第18页 / 共19页
docker基础手册范本.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

docker基础手册范本.docx

《docker基础手册范本.docx》由会员分享,可在线阅读,更多相关《docker基础手册范本.docx(19页珍藏版)》请在冰点文库上搜索。

docker基础手册范本.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2