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 = "cannot connect to Redis, counter disabled"

    html = "

Hello {name}!

" \ "Hostname: {hostname}
" \ "Visits: {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 命令,结束某个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

你可能感兴趣的:(3.Docker入门(二)创建您的第一个Docker镜像)