当前位置: 首页 > 编程笔记 >

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

胡野
2023-03-14
本文向大家介绍第一次构建、运行、发布、获取docker镜像的步骤详解,包括了第一次构建、运行、发布、获取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

总结

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

 类似资料:
  • 我能够设置github和AWS CodePipeline之间的集成,所以现在我的代码在lambda函数的推送事件之后上传到S3。这很有效。 S3上带有源代码的新ZIP触发了一个管道,该管道生成代码。那很好。现在我还想为这个项目建立一个docker形象。 第一个问题是不能混合使用项目(nodejs)构建和docker构建。那很好,有道理。下一个问题是您不能有另一个buildspec。用于docker

  • 本文向大家介绍Maven插件构建Docker镜像的实现步骤,包括了Maven插件构建Docker镜像的实现步骤的使用技巧和注意事项,需要的朋友参考一下 背景 微服务架构下,微服务在带来良好的设计和架构理念的同时,也带来了运维上的额外复杂性,尤其是在服务部署和服务监控上。单体应用是集中式的,就一个单体跑在一起,部署和管理的时候非常简单,而微服务是一个网状分布的,有很多服务需要维护和管理,对它进行部署

  • 本文向大家介绍通过Dockerfile构建Docker镜像的方法步骤,包括了通过Dockerfile构建Docker镜像的方法步骤的使用技巧和注意事项,需要的朋友参考一下 Dockerfile是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建. Dockerfile支持Shell类的行尾添加"\"的命令换行方式,以及

  • 本文向大家介绍Docker拉取镜像的完整步骤,包括了Docker拉取镜像的完整步骤的使用技巧和注意事项,需要的朋友参考一下 1. docker pull 拉取镜像 使用 $ docker pull {IMAGE_NAME} 拉取镜像时,有两种情况: IMAGE_NAME 第一个斜杠之前有域名标识 Docker 会将 IMAGE_NAME 识别为带域名的镜像。例如,myregistry.io/spa

  • Pushing the image Now that a root key is available, it’s time to initialize the repository on the first push. Consider this as your app: FROM alpine RUN true Make sure you have all trusted metadata us

  • 本文向大家介绍利用Docker制作Nginx+PHP镜像的步骤详解,包括了利用Docker制作Nginx+PHP镜像的步骤详解的使用技巧和注意事项,需要的朋友参考一下 前言 这篇文章给大家介绍的是使用Docker制作nginx+php的镜像,本文里的镜像是centos + nginx 1.9.7 + php 5.6.14,下面话不多说,直接看实现的步骤吧。  1、首先下载到nginx和php: n