3.Docker入门(二)创建您的第一个Docker镜像

注意

以下内容完全摘自Docker官方文档,仅为学习及技术分享所用,切勿用于商业用途,转载请注明出处。

以下为正文


Dockerfile

从现在开始,我们进入Docker实践,首先,让我们来创建第一个Docker镜像,它将启动一个容器,容器中运行一个简单的Python应用。
正如之前我们所学到的,Docker镜像文件包含了您的应用程序正常运行需要的一切,包括对资源需求、环境的要求、依赖的类库和运行的代码等等。那么如何来定义和描述一个Docker镜像呢,需要使用Dockerfile。

Dockerfile定义在您的容器中的运行环境,包括像网络接口和虚拟化的磁盘驱动等硬件资源,这些资源是与您的宿主系统隔离开的,不会对您的系统有作何影响。Dockerfile用于构建一致的Docker镜像,使用Docker镜像运行Docker容器,可以让定义在该镜像中的应用程序无论在哪里运行,都有一致的功能。

编写第一个Dockerfile

在一个空目录下创建一个名为Dockerfile的文件,在该文件中输入以下内容

Dockerfile

# 使用官方python镜像作为根镜像
FROM python:2.7-slim

# 将容器工作目录设置为 /app
WORKDIR /app

# 将当前目录(宿主机)中的内容全部复制到容器的 /app 目录下
ADD . /app

# 安装 requirements.txt 中定义好的包
RUN pip install -r requirements.txt

# 对外公开容器的80端口
EXPOSE 80

# 定义一个环境变量world
ENV NAME World

# 在容器启动时,运行 python app.py命令
CMD ["python", "app.py"]

如果您仔细阅读上面的Dockerfile,你会发现我们还需要创建requirements.txt和app.py,在Dockerfile所在目录下依次创建这两个文件。

requirements.txt

Flask
Redis

requirements.txt中定义了容器依赖的包:Flask和Redis。Dockerfile中的RUN pip install -r requirements.txt将会读取到requirements.txt中的内容,然后安装这些依赖包。

app.py

from flask import Flask
from redis import Redis, RedisError
import os
import socket

# Connect to Redis
redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)

app = Flask(__name__)

@app.route("/")
def hello():
    try:
        visits = redis.incr('counter')
    except RedisError:
        visits = "<i>cannot connect to Redis, counter disabled</i>"

    html = "<h3>Hello {name}!</h3>" \
           "<b>Hostname:</b> {hostname}<br/>" \
           "<b>Visits:</b> {visits}"
    return html.format(name=os.getenv('NAME', "world"), hostname=socket.gethostname(), visits=visits)

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=80)

构建镜像

现在使用我们编写好的Dockerfile来构建镜像,运行以下命令,生成一个tag为pythonhelloworld的docker镜像

docker build -t pythonhelloworld

这样创建好的镜像文件就存放在您本地的Docker registry(注册中心)里。
您可以运行以下命令来查看所有本地注册中心的镜像

docker images

运行镜像 启动容器

运行以下命令,将您本机的4000端口映射到docker容器的80端口

docker run -p 4000:80 pythonhelloworld

您可以通过http://localhost:4000
查看到运行的结果
也可以使用 -d 参数,将容器运行在后台

docker run -p -d 4000:80 pythonhelloworld

可以使用 docker ps 命令,查看所有运行中的docker容器进程

docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED
13f4a444f359        pythonhelloworld       "python app.py"     35 seconds ago

使用docker stop <hash> 命令,结束某个docker容器进程

docker stop 13f4a444f359

分享您的镜像

现在可以将您刚刚构建的这个镜像发布到Docker public registry上(也可以发布到其他公共registry或者私人配置的registry中),这样无论在哪里,只要在一个安装了docker的机器上拉取这个镜像,就可以在该机器上启动一样的容器。

注册您的docker账号

如果您还没有docker账号,您需要首先到这里注册一个账号:cloud.docker.com.
然后您就可以使用login命令登录了。

docker login

发布您的镜像

可以使用以下命令标记您的镜像,其中username是您自己的用户名,repository是您自定义的仓库名,tag标记是可选的,默认为latest

docker tag pythonhelloworld username/repository:tag

运行以下命令发布该镜像

docker publish username/repository:tag

发布成功后,在任何docker机器上,运行以下命令就会自动拉取和运行该镜像了

docker run -p 4000:80 username/repository:tag
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容