• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    第一次构建、运行、发布、获取docker镜像的步骤详解

    1、前言

    过去,如果您要开始编写Python应用程序,第一步就是把Python的运行环境安装到您的机器上,而且安装的环境还要和线上的一致,比较麻烦。

    使用Docker,您可以从docker的官方registry或者其他仓库,获取一个可移植的Python运行环境镜像,无需安装。然后,你可以基于这个镜像开发你的应用程序,这样可以确保您的应用程序,依赖项和运行时都一起运行。

    2、构建一个python镜像

    2.1、为了构建您自己的镜像,首先需要创建一个名称为Dockerfile的文件,用于定义创建镜像并运行container所需的步骤。 Dockerfile中的每条指令都会在镜像中创建一个层级。当您更改Dockerfile并重新build镜像时,只重建那些更改的层级。与其他虚拟化技术相比,这是使镜像轻量,小巧,快速的一个原因。

    创建一个空目录,创建一个名为Dockerfile的文件,将以下内容复制并粘贴到该文件中并保存。

    # Use an official Python runtime as a parent image
    FROM python:2.7-slim
    # Set the working directory to /app
    WORKDIR /app
    # Copy the current directory contents into the container at /app
    ADD . /app
    # Install any needed packages specified in requirements.txt
    RUN pip install --trusted-host pypi.python.org -r requirements.txt
    # Make port 80 available to the world outside this container
    EXPOSE 80
    # Define environment variable
    ENV NAME World
    # Run app.py when the container launches
    CMD ["python", "app.py"]

    2.2 在与Dockerfile文件同一个目录下,创建requirements.txt和app.py文件。因为Dockerfile文件的ADD命令,上面的两个文件会被加到最终的镜像中;因为EXPOSE命令,访问容器的80端口,才可以访问到app.py的内容,注意:这里的80端口指的是容器暴露的端口,并不是实际机器的端口。
    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)

    2.3 把我们的应用打包为镜像,要在DockerFile目录下执行。这会创建一个Docker镜像,我们将使用-t标记它,以使镜像有一个友好的名称。

    docker build -t friendlyhello

    3 、运行镜像

    运行应用程序,使用-p将机器的端口4000映射到容器暴露的端口80:

    docker run -p 4000:80 friendlyhello

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

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

    按crtl+c结束应用

    现在让我们在后台运行应用程序:

    docker run -d -p 4000:80 friendlyhello

    查看所有的container信息

    $ docker container ls
    CONTAINER ID        IMAGE               COMMAND             CREATED
    1fa4ab2cf395        friendlyhello       "python app.py"     28 seconds ago

    现在使用docker container stop来结束进程,使用CONTAINER ID,如下所示:

    docker container stop 1fa4ab2cf395

    4、发布镜像

    4.1、我使用的是阿里云的docker registry,感觉应该会比较快。首先你要有一个阿里云的账号。然后登陆进去新建一个仓库,设置命名空间等信息。

    4.2 登陆阿里云的docker registry,后续操作都需要登陆才可以执行。

    sudo docker login --username=admin registry.cn-hangzhou.aliyuncs.com

    4.3 为镜像打标,tag为可选的,如果没有,默认为latest

    格式:

    docker tag image_name registry_url/namespace/repository_name:[tag]

    例如

    docker tag friendlyhello registry.cn-hangzhou.aliyuncs.com/shuzhou/demo1:latest

    查看本地的镜像列表

    docker image ls

    4.4 发布镜像

    docker push registry.cn-hangzhou.aliyuncs.com/shuzhou/demo1:latest

    4.5 现在你可以在任何一台机器上执行下面的命令,运行镜像

    docker run -p 4000:80 registry.cn-hangzhou.aliyuncs.com/shuzhou/demo1:latest

    4.6 拉取镜像

    docker pull registry.cn-hangzhou.aliyuncs.com/shuzhou/demo1:latest

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

    上一篇:Linux获取当前脚本真实路径的方法
    下一篇:Docker搭建自己的本地镜像仓库的步骤
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    第一次构建、运行、发布、获取docker镜像的步骤详解 第一次,构建,运行,发布,