溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何構(gòu)建、運(yùn)行、發(fā)布和獲取docker鏡像

發(fā)布時(shí)間:2022-03-24 16:44:36 來源:億速云 閱讀:209 作者:iii 欄目:web開發(fā)

今天小編給大家分享一下如何構(gòu)建、運(yùn)行、發(fā)布和獲取docker鏡像的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

1、前言

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

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

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

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

# 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文件同一個(gè)目錄下,創(chuàng)建requirements.txt和app.py文件。因?yàn)閐ockerfile文件的add命令,上面的兩個(gè)文件會(huì)被加到最終的鏡像中;因?yàn)閑xpose命令,訪問容器的80端口,才可以訪問到app.py的內(nèi)容,注意:這里的80端口指的是容器暴露的端口,并不是實(shí)際機(jī)器的端口。
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 把我們的應(yīng)用打包為鏡像,要在dockerfile目錄下執(zhí)行。這會(huì)創(chuàng)建一個(gè)docker鏡像,我們將使用-t標(biāo)記它,以使鏡像有一個(gè)友好的名稱。

docker build -t friendlyhello

3 、運(yùn)行鏡像

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

docker run -p 4000:80 friendlyhello

如何構(gòu)建、運(yùn)行、發(fā)布和獲取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)在讓我們?cè)诤笈_(tái)運(yù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é)束進(jìn)程,使用container id,如下所示:

docker container stop 1fa4ab2cf395

4、發(fā)布鏡像

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

如何構(gòu)建、運(yùn)行、發(fā)布和獲取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)在你可以在任何一臺(tái)機(jī)器上執(zhí)行下面的命令,運(yùn)行鏡像

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

以上就是“如何構(gòu)建、運(yùn)行、發(fā)布和獲取docker鏡像”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI