国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 服務(wù)器 > Web服務(wù)器 > 正文

第一次構(gòu)建、運行、發(fā)布、獲取docker鏡像的步驟詳解

2024-09-01 13:56:45
字體:
供稿:網(wǎng)友

1、前言

過去,如果您要開始編寫Python應(yīng)用程序,第一步就是把Python的運行環(huán)境安裝到您的機器上,而且安裝的環(huán)境還要和線上的一致,比較麻煩。

使用Docker,您可以從docker的官方registry或者其他倉庫,獲取一個可移植的Python運行環(huán)境鏡像,無需安裝。然后,你可以基于這個鏡像開發(fā)你的應(yīng)用程序,這樣可以確保您的應(yīng)用程序,依賴項和運行時都一起運行。

2、構(gòu)建一個python鏡像

2.1、為了構(gòu)建您自己的鏡像,首先需要創(chuàng)建一個名稱為Dockerfile的文件,用于定義創(chuàng)建鏡像并運行container所需的步驟。 Dockerfile中的每條指令都會在鏡像中創(chuàng)建一個層級。當(dāng)您更改Dockerfile并重新build鏡像時,只重建那些更改的層級。與其他虛擬化技術(shù)相比,這是使鏡像輕量,小巧,快速的一個原因。

創(chuàng)建一個空目錄,創(chuàng)建一個名為Dockerfile的文件,將以下內(nèi)容復(fù)制并粘貼到該文件中并保存。

# Use an official Python runtime as a parent imageFROM python:2.7-slim# Set the working directory to /appWORKDIR /app# Copy the current directory contents into the container at /appADD . /app# Install any needed packages specified in requirements.txtRUN pip install --trusted-host pypi.python.org -r requirements.txt# Make port 80 available to the world outside this containerEXPOSE 80# Define environment variableENV NAME World# Run app.py when the container launchesCMD ["python", "app.py"]

2.2 在與Dockerfile文件同一個目錄下,創(chuàng)建requirements.txt和app.py文件。因為Dockerfile文件的ADD命令,上面的兩個文件會被加到最終的鏡像中;因為EXPOSE命令,訪問容器的80端口,才可以訪問到app.py的內(nèi)容,注意:這里的80端口指的是容器暴露的端口,并不是實際機器的端口。
requirements.txt

Flask
Redis

app.py

from flask import Flaskfrom redis import Redis, RedisErrorimport osimport socket# Connect to Redisredis = 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 把我們的應(yīng)用打包為鏡像,要在DockerFile目錄下執(zhí)行。這會創(chuàng)建一個Docker鏡像,我們將使用-t標(biāo)記它,以使鏡像有一個友好的名稱。

docker build -t friendlyhello

3 、運行鏡像

運行應(yīng)用程序,使用-p將機器的端口4000映射到容器暴露的端口80:

docker run -p 4000:80 friendlyhello

docker,鏡像

您也可以在shell中使用curl命令來查看相同的內(nèi)容。

$ 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結(jié)束應(yīng)用

現(xiàn)在讓我們在后臺運行應(yīng)用程序:

docker run -d -p 4000:80 friendlyhello

查看所有的container信息

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

現(xiàn)在使用docker container stop來結(jié)束進程,使用CONTAINER ID,如下所示:

docker container stop 1fa4ab2cf395

4、發(fā)布鏡像

4.1、我使用的是阿里云的docker registry,感覺應(yīng)該會比較快。首先你要有一個阿里云的賬號。然后登陸進去新建一個倉庫,設(shè)置命名空間等信息。

docker,鏡像

4.2 登陸阿里云的docker registry,后續(xù)操作都需要登陸才可以執(zhí)行。

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

4.3 為鏡像打標(biāo),tag為可選的,如果沒有,默認(rèn)為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 發(fā)布鏡像

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

4.5 現(xiàn)在你可以在任何一臺機器上執(zhí)行下面的命令,運行鏡像

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

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對VEVB武林網(wǎng)的支持。


注:相關(guān)教程知識閱讀請移步到服務(wù)器教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 乡城县| 香格里拉县| 宣威市| 湖北省| 濮阳县| 贡山| 敖汉旗| 右玉县| 大洼县| 望江县| 云浮市| 阳东县| 徐州市| 临安市| 沛县| 资源县| 莱州市| 虹口区| 闵行区| 浠水县| 霍林郭勒市| 常宁市| 兴隆县| 恩平市| 古丈县| 元阳县| 洪雅县| 疏附县| 旌德县| 江山市| 平阳县| 苍溪县| 无棣县| 嵩明县| 五寨县| 茂名市| 荥阳市| 德兴市| 澜沧| 都江堰市| 巨野县|