尝试docker (二)

开源书籍:Docker从入门到实践

操作容器

启动

  • 新建并启动
docker run name 
sudo docker run -t -i ubuntu:14.04 /bin/bash # 启动一个 bash 终端,允许用户进行交互

-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i 则让容器的标准输入保持打开

启动已终止容器

docker start 命令,直接将一个已经终止的容器启动运行

容器的核心为所执行的应用程序,所需要的资源都是应用程序运行所必需的。除此之外,并没有其它的资源。可以在伪终端中利用 ps 或 top 来查看进程信息。

守护态运行

更多的时候,需要让 Docker在后台运行而不是直接把执行命令的结果输出在当前宿主机下。此时,可以通过添加 -d 参数来实现。

docker run -d ubuntu:14.04

此时容器会在后台运行并不会把输出的结果(STDOUT)打印到宿主机上面(输出结果可以用docker logs 查看)

可以通过 docker ps 命令来查看容器信息

终止

可以使用 docker stop 来终止一个运行中的容器。

此外,当Docker容器中指定的应用终结时,容器也自动终止。

终止状态的容器可以用 docker ps -a 命令看到

处于终止状态的容器,可以通过 docker start 命令来重新启动。

此外,docker restart 命令会将一个运行态的容器终止,然后再重新启动它。

进入容器

在使用 -d 参数时,容器启动后会进入后台。

某些时候需要进入容器进行操作,有很多种方法,包括使用 docker attach 命令或 nsenter 工具等

  • Attach 命令
docker run -idt ubuntu

docker attach nostalgic_hypatia

但是使用 attach 命令有时候并不方便。当多个窗口同时 attach 到同一个容器的时候,所有窗口都会同步显示。当某个窗口因命令阻塞时,其他窗口也无法执行操作了

  • Nsenter 命令

nsenter 启动一个新的shell进程(默认是/bin/bash), 同时会把这个新进程切换到和目标(target)进程相同的命名空间,这样就相当于进入了容器内部
….

导出和导入

  • 导出容器
docker export 7691a814370e > ubuntu.tar #将导出容器快照到本地文件
  • 导入容器快照
cat ubuntu.tar | sudo docker import - test/ubuntu:v1.0 # 使用 docker import 从容器快照文件中再导入为镜像

此外,也可以通过指定 URL 或者某个目录来导入

docker import http://example.com/exampleimage.tgz example/imagerepo

删除

  • 可以使用 docker rm 来删除一个处于终止状态的容器。
docker rm trusting_newton

如果要删除一个运行中的容器,可以添加 -f 参数。Docker 会发送 SIGKILL 信号给容器

  • 清理所有处于终止状态的容器
docker rm $(docker ps -a -q) 

访问仓库

仓库(Repository)是集中存放镜像的地方。

目前 Docker 官方维护了一个公共仓库 Docker Hub,其中已经包括了超过 15,000 的镜像。大部分需求,都可以通过在 Docker Hub 中直接下载镜像来实现

登录

可以通过执行 docker login 命令来输入用户名、密码和邮箱来完成注册和登录。
注册成功后,本地用户目录的 .dockercfg 中将保存用户的认证信息。

基本操作

用户无需登录即可通过 docker search 命令来查找官方仓库中的镜像,并利用 docker pull 命令来将它下载到本地。

自动创建


私有仓库

有时候使用 Docker Hub 这样的公共仓库可能不方便,用户可以创建一个本地仓库供私人使用。

docker-registry 是官方提供的工具,可以用于构建私有的镜像仓库。

….


仓库配置文件

Docker 的 Registry 利用配置文件提供了一些仓库的模板(flavor),用户可以直接使用它们来进行开发或生产部署。

模板

在 config_sample.yml 文件中,可以看到一些现成的模板段:

* common:基础配置
* local:存储数据到本地文件系统
* s3:存储数据到 AWS S3 中
* dev:使用 local 模板的基本配置
* test:单元测试使用
* prod:生产环境配置(基本上跟s3配置类似)
* gcs:存储数据到 Google 的云存储
* swift:存储数据到 OpenStack Swift 服务
* glance:存储数据到 OpenStack Glance 服务,本地文件系统为后备
* glance-swift:存储数据到 OpenStack Glance 服务,Swift 为后备
* elliptics:存储数据到 Elliptics key/value 存储

用户也可以添加自定义的模版段。

默认情况下使用的模板是 dev,要使用某个模板作为默认值,可以添加 SETTINGS_FLAVOR 到环境变量中,例如

export SETTINGS_FLAVOR=dev

另外,配置文件中支持从环境变量中加载值,语法格式为 _env:VARIABLENAME[:DEFAULT]。


Docker 数据管理

这一章介绍如何在 Docker 内部以及容器之间管理数据,在容器中管理数据主要有两种方式:

  • 数据卷(Data volumes)
  • 数据卷容器(Data volume containers)

数据卷

数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:

  • 数据卷可以在容器之间共享和重用
  • 对数据卷的修改会立马生效
  • 对数据卷的更新,不会影响镜像
  • 数据卷默认会一直存在,即使容器被删除

创建一个数据卷

使用 -v 标记来创建一个数据卷并挂载到容器里

docker run -d -P --name web -v /webapp training/webapp python app.py

删除数据卷

挂载一个主机目录作为数据卷

使用 -v 标记也可以指定挂载一个本地主机的目录到容器中去。

docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py

查看数据卷的具体信息

docker inspect web

挂载一个本地主机文件作为数据卷

-v 标记也可以从主机挂载单个文件到容器中

docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash

数据卷容器

数据卷容器,其实就是一个正常的容器,专门用来提供数据卷供其它容器挂载的。

首先,创建一个名为 dbdata 的数据卷容器:

docker run -d -v /dbdata --name dbdata training/postgres echo Data-only container for postgres

然后,在其他容器中使用 –volumes-from 来挂载 dbdata 容器中的数据卷

docker run -d --volumes-from dbdata --name db1 training/postgres

docker run -d --volumes-from dbdata --name db2 training/postgres

可以使用超过一个的 –volumes-from 参数来指定从多个容器挂载不同的数据卷。
也可以从其他已经挂载了数据卷的容器来级联挂载数据卷。

备份&恢复

–volumes-from

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值