- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章使用IPython来操作Docker容器的入门指引由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
现在Docker是地球上最炙手可热的项目之一,就意味着人民实际上不仅仅是因为这个才喜欢它。 话虽如此,我非常喜欢使用容器,服务发现以及所有被创造出的新趣的点子和领域来切换工作作为范例。 这个文章中我会简要介绍使用python中的docker-py模块来操作Docker 容器,这里会使用我喜爱的编程工具IPython。 安装docker-py 。
首先需要docker-py。注意这里的案例中我将会使用Ubuntu Trusty 14.04版本.
1
|
$ pip
install
docker-py
|
IPyhton 。
我真的很喜欢用IPython来探索Python。 它像是一共高级的python Shell,但是可以做的更多.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
$ sudo apt
-
get install ipython
SNIP!
$ ipython
Python
2.7
.
6
(default, Mar
22
2014
,
22
:
59
:
56
)
Type
"copyright"
,
"credits"
or
"license"
for
more information.
IPython
1.2
.
1
-
-
An enhanced Interactive Python.
?
-
> Introduction
and
overview of IPython's features.
%
quickref
-
> Quick reference.
help
-
> Python's own
help
system.
object
?
-
> Details about
'object'
, use
'object??'
for
extra details.
In [
1
]:
|
安装 docker 。
如果没有安装Docker,那首先安装docker 。
1
|
$
sudo
apt-get
install
docker.io
|
然后把 docker.io 起个别名 docker 。
1
2
3
4
5
6
7
8
9
|
$
alias
docker=
'docker.io'
$ docker version
Client version: 0.9.1
Go version (client): go1.2.1
Git commit (client): 3600720
Server version: 0.9.1
Git commit (server): 3600720
Go version (server): go1.2.1
Last stable version: 0.11.1, please update docker
|
Docker现在应该有个socket开启,我们可以用来连接.
1
2
|
$
ls
/var/run/docker
.sock
/var/run/docker
.sock
|
Pull 镜像 。
让我们下载 busybox镜像 。
1
2
3
4
5
6
7
8
9
10
11
12
|
$ docker pull busybox
Pulling repository busybox
71e18d715071: Download complete
98b9fdab1cb6: Download complete
1277aa3f93b3: Download complete
6e0a2595b580: Download complete
511136ea3c5a: Download complete
b6c0d171b362: Download complete
8464f9ac64e8: Download complete
9798716626f6: Download complete
fc1343e2fca0: Download complete
f3c823ac7aa6: Download complete
|
现在我们准备使用 docker-py 了.
使用 docker-py 。
现在我们有了docker-py , IPython, Docker 和 busybox 镜像,我们就能建立一些容器。 如果你不是很熟悉IPython,可以参照这个教程学习(http://ipython.org/ipython-doc/stable/interactive/tutorial.html), IPython是十分强大的.
首先启动一个IPython ,导入docker模块.
1
2
3
4
5
6
7
8
9
10
11
|
$ ipython
Python
2.7
.
6
(default, Mar
22
2014
,
22
:
59
:
56
)
Type
"copyright"
,
"credits"
or
"license"
for
more information.
IPython
1.2
.
1
-
-
An enhanced Interactive Python.
?
-
> Introduction
and
overview of IPython's features.
%
quickref
-
> Quick reference.
help
-
> Python's own
help
system.
object
?
-
> Details about
'object'
, use
'object??'
for
extra details.
In [
1
]:
import
docker
|
然后我们建立一个连接到Docker 。
1
2
3
|
In [
2
]: c
=
docker.Client(base_url
=
'unix://var/run/docker.sock'
,
...: version
=
'1.9'
,
...: timeout
=
10
)
|
现在我们已经连接到Docker.
IPython使用tab键来补全的。 如果 输入 “c.” 然后按下tab键,IPython会显示Docker连接对象所有的方法和属性.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
In [
3
]: c.
c.adapters c.headers c.pull
c.attach c.history c.push
c.attach_socket c.hooks c.put
c.auth c.images c.remove_container
c.base_url c.import_image c.remove_image
c.build c.info c.request
c.cert c.insert c.resolve_redirects
c.close c.inspect_container c.restart
c.commit c.inspect_image c.search
c.containers c.kill c.send
c.cookies c.login c.start
c.copy c.logs c.stop
c.create_container c.max_redirects c.stream
c.create_container_from_config c.mount c.tag
c.delete c.options c.top
c.diff c.params c.trust_env
c.events c.patch c.verify
c.export c.port c.version
c.get c.post c.wait
c.get_adapter c.prepare_request
c.head c.proxies
|
让我们来看下c.images 我输入一个 “?”在c.之后,ipython 会提供这个对象的详细信息.
1
2
3
4
5
6
|
In [
5
]: c.images?
Type
: instancemethod
String Form:<bound method Client.images of <docker.client.Client
object
at
0x7f3acc731790
>>
File
:
/
usr
/
local
/
lib
/
python2.
7
/
dist
-
packages
/
docker
/
client.py
Definition: c.images(
self
, name
=
None
, quiet
=
False
,
all
=
False
, viz
=
False
)
Docstring: <no docstring>
|
获取busybox 镜像.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
In [
6
]: c.images(name
=
"busybox"
)
Out[
6
]:
[{u
'Created'
:
1401402591
,
u
'Id'
: u
'71e18d715071d6ba89a041d1e696b3d201e82a7525fbd35e2763b8e066a3e4de'
,
u
'ParentId'
: u
'8464f9ac64e87252a91be3fbb99cee20cda3188de5365bec7975881f389be343'
,
u
'RepoTags'
: [u
'busybox:buildroot-2013.08.1'
],
u
'Size'
:
0
,
u
'VirtualSize'
:
2489301
},
{u
'Created'
:
1401402590
,
u
'Id'
: u
'1277aa3f93b3da774690bc4f0d8bf257ff372e23310b4a5d3803c180c0d64cd5'
,
u
'ParentId'
: u
'f3c823ac7aa6ef78d83f19167d5e2592d2c7f208058bc70bf5629d4bb4ab996c'
,
u
'RepoTags'
: [u
'busybox:ubuntu-14.04'
],
u
'Size'
:
0
,
u
'VirtualSize'
:
5609404
},
{u
'Created'
:
1401402589
,
u
'Id'
: u
'6e0a2595b5807b4f8c109f3c6c5c3d59c9873a5650b51a4480b61428427ab5d8'
,
u
'ParentId'
: u
'fc1343e2fca04a455f803ba66d1865739e0243aca6c9d5fd55f4f73f1e28456e'
,
u
'RepoTags'
: [u
'busybox:ubuntu-12.04'
],
u
'Size'
:
0
,
u
'VirtualSize'
:
5454693
},
{u
'Created'
:
1401402587
,
u
'Id'
: u
'98b9fdab1cb6e25411eea5c44241561326c336d3e0efae86e0239a1fe56fbfd4'
,
u
'ParentId'
: u
'9798716626f6ae4e6b7f28451c0a1a603dc534fe5d9dd3900150114f89386216'
,
u
'RepoTags'
: [u
'busybox:buildroot-2014.02'
, u
'busybox:latest'
],
u
'Size'
:
0
,
u
'VirtualSize'
:
2433303
}]
|
建立一个容器。 注意我添加一个可以将要运行的命令,这里用的是”env”命令.
1
2
3
4
|
In [
8
]: c.create_container(image
=
"busybox"
, command
=
"env"
)
Out[
8
]:
{u
'Id'
: u
'584459a09e6d4180757cb5c10ac354ca46a32bf8e122fa3fb71566108f330c87'
,
u
'Warnings'
:
None
}
|
使用ID来启动这个容器 。
1
|
In [
9
]: c.start(container
=
"584459a09e6d4180757cb5c10ac354ca46a32bf8e122fa3fb71566108f330c87"
)
|
我们可以检查日志,应该可以看到当容器创建的时候 ,我们配置的”env”命令的输出.
1
2
|
In [
11
]: c.logs(container
=
"584459a09e6d4180757cb5c10ac354ca46a32bf8e122fa3fb71566108f330c87"
)
Out[
11
]:
'HOME=/\nPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\nHOSTNAME=584459a09e6d\n'
|
如果使用docker命令行,使用同样的命令行选项运行一个容器,应该可以看到类似的信息.
1
2
3
4
|
$ docker run busybox env
HOME
=
/
PATH
=
/
usr
/
local
/
sbin:
/
usr
/
local
/
bin
:
/
usr
/
sbin:
/
usr
/
bin
:
/
sbin:
/
bin
HOSTNAME
=
ce3ad38a52bf
|
据我所知,docker-py没有运行选项,我们只能创建一个容器然后启动它.
以下是一个案例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
In [
17
]: busybox
=
c.create_container(image
=
"busybox"
, command
=
"echo hi"
)
In [
18
]: busybox?
Type
:
dict
String Form:{u
'Id'
: u
'34ede853ee0e95887ea333523d559efae7dcbe6ae7147aa971c544133a72e254'
, u
'Warnings'
:
None
}
Length:
2
Docstring:
dict
()
-
> new empty dictionary
dict
(mapping)
-
> new dictionary initialized
from
a mapping
object
's
(key, value) pairs
dict
(iterable)
-
> new dictionary initialized as
if
via:
d
=
{}
for
k, v
in
iterable:
d[k]
=
v
dict
(
*
*
kwargs)
-
> new dictionary initialized with the name
=
value pairs
in
the keyword argument
list
. For example:
dict
(one
=
1
, two
=
2
)
In [
19
]: c.start(busybox.get(
"Id"
))
In [
20
]: c.logs(busybox.get(
"Id"
))
Out[
20
]:
'hi\n'
|
如果你还没有使用过busybox镜像,我建议你使用下。我也建议debain下的jessie镜像,它只有120MB,比Ubuntu镜像要小.
总结 。
Docker是一个吸引人的新系统,可以用来建立有趣的新技术应用,特别是云服务相关的。使用IPython我们探索了怎么使用 docker-py模块来创建docker 容器。 现在使用python,我们可以结合docker和容易 创造出很多新的点子.
最后此篇关于使用IPython来操作Docker容器的入门指引的文章就讲到这里了,如果你想了解更多关于使用IPython来操作Docker容器的入门指引的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
Hive —— 入门 Hive介绍 Apache Hive是一款建立在Hadoop之上的开源数据仓库系统,可以将存储在Hadoop文件中的结构化、半结构化数据文件映射为一张数据库表,基于表提供了一
HBase —— 入门 HBase介绍 HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”
零:前端目前形势 前端的发展史 HTML(5)、CSS(3)、JavaScript(ES5、ES6):编写一个个的页面 -> 给后端(PHP、Python、Go、Java) ->
在本教程中,您将了解在计算机上运行 JavaScript 的不同方法。 JavaScript 是一种流行的编程语言,具有广泛的应用程序。 JavaScript 以前主要用于使网页具有交
我曾经是一个对编程一窍不通的小白,但因为对互联网世界的好奇心和求知欲的驱使,我踏入了编程的殿堂。在学习的过程中,我发现了一门神奇的编程语言——Python。Python有着简洁、易读的语法,让初学者能
嗨,亲爱的读者们! 今天我要给大家分享一些关于Python爬虫的小案例。你是否曾为了获取特定网页上的数据而烦恼过?或者是否好奇如何从网页中提取信息以供自己使用?那么,这篇文章将会给你一些启示和灵感。
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 8 年前。 Improv
我想创建一个像https://apprtc.appspot.com/?r=04188292这样的应用程序。我对 webrtc 了解一点,但无法掌握 google app-engine。如何为 java
我刚刚开始使用 Python 并编写了一个简单的周边程序。但是,每当我在终端中键入 python perimeter.py 时,都会收到以下错误,我不知道如何解决。 >>> python perime
Redis有5个基本数据结构,string、list、hash、set和zset。它们是日常开发中使用频率非常高应用最为广泛的数据结构,把这5个数据结构都吃透了,你就掌握了Redis应用知识的一半了
创建发布web项目 具体步骤: 1.在开发工具中创建一个dynamic web project helloword 2.在webContent中创建index.html文件 3.发布web应用到
如果你在 Ubuntu 上使用终端的时间很长,你可能会希望调整终端的字体和大小以获取一种良好的体验。 更改字体是一种最简单但最直观的 Linux 的终端自定义 的方法。让我
1. 前言 ADODB 是 Active Data Objects Data Base 的简称,它是一种 PHP 存取数据库的函式组件。现在 SFS3 系统 (校园自由软件交流网学务系统) 计划的
我对 neo4j 完全陌生,我很抱歉提出这样一个基本问题。我已经安装了neo4j,我正在使用shell“localhost:7474/webadmin/#/console/” 我正在寻找一个很好的例子
我正在阅读 ios 4 的核心音频,目的是构建一个小测试应用程序。 在这一点上,我对所有 api 的研究感到非常困惑。理想情况下,我想知道如何从两个 mp3 中提取一些样本到数组中。 然后在回调循环中
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是无关紧要的,因
我下载了 GNUStep并安装了它,但是我不确定在哪里可以找到 IDE。有谁知道什么程序可以用作 GNUStep IDE/从哪里获取它们?否则,有没有人知道有关如何创建和编译基本 GNUStep 程序
我正在尝试开始使用 Apache Solr,但有些事情我不清楚。通读tutorial ,我已经设置了一个正在运行的 Solr 实例。我感到困惑的是 Solr 的所有配置(架构等)都是 XML 格式的。
请问有没有关于如何开始使用 BruTile 的文档? 我目前正在使用 SharpMap,我需要预缓存切片以加快进程 最佳答案 我今天正在研究这个:)Mapsui项目site严重依赖 SharpMap
尽我所能,我无法让 CEDET 做任何事情。 Emacs 24.3。我下载了最新的 CEDET 快照。我从他的底部(不是这样)Gentle Introduction 中获取了 Alex Ott 的设置
我是一名优秀的程序员,十分优秀!