docker学习笔记2---Dockerfile构建镜像并测试运行

Dockerfile构建镜像并测试运行

参考官方文档: docker官方文档

1创建Dockerfile

创建一个空目录,创建一个名为的文件Dockerfile,将以下内容复制并粘贴到该文件中,然后保存。记下解释新Dockerfile中每个语句的注释。

# 使用官方Python作为运行时父镜像

FROM python:2.7-slim

# 设置工作目录 /app

WORKDIR /app

#将当前目录内容复制到应用程序容器中

ADD . /app

#安装所有requirements.txt规定的的包

RUN pip install --trusted-host pypi.python.org -r requirements.txt

#将80的端口号暴露在容器外

EXPOSE 80

#定义环境变量

ENV NAME World

# 当容器启动时运行app.py

CMD ["python", "app.py"]

Dockerfile是指我们尚未创建的几个文件,即 app.pyrequirements.txt。让我们创建下一个。

再创建两个文件,requirements.txtapp.py,然后将它们放在Dockerfile同一个文件夹中。这完成了我们的应用程序,您可以看到它非常简单。当上述Dockerfile被内置到的图像,app.py并且requirements.txt是因为存在DockerfileADD命令,并从输出app.py是通过HTTP得益于访问EXPOSE 命令。

requirements.txt

Flask

Redis

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)

现在我们看到pip install -r requirements.txt为Python安装Flask和Redis库,应用程序打印环境变量NAME,以及调用的输出socket.gethostname()。最后,因为Redis没有运行(因为我们只安装了Python库,而不是Redis本身),我们应该期望在这里使用它的尝试失败并产生错误消息。

注意:在容器内部访问容器ID时,访问主机名称,这类似于正在运行的可执行文件的进程ID。

您不需要Python或requirements.txt系统中的任何内容,也不需要构建或运行此映像将它们安装在您的系统上。看起来你并没有真正建立一个Python和Flask的环境,但你已经在使用了

我们准备构建应用程序。确保您仍处于新目录的顶层。这是ls应该显示的内容:

$ ls 

Dockerfile   app.py   requirements.txt

现在运行build命令。这会创建一个Docker镜像,我们将使用-t它来标记。

docker build -t friendlyhello .                                        #创建镜像

你的建筑形象在哪里?它位于您机器的本地Docker镜像注册表中:

$ docker image ls

REPOSITORY            TAG                 IMAGE ID

friendlyhello         latest              326387cea398

运行该应用程序

运行应用程序,使用以下方法将计算机的端口4000映射到容器的已发布端口80 -p

docker run -p 4000:80 friendlyhello

您应该看到Python正在为您的应用程序提供服务的消息http://0.0.0.0:80。但是该消息来自容器内部,它不知道您将该容器的端口80映射到4000,从而生成正确的URL http://localhost:4000

在Web浏览器中转到该URL,以查看在网页上提供的显示内容。

您还可以curl在shell中使用该命令来查看相同的内容。

$ curl http://localhost:4000

<h3>Hello World!</h3><b>Hostname:</b> 8fc990912a14<br/><b>Visits:</b> <i>cannot connect to Redis, counter disabled</i>

这个端口重新映射的4000:80演示之间的差异EXPOSE中的Dockerfile哪些的publish运行时值设置docker run -p。在后面的步骤中,将主机上的端口4000映射到容器中的端口80并使用http://localhost

点击CTRL+C你的终端退出。

现在让我们以分离模式在后台运行应用程序:

docker run -d -p 4000:80 friendlyhello

您获得应用程序的长容器ID,然后被踢回终端。您的容器正在后台运行。您还可以看到缩写的容器ID docker container ls(并且在运行命令时都可以互换):(COMMAND代表运行时启动命令)

$ docker container ls

CONTAINER ID        IMAGE               COMMAND             CREATED

1fa4ab2cf395        friendlyhello       "python app.py"     28 seconds ago

请注意,CONTAINER ID匹配的是什么http://localhost:4000

现在docker container stop用来结束这个过程,使用CONTAINER ID如下:

docker container stop 1fa4ab2cf395

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习 Docker 的过程中,需要注意以下几点: 1. 熟悉 Docker 的基本概念和术语,如镜像、容器、仓库等,这是进一步学习和使用 Docker 的基础。 2. 安装和配置 Docker,根据操作系统的不同,安装方法也有所不同,需要参考官方文档进行安装和配置。 3. 学习 Dockerfile 的使用,Dockerfile 是用于构建 Docker 镜像的脚本文件,通过 Dockerfile 可以定义应用程序的运行环境、依赖关系、启动命令等信息。 4. 理解 Docker 镜像的概念和使用方法,Docker 镜像是用于创建 Docker 容器的基础,可以通过 Dockerfile 构建自定义的 Docker 镜像,也可以从仓库中获取已有Docker 镜像。 5. 熟悉 Docker 容器的使用方法,Docker 容器是运行 Docker 镜像的实例,可以通过 Docker 容器启动、停止、删除、查看日志等操作来管理应用程序的运行状态。 6. 掌握 Docker Compose 的使用方法,Docker Compose 是用于定义和运行多个 Docker 容器的工具,可以通过 Docker Compose 统一管理多个容器,方便应用程序的部署和管理。 在使用 Dockerfile 的过程中,需要注意以下几点: 1. Dockerfile 中的每一条指令都会生成一个新的镜像层,因此需要尽量减少指令的数量和长度,以减小镜像的体积和构建时间。 2. 在编写 Dockerfile 时,可以使用 ARG 和 ENV 指令来定义环境变量,以方便后续的管理和配置。 3. 在构建 Docker 镜像时,可以使用 --no-cache 选项来避免使用缓存,以确保每次构建都是从头开始的。 4. 在编写 Dockerfile 时,需要考虑应用程序的安全性,例如禁止使用 root 用户、限制容器的资源使用等。 5. 在构建 Docker 镜像时,可以使用多阶段构建来减小镜像的体积,例如先构建一个包含构建工具和依赖项的镜像,再从中复制出应用程序的可执行文件来构建最终的镜像。 希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值