Docker入門實戰(二)----使用Dockerfile建立自己的映象
上一篇文章中,我們是使用了別人做好的映象來使用docker。
更多的映象可以到https://hub.docker.com/查詢
這篇文章,我們將自己來製作映象。
自己製作映象非常簡單,只需要自己寫一個Dockerfile,build之後就能得到一個映象。
下面的例子,參考官網
1.新建資料夾test
>mkdir test
>cd test
==注:該資料夾下最好不要放置其他與製作映象無關的檔案,因為docker在build階段會掃描當前資料夾下的所有檔案,會影響到製作效率。==*
2.新建Dockerfile
> vim Dockerfile
==注:檔名必須為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"]
3.新建app.py和requirements.txt
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)
requirements.txt寫入
Flask
Redis
4.build這個映象
>docker build -t friendlyhello .
friendlyhello為映象名字,可以自己隨意取。
命令列最後的”.”表示當前目錄
docker images
可以檢視到我們剛剛製作好的映象
5.執行這個應用
> docker run –name friendlyhello_test -p 4000:80 friendlyhello
開啟瀏覽器(宿主機上的埠是4000)
我們再試試讓應用在後臺執行
這裡需要換個名字,並且4000埠被佔用,所以埠也需要改變
> docker run –name friendlyhello_test2 -p 4001:80 -d friendlyhello
這裡把容器名字設定成了 friendlyhello_test2
-d設定為後臺執行
>docker ps #檢視容器,可以看到正在執行的friendlyhello_test2
這一篇文章只是用了一個簡單的例子來製作映象。下一篇文章會更加詳細地介紹Dockerfile的各項引數。