使用
搜索可用docker镜像
使用docker最简单的方式莫过于从现有的容器镜像开始。Docker官方网站专门有一个页面来存储所有可用的镜像,网址是:index.docker.io。你可以通过浏览这个网页来查找你想要使用的镜像,或者使用命令行的工具来检索。
命令行的格式为:docker search 镜像名字
$ docker search tutorial
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
georgeyord/reactjs-tutorial This is the backend of the React comment b... 3 [OK]
odk211/spree-tutorial 1 [OK]
mhausenblas/kairosdb-tutorial GitHub fetcher for KairosDB tutorial 1 [OK]
mjansche/tts-tutorial Software for a Text-to-Speech tutorial 1 [OK]
delta2323/jnns2015-tutorial 0 [OK]
cazcade/weave-multicast-tutorial 0 [OK]
yellottyellott/docker-tutorial Doing the silly docker tutorial. 0 [OK]
sfilipov/rails-tutorial 0 [OK]
davty/pluralsight-docker-tutorial tutorial 0 [OK]
jasminenoack/docker-tutorial website 0 [OK]
sonatar/rails-tutorial Ruby On Rails Tutorial On Docker 0 [OK]
fabioberger/dockerize-tutorial 0 [OK]
factoryteam/docker-nodejs-tutorial Node.js Hello World 0 [OK]
tobegit3hub/tutorial-beego 0 [OK]
ohadgk/atwoz-tutorial Autobuild 0 [OK]
fabiosforza/docker-tutorial First Docker uses 0 [OK]
msfuko/nodejs-tutorial 0 [OK]
fiware/tutorials.tourguide-app FIWARE Tour Guide App sample application 0 [OK]
delta2323/jnns2015-tutorial-gpu 0 [OK]
ianneub/rails-tutorial 0 [OK]
ebutech/jupyter-cpa-tutorial Jupyter with Node.js kernel + docker-compo... 0 [OK]
neilellis/weave-multicast-tutorial 0 [OK]
camphor/python-tutorial camphor-/python-tutorial 0 [OK]
biopython/biopython-tutorial Biopython with Tutorial running on top of ... 0 [OK]
paulcos11/docker-tutorial docker tutorial 0 [OK]
下载容器镜像
下载镜像的命令非常简单,使用docker pull命令即可。在docker的镜像索引网站上面,镜像都是按照用户名/镜像名的方式来存储的。有一组比较特殊的镜像,比如ubuntu这类基础镜像,经过官方的验证,值得信任,可以直接用镜像名来检索到。
执行pull命令的时候要写完整的名字,比如"learn/tutorial":
$ docker pull learn/tutorial
Using default tag: latest
latest: Pulling from learn/tutorial
271134aeb542: Pull complete
Digest: sha256:2933b82e7c2a72ad8ea89d58af5d1472e35dacd5b7233577483f58ff8f9338bd
Status: Downloaded newer image for learn/tutorial:latest
在docker容器中运行hello world!
docker容器可以理解为在沙盒中运行的进程。这个沙盒包含了该进程运行所必须的资源,包括文件系统、系统类库、shell 环境等等。但这个沙盒默认是不会运行任何程序的。你需要在沙盒中运行一个进程来启动某一个容器。这个进程是该容器的唯一进程,所以当该进程结束的时候,容器也会完全的停止。
docker run命令有两个参数,一个是镜像名,一个是要在镜像中运行的命令。
$ docker run learn/tutorial echo "hello word"
hello word
在容器中安装新的程序
下一步我们要做的事情是在容器里面安装一个简单的程序(ping)。我们之前下载的tutorial镜像是基于ubuntu的,所以你可以使用ubuntu的apt-get命令来安装ping程序:apt-get install -y ping
。
备注:
apt-get
命令执行完毕之后,容器就会停止,但对容器的改动不会丢失。
在执行apt-get 命令的时候,要带上-y参数。如果不指定-y参数的话,apt-get命令会进入交互模式,需要用户输入命令来进行确认,但在docker环境中是无法响应这种交互的。
$ docker run learn/tutorial apt-get install -y ping
Reading package lists...
Building dependency tree...
The following NEW packages will be installed:
iputils-ping
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 56.1 kB of archives.
After this operation, 143 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu/ precise/main iputils-ping amd64 3:20101006-1ubuntu1 [56.1 kB]
debconf: delaying package configuration, since apt-utils is not installed
Fetched 56.1 kB in 1s (45.9 kB/s)
Selecting previously unselected package iputils-ping.
(Reading database ... 7545 files and directories currently installed.)
Unpacking iputils-ping (from .../iputils-ping_3%3a20101006-1ubuntu1_amd64.deb) ...
Setting up iputils-ping (3:20101006-1ubuntu1) ...
保存对容器的修改
当你对某一个容器做了修改之后(通过在容器中运行某一个命令),可以把对容器的修改保存下来,这样下次可以从保存后的最新状态运行该容器。docker中保存状态的过程称之为committing,它保存的新旧状态之间的区别,从而产生一个新的版本。
首先获取容器的ID,可通过命令docker ps -l
(列出最近创建的容器):
$ docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3fd4b9767461 learn/tutorial "apt-get install -y p" 3 minutes ago Exited (0) 3 minutes ago adoring_turing
通过docker commit
命令,生成新的镜像:
docker commit 3fd4b9767461 learn/ping
sha256:c40a264eabf6c1aefabdbae13f9507877b71e34386e0f27b55e08d1ce790d447
运行新的镜像
ok,到现在为止,你已经建立了一个完整的、自成体系的docker环境,并且安装了ping命令在里面。它可以在任何支持docker环境的系统中运行啦!让我们来体验一下吧!
$ docker run learn/ping ping www.baidu.com
PING www.a.shifen.com (115.239.210.27) 56(84) bytes of data.
64 bytes from 115.239.210.27: icmp_req=1 ttl=55 time=2.73 ms
64 bytes from 115.239.210.27: icmp_req=2 ttl=55 time=4.88 ms
64 bytes from 115.239.210.27: icmp_req=3 ttl=55 time=5.24 ms
64 bytes from 115.239.210.27: icmp_req=4 ttl=55 time=4.43 ms
检查运行中的镜像
现在你已经运行了一个docker容器,让我们来看下正在运行的容器。
使用docker ps命令可以查看所有正在运行中的容器列表,使用docker inspect命令我们可以查看更详细的关于某一个容器的信息。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2826c7eea135 learn/ping "ping www.baidu.com" 2 minutes ago Up 2 minutes pensive_jepsen
$ docker inspect 2826c7eea135
[
{
"Id": "2826c7eea1356547e95052346df1f31217c06e0ea9a5e72fdc5935650f2d744f",
"Created": "2016-05-06T01:35:25.744063944Z",
"Path": "ping",
"Args": [
"www.baidu.com"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,