您的位置:首页 > 运维架构 > Docker

Docker的安装配置及使用详解

2016-07-25 22:21 856 查看

基本概念

Docker包括三个基本概念

镜像(Image)

容器(Container)

仓库(Repository)

先理解了这三个概念,就理解了Docker的整个生命周期。

1、docker安装与启动

yuminstall-yepel-release
yuminstalldocker-io#安装docker
#配置文件/etc/sysconfig/docker

chkconfigdockeron#加入开机启动
servicedockerstart#启动docker服务

#基本信息查看
dockerversion#查看docker的版本号,包括客户端、服务端、依赖的Go等
dockerinfo#查看系统(docker)层面信息,包括管理的images,containers数等
dockerpullcentos下载
dockerimages[centos]查看
dockerrun-i-tcentos/bin/bash


2、镜像的获取与容器的使用

#搜索镜像
dockersearch<image>#在dockerindex中搜索image
#下载镜像
dockerpull<image>#从dockerregistryserver中下拉image
#查看镜像
dockerimages:#列出images
dockerimages-a#列出所有的images(包含历史)
dockerrmi<imageID>:#删除一个或多个image

#使用镜像创建容器
dockerrun-i-tsauloal/ubuntu14.04
dockerrun-i-tsauloal/ubuntu14.04/bin/bash#创建一个容器,让其中运行
bash应用,退出后容器关闭
#查看容器
dockerps:列出当前所有正在运行的container
dockerps-l:列出最近一次启动的container
dockerps-a:列出所有的container(包含历史,即运行过的container)
dockerps-q:列出最近一次运行的containerID
#再次启动容器
dockerstart/stop/restart<container>#:开启/停止/重启container
dockerstart[container_id]#:再次运行某个container(包括历史container)
dockerattach[container_id]#:连接一个正在运行的container实例(即实例须
为start状态,可以多个窗口同时attach一个container实例)
dockerstart-i<container>#:启动一个container并进入交互模式(相当于先
start,在attach)
dockerrun-i-t<image>/bin/bash#:使用image创建container并进入交互模
式,loginshell是/bin/bash
dockerrun-i-t-p<host_port:contain_port>#:映射HOST端口到容器,方便
外部访问容器内服务,host_port可以省略,省略表示把container_port映射到
一个动态端口。
#注:使用start是启动已经创建过得container,使用run则通过image开启一个新的
container。

#删除容器
dockerrm<container...>#:删除一个或多个container
dockerrm`dockerps-a-q`#:删除所有的container
dockerps-a-q|xargsdockerrm#:同上,删除所有的container


3.进入容器-nsenter命令

使用attach命令有时候并不方便。当多个窗口同时attach到同一个容器的时候,所有窗口都会同步显示。当某个窗口因命令阻塞时,其他窗口也无法执行操作了。
nsenter安装
nsenter工具在util-linux包2.23版本后包含。如果系统中util-linux包没有该命令,可以按照下面的方法从源码安装。

cd/usr/src;wgethttps://www.kernel.org/pub/linux/utils/util-linux/v2.28/util-linux-2.28.tar.gz
./configure--without-ncurses

makensenter&&sudocpnsenter/usr/local/bin


nsenter使用
nsenter可以访问另一个进程的名字空间。nsenter要正常工作需要有root权限。
为了连接到容器,你还需要找到容器的第一个进程的PID,可以通过下面的命令获取。

PID=$(dockerinspect--format"{{.State.Pid}}"<container>)

通过这个PID,就可以连接到这个容器:

nsenter--target$PID--mount--uts--ipc--net--pid

更简单的,建议下载.bashrc_docker,并将内容放到.bashrc中。

wget-P~https://github.com/yeasy/docker_practice/raw/master/_local/.bashrc_docker;echo"[-f~/.bashrc_docker]&&.~/.bashrc_docker">>~/.bashrc;source~/.bashrc

这个文件中定义了很多方便使用Docker的命令,例如docker-pid可以获取某个容器的PID;而
docker-enter可以进入容器或直接在容器内执行命令。

echo$(docker-pid<container>)
docker-enter<container>ls
docker-enter<container>bash

3、持久化容器与镜像


3.1通过容器生成新的镜像


运行中的镜像称为容器。你可以修改容器(比如删除一个文件),但这些修改不会影响到镜像。不过,你使用dockercommit命令可以把一个正在运行的容器变成一个新的镜像。

dockercommit<container>[repo:tag]#将一个container固化为一个新的image,后面的repo:tag可选。

3.2持久化容器

export命令用于持久化容器

dockerexport<CONTAINERID>>/tmp/export.tar

3.3持久化镜像

Save命令用于持久化镜像

dockersave镜像ID>/tmp/save.tar

3.4导入持久化container

删除container2161509ff65e

dockerrm2161509ff65e

导入export.tar文件

cat/tmp/export.tar|dockerimport-export:latest

3.5导入持久化image

删除imagedaa11948e23d

dockerrmidaa11948e23d

导入save.tar文件

dockerload</tmp/save.tar

对image打tag

dockertagdaa11948e23dload:tag

3.6export-import与save-load的区别

导出后再导入(export-import)的镜像会丢失所有的历史,而保存后再加载(save-load)的镜像没有丢失历史和层(layer)。这意味着使用导出后再导入的方式,你将无法回滚到之前的层(layer),同时,使用保存后再加载的方式持久化整个镜像,就可以做到层回滚。(可以执行dockertag来回滚之前的层)。

3.7一些其它命令

dockerlogs$CONTAINER_ID#查看docker实例运行日志,确保正常运行
dockerinspect$CONTAINER_ID#dockerinspect<image|container>查看image或container的底层信息
dockerbuild<path>寻找path路径下名为的Dockerfile的配置文件,使用此配置生成新的image
dockerbuild-trepo[:tag]同上,可以指定repo和可选的tag
dockerbuild-<<dockerfile>使用指定的dockerfile配置文件,docker以stdin方式获取内容,使用此配置生成新的image
dockerport<container><containerport>查看本地哪个端口映射到container的指定端口,其实用dockerps也可以看到


一些使用技巧

docker文件存放目录

Docker实际上把所有东西都放到/var/lib/docker路径下了。

[root@localhostdocker]#ls-F

containers/devicemapper/execdriver/graph/init/linkgraph.dbrepositories-devicemappervolumes/

containers目录当然就是存放容器(container)了,graph目录存放镜像,文件层(filesystemlayer)存放在graph/imageid/layer路径下,这样我们就可以看看文件层里到底有哪些东西,利用这种层级结构可以清楚的看到文件层是如何一层一层叠加起来的。

一张图总结Docker的命令



转载请务必保留此出处:http://blog.csdn.net/fgf00/article/details/51893771






                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: