這裡記錄 Containers 實作流程

在這裡按照下方流程就能快速建立出一個 python demo web

預計將專案放置在 docker_project/get_started/

建立檔案: 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"]

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)

這時,在資料夾內包含了 Dockerfile, app.py, requirements.txt 這三個檔案

透過下方指令建立 Docker image

docker build -t friendlyhello .

Docker 背景執行 friendlyhello

docker run -d -p 4000:80 friendlyhell

開啟瀏覽器,前往 http://0.0.0.0:4000

查看運行中的 container

docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                  NAMES
7dbb951f29b6        friendlyhello       "python app.py"     49 seconds ago      Up 54 seconds

停止運行指定的 docker

docker container stop 7dbb951f29b6

重新啟動

docker restart 7dbb951f29b6

關閉

docker stop 7dbb951f29b6

登入 Docker,輸入下方指令,並填寫帳號密碼登入你的 Docker

Docker login

註冊你的 images

docker tag image username/repository:tag

舉例來說:

docker tag friendlyhello gordon/get-started:part2

查看 images

$ docker image ls

REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
friendlyhello            latest              d9e555c53008        3 minutes ago       195MB
gordon/get-started         part2               d9e555c53008        3 minutes ago       195MB
python                   2.7-slim            1c7128a655f6        5 days ago          183MB

將 image 上傳

docker push gordon/get-started:part2

執行遠端的 repository

docker run -d -p 4000:80 gordon/get-started:part2