鍍金池/ 教程/ Linux/ 在Docker中運(yùn)行"hello Word"應(yīng)用
docker用戶指南
鏡像
在Docker中運(yùn)行SSH進(jìn)程服務(wù)
Docker Hub
CentOS
Rackspace Cloud
Red Hat Enterprise Linux
在Docker中運(yùn)行Reids服務(wù)
FrugalWare
管理容器數(shù)據(jù)
Debian
Docker中運(yùn)行MongoDB
Gentoo
在Docker中使用Riak服務(wù)
IBM SoftLayer
在Docker中運(yùn)行Apt-Cacher-ng服務(wù)
開始使用Docker Hub
Amazon EC2
在Docker中運(yùn)行"hello Word"應(yīng)用
Docker Hub上的倉(cāng)庫(kù)和鏡像
Ubuntu
Docker Hub賬戶
Docker中運(yùn)行Node.js web應(yīng)用
Docker中運(yùn)行CouchDB服務(wù)
Fedora
Binaries
CRUX Linux
使用Docker Hub
Mac OS X 安裝 Docker
在Docker中運(yùn)行PostgreSQL
創(chuàng)建一個(gè)基本鏡像
Docker Hub上的自動(dòng)化構(gòu)建
連接容器
Google Cloud Platform
使用docker第一步
使用docker鏡像
Arch Linux
openSUSE
使用容器
Microsoft Windows 安裝docker

在Docker中運(yùn)行"hello Word"應(yīng)用

Docker在容器內(nèi)運(yùn)行應(yīng)用程序。在一個(gè)容器內(nèi)運(yùn)行一個(gè)應(yīng)用程序需要一個(gè)命令:docker run。

Hello word

讓我們現(xiàn)在來試試

    $ sudo docker run ubuntu:14.04 /bin/echo 'Hello world'
    Hello world

剛剛你運(yùn)行了你的第一個(gè)容器!

所以剛才發(fā)生了什么?讓我們來看看docker run運(yùn)行了哪些步驟。 首先,我們指定了docker二進(jìn)制中我們想要執(zhí)行的命令,run。docker run組合運(yùn)行容器。

接下來,我們指定一個(gè)鏡像:ubuntu 14.04。這是我們?nèi)萜髦羞\(yùn)行的來源。docker稱這個(gè)為鏡像。在本例中,我們使用一個(gè)Ubuntu 14.04操作系統(tǒng)鏡像。

當(dāng)你指定一個(gè)鏡像,docker會(huì)查看這個(gè)鏡像是否有一次加載到你的docker主機(jī)上,如果沒有發(fā)現(xiàn),docker就會(huì)在鏡像倉(cāng)庫(kù)Docker Hub下載公共鏡像。

接下來,我們告訴docker在我們的新容器內(nèi)運(yùn)行什么命令:

    /bin/echo 'Hello world'

當(dāng)我們的docker創(chuàng)建一個(gè)新的Ubuntu 14.04環(huán)境,然后執(zhí)行/bin/echo命令。我們會(huì)在命令行看到結(jié)果:

    hello world

那么,我們創(chuàng)建容器之后會(huì)發(fā)生什么呢?這里Docker容器當(dāng)你輸入指令時(shí)被激活運(yùn)行。這里只要"hello word"被輸出,容器就會(huì)停止。

一個(gè)交互式的容器

讓我們嘗試再次運(yùn)行docker run,這次我們指定一個(gè)新的命令來運(yùn)行我們的容器。

    $ sudo docker run -t -i ubuntu:14.04 /bin/bash
    root@af8bae53bdd3:/#

在這里我們繼續(xù)指定docker run命令,并運(yùn)行一個(gè)新的ubuntu:14.04的鏡像。但是我們也加了兩個(gè)新的標(biāo)示:-t-i。-t表示在新容器內(nèi)指定一個(gè)偽終端或終端,-i表示允許我們對(duì)容器內(nèi)的STDIN進(jìn)行交互。

在我們的容器內(nèi)還指定了一個(gè)新的命令:/bin/bash。這將在容器內(nèi)啟動(dòng)bash shell

所以現(xiàn)在當(dāng)我們的容器啟動(dòng)時(shí)我們會(huì)看到,我們有一個(gè)命令提示符:

    root@af8bae53bdd3:/#

讓我們嘗試在容器內(nèi)運(yùn)行一些命令:

    root@af8bae53bdd3:/# pwd
    /
    root@af8bae53bdd3:/# ls
    bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var

你可以看到我們運(yùn)行pwd來顯示當(dāng)前目錄,這時(shí)候顯示的是我們的根目錄。我們還列出了跟目錄的列表顯示了目錄列表,通過目錄列表我們看出來想一個(gè)典型的Linux文件系統(tǒng)。

當(dāng)你完成你的命令的時(shí)候,你退出這個(gè)容器,你可以輸入exit。

    root@af8bae53bdd3:/# exit

與我們之前的容器一樣,一旦你的Bash shell退出之后,你的容器就停止了。

守護(hù)進(jìn)程Hello world

現(xiàn)在一個(gè)容器運(yùn)行一個(gè)命令當(dāng)使用完退出,但是這并不是有幫助的。讓我們創(chuàng)建一個(gè)容器,讓它以守護(hù)進(jìn)程的模式運(yùn)行,就像docker運(yùn)行應(yīng)用程序那樣。

我們可以這樣運(yùn)行docker run命令:

    $ sudo docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
    1e5535038e285177d5214659a068137486f96ee5c2e85a4ac52dc83f2ebe4147

等待的結(jié)果是什么?我們的hello word去哪了。讓我們看看它是怎么運(yùn)行的。它看起來應(yīng)該很熟悉,我們運(yùn)行docker但是我們指定了一個(gè)-d標(biāo)識(shí)。-d標(biāo)識(shí)告訴docker運(yùn)行容器在后臺(tái)模式運(yùn)行。

我們也指定了一個(gè)相同的鏡像:ubuntu:14.04

最終,我們指定命令行運(yùn)行:

    /bin/sh -c "while true; do echo hello world; sleep 1; done"

這是一個(gè)荒謬的hello word進(jìn)程:一個(gè)腳本會(huì)一直輸出"hello word"

為什么不是我們看到的一大堆的"hello word"?而是docker返回的一個(gè)很長(zhǎng)的字符串:

    1e5535038e285177d5214659a068137486f96ee5c2e85a4ac52dc83f2ebe4147

這個(gè)長(zhǎng)的字符串叫做容器ID。它是容器的唯一標(biāo)識(shí),所以我們可以使用它。

注意:容器ID是有點(diǎn)長(zhǎng)并且非常的笨拙,稍后我們會(huì)看到一個(gè)斷點(diǎn)的ID,某些方面來說它是容器ID的簡(jiǎn)化版。

我們可以根據(jù)容器ID查看"hello word"進(jìn)程發(fā)生了什么、

首先,我們要確保容器正在運(yùn)行。我們可以使用docker ps命令來查看。docker ps命令可以查詢docker進(jìn)程的所有容器。

    $ sudo docker ps
    CONTAINER ID  IMAGE         COMMAND               CREATED        STATUS       PORTS NAMES
    1e5535038e28  ubuntu:14.04  /bin/sh -c 'while tr  2 minutes ago  Up 1 minute        insane_babbage

這里我們看到了后臺(tái)進(jìn)程容器。docker ps命令會(huì)返回一些有用的信息,這里包括一個(gè)短的容器ID:1e5535038e28。

我們還可以看到我們使用的ubuntu:14.04來構(gòu)建它,這個(gè)命令已經(jīng)運(yùn)行,它被系統(tǒng)自動(dòng)分配了名稱insane_babbage。

注意:docker會(huì)在容器啟動(dòng)的時(shí)候自動(dòng)給容器命名,稍后我們可以看到我們?nèi)绾谓o容器指定名稱。

好了,現(xiàn)在我們知道它運(yùn)行。但是我們能要求它做什么呢?做到這,我們需要在我們?nèi)萜鲀?nèi)使用docker logs命令。讓我們給系統(tǒng)自動(dòng)分配名稱的容器使用這個(gè)命令。

    $ sudo docker logs insane_babbage
    hello world
    hello world
    hello world
    . . .

docker logs命令看起來想運(yùn)行在容器內(nèi)并且返回標(biāo)準(zhǔn)輸出:這種情況下我們的命令輸出hello word

太棒了!我們創(chuàng)建的第一個(gè)后臺(tái)應(yīng)用進(jìn)程運(yùn)行了!

現(xiàn)在我們可以創(chuàng)建我們自己的容器了,我們使用后,讓我們停止這個(gè)后臺(tái)進(jìn)程容器。為此讓我們使用docker stop命令停止。

    $ sudo docker stop insane_babbage
    insane_babbage

docker stop命令會(huì)通知docker停止正在運(yùn)行的容器。如果它成功了,它將返回剛剛停止的容器名稱。

讓我們通過docker ps命令來檢查它是否還工作。

    $ sudo docker ps
    CONTAINER ID  IMAGE         COMMAND               CREATED        STATUS       PORTS NAMES

太好了,我們的容器停止了。

上一篇:IBM SoftLayer下一篇:Fedora