移除本地镜像
可以用dockerrmi移除,注意dockerrm是移除容器
dockerrmidocker.io/ubuntu
dockerrmi07f8e8c5e660
Docker容器
容器是Docker又一核心概念。
简单的说,容器是独立运行的一个或一组应用,以及它们的运行态环境。
对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上面的应用。
守护态运行
dockerrun-dubuntu:
ruby/bin/sh-c"whiletrue;doechohelloworld;sleep1;done"
容器启动后会返回一个唯一的id,也可以通过dockerps命令来查看容器信息。
dockerps
要获取容器的输出信息,可以通过dockerlogs命令。
dockerlogsgoofy_cori
终止容器
可以使用dockerstop来终止一个运行中的容器。
此外,当Docker容器中指定的应用终结时,容器也自动终止。
用户通过exit命令或Ctrl+d来退出终端时,所创建的容器立刻终止。
终止状态的容器可以用dockerps-a命令看到。
例如
dockerps-a
处于终止状态的容器,可以通过dockerstart命令来重新启动。
dockerstart6fb00e62cfe9#id
此外,dockerrestart命令会将一个运行态的容器终止,然后再重新启动它.
dockerrestart6fb00e62cfe9#id
进入容器
在使用-d参数时,容器启动后会进入后台。
某些时候需要进入容器进行操作,有很多种方法,包括使用dockerattach命令或nsenter工具等。
attach命令
dockerattach是Docker自带的命令。
dockerrun-idtubuntu#后台启动容器
dockerps#查看容器进程NAMES
dockerattachstoic_newton#通过NAMES(stoic_newton)进入容器
nsenter命令
但是使用attach命令有时候并不方便。
当多个窗口同时attach到同一个容器的时候,所有窗口都会同步显示。
当某个窗口因命令阻塞时,其他窗口也无法执行操作了。
安装nsenter
nsenter工具在util-linux包2.23版本后包含,可以先使用nsenter-version进行查看。
如果系统中util-linux包没有该命令,可以按照下面的方法从源码安装。
cd/tmp
curlhttps:
//www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz
tar-zxfutil-linux-2.24.tar.gz
cdutil-linux-2.24;
./configure--without-ncurses
makensenter&&sudocpnsenter/usr/local/bin
wget-P~
echo"[-f~/.bashrc_docker]&&.~/.bashrc_docker">>~/.bashrc;source~/.bashrc
同时建议大家下载.bashrc_docker,并将内容放到.bashrc中。
这个文件中定义了很多方便使用Docker的命令,例如docker-pid可以获取某个容器的PID;
而docker-enter可以进入容器或直接在容器内执行命令。
下面给出一个完整的例子:
dockerps
echo$(docker-pid10f839063336)#通过容器ID查看,容器中的首进程ID
docker-enter10f839063336ls#可以docker-enter[容器id]直接操作容器
nsenter--target838--mount--uts--ipc--net--pid#通过首进程ID(838)进入容器
导入和导出容器
如果要导出本地某个容器,可以使用dockerexport命令,导入某个容器快照使用dockerimport命令:
dockerexport7691a814370e>ubuntu.tar#导出容器到本地
catubuntu.tar|dockerimport-test/ubuntu:
v1.0#导入容器快照到镜像
dockerimportexample/imagerepo#从URL导入容器快照
注:
用户既可以使用dockerload来导入镜像存储文件到本地镜像库,也可以使用dockerimport来导入一个容器快照到本地镜像库。
这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。
此外,从容器快照文件导入时可以重新指定标签等元数据信息。
删除容器
可以使用dockerrm来删除一个处于终止状态的容器。
例如
dockerrmtrusting_newton
如果要删除一个运行中的容器,可以添加-f参数。
Docker会发送SIGKILL信号给容器。
仓库
仓库(Repository)是集中存放镜像的地方。
一个容易混淆的概念是注册服务器(Registry)。
实际上注册服务器是管理仓库的具体服务器,每个服务器上可以有多个仓库,而每个仓库下面有多个镜像。
从这方面来说,仓库可以被认为是一个具体的项目或目录。
例如对于仓库地址来说,是注册服务器地址,ubuntu是仓库名。
大部分时候,并不需要严格区分这两者的概念。
DockerHub
基本操作
目前Docker官方维护了一个公共仓库DockerHub,其中已经包括了超过15,000的镜像。
大部分需求,都可以通过在DockerHub中直接下载镜像来实现。
用户无需登录即可通过dockersearch命令来查找官方仓库中的镜像,并利用dockerpull命令来将它下载到本地。
例如以centos为关键词进行搜索:
dockersearchcentos
可以看到返回了很多包含关键字的镜像,其中包括镜像名字、描述、星级(表示该镜像的受欢迎程度)、是否官方创建、是否自动创建。
官方的镜像说明是官方项目组创建和维护的,automated资源允许用户验证镜像的来源和内容。
根据是否是官方提供,可将镜像资源分为两类。
一种是类似centos这样的基础镜像,被称为基础或根镜像。
这些基础镜像是由Docker公司创建、验证、支持、提供。
这样的镜像往往使用单个单词作为名字。
还有一种类型,比如tianon/centos镜像,它是由Docker的用户创建并维护的,往往带有用户名称前缀。
可以通过前缀user_name/来指定使用某个用户提供的镜像,比如tianon用户。
另外,在查找的时候通过-sN参数可以指定仅显示评价为N星以上的镜像。
下载官方centos镜像到本地:
dockerpullcentos:
latest
私有仓库
本节介绍如何使用本地仓库。
docker-registry是官方提供的工具,可以用于构建私有的镜像仓库。
安装运行docker-registry
有时候使用DockerHub这样的公共仓库可能不方便,用户可以创建一个本地仓库供私人使用。
容器运行
在安装了Docker后,可以通过获取官方registry镜像来运行。
dockerrun-d-p5000:
5000registry
这将使用官方的registry镜像来启动本地的私有仓库。
用户可以通过指定参数来配置私有仓库位置,例如配置镜像存储到AmazonS3服务。
dockerrun\
-eSETTINGS_FLAVOR=s3\
-eAWS_BUCKET=acme-docker\
-eSTORAGE_PATH=/registry\
-eAWS_KEY=AKIAHSHB43HS3J92MXZ\
-eAWS_SECRET=xdDowwlK7TJajV1Y7EoOZrmuPEJlHYcNP2k4j49T\
-eSEARCH_BACKEND=sqlalchemy\
-p5000:
5000\
registry
此外,还可以指定本地路径(如/home/user/registry-conf)下的配置文件。
dockerrun-d-p5000:
5000-v/home/user/registry-conf:
/registry-conf-eDOCKER_REGISTRY_CONFIG=/registry-conf/config.ymlregistry
默认情况下,仓库会被创建在容器的/tmp/registry下。
可以通过-v参数来将镜像文件存放在本地的指定路径。
例如下面的例子将上传的镜像放到/opt/data/registry目录。
dockerrun-d-p5000:
5000-v/opt/data/registry:
/tmp/registryregistry
本地安装
对于Ubuntu或CentOS等发行版,可以直接通过源安装。
Ubuntu
sudoapt-getinstall-ybuild-essentialpython-devlibevent-devpython-pipliblzma-dev
sudopipinstalldocker-registryCentOS
yuminstall-ypython-devellibevent-develpython-pipgccxz-devel
python-pipinstalldocker-registry
也可以从docker-registry项目下载源码进行安装。
apt-getinstallbuild-essentialpython-devlibevent-devpython-piplibssl-devliblzma-devlibffi-dev
gitclone
cddocker-registry
sudopythonsetup.pyinstall
然后修改配置文件,主要修改dev模板段的storage_path到本地的存储仓库的路径。
cpconfig/config_sample.ymlconfig/config.yml
之后启动Web服务。
gunicorn-ccontrib/gunicorn.pydocker_registry.wsgi:
application
或者
gunicorn--access-logfile--error-logfile--kgevent-b0.0.0.0:
5000-w4--max-requests100docker_registry.wsgi:
application
此时使用curl访问本地的5000端口,看到输出docker-registry的版本信息说明运行成功。
注:
config/config_sample.yml文件是示例配置文件。
在私有仓库上传、下载、搜索镜像
创建好私有仓库之后,就可以使用dockertag来标记一个镜像,然后推送它到仓库,别的机器上就可以下载下来了。
例如私有仓库地址为192.168.7.26:
5000。
先在本机查看已有的镜像。
$sudodockerimages
REPOSITORYTAGIMAGEIDCREATEDVIRTUALSIZE
ubuntulatestba5877dc9bec6weeksago192.7MB
ubuntu14.04ba5877dc9bec6weeksago192.7MB
使用dockertag将ba58这个镜像标记为192.168.7.26:
5000/test(格式为dockertagIMAGE[:
TAG][REGISTRYHOST/][USERNAME/]NAME[:
TAG])。
$sudodockertagba58192.168.7.26:
5000/test
root~#dockerimages
REPOSITORYTAGIMAGEIDCREATEDVIRTUALSIZE
ubuntu14.04ba5877dc9bec6weeksago192.7MB
ubuntulatestba5877dc9bec6weeksago192.7MB
192.168.7.26:
5000/testlatestba5877dc9bec6weeksago192.7M
使用dockerpush上传标记的镜像。
dockerpush192.168.7.26:
5000/test
Thepushreferstoarepository[192.168.7.26:
5000/test](len:
1)
Sendingimagelist
Pushingrepository192.168.7.26:
5000/test(1tags)