美文网首页
docker制作镜像并发布和运行的最基本操作

docker制作镜像并发布和运行的最基本操作

作者: treeph | 来源:发表于2018-01-02 15:32 被阅读0次

docker运行环境

只需安装docker,将一些常用的基础环境或应用做成镜像(image),在应用代码里指明基础镜像、及依赖,实现可移植。
这些可移植的镜像由Dockerfile来定义。

使用Dockerfile定义容器

dockerfile定义容器内部运行环境。访问网络接口、磁盘驱动等资源就在这个环境中虚拟化,这个环境与系统其它部分是隔离的,因此必须将断口映射到外部,并且指明你想复制哪个文件到虚拟环境中。这样做后,Dockerfile中定义的应用构建在任何地方运行都一样。

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"]

应用本身

再创建2个文件,requirements.txtapp.py,与Dockerfile在同一路径下。当这个Dockerfile构建镜像时,requirements.txtapp.py就会被加入镜像中,因为使用了ADD命令。又由于EXPOSE命令,app.py将可以通过HTTP访问。

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)

当运行pip install -r requirements.txt时安装Flask、Redis依赖。
就是这样!你的电脑不需要安装python或者requirements.txt中的任何依赖,也不会在你电脑运行这些镜像。看起来并不像是你真正搭建起了python和flask的环境,但是你已经搭好了。

构建应用

docker build -t friendlyhello .

-t代表tag,标记一个更友好的名字。
查看构建好的镜像:

$ docker images

REPOSITORY            TAG                 IMAGE ID
friendlyhello         latest              326387cea398

启动应用

docker run -p 4000:80 friendlyhello

容器实际运行在http://0.0.0.0:80,由于-p进行端口映射,本地访问的正确地址是http://localhost:4000

docker run -d -p 4000:80 friendlyhello

-d代表以detached模式运行容器。
查看正在运行的容器:

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

指定容器ID,停止运行容器:

docker container stop 1fa4ab2cf395

分享你的镜像

以Docker ID登录

docker login

标记镜像

docker tag image username/repository:tag

发布镜像

docker push username/repository:tag

发布之后你就可以去 Docker Hub 查看到你刚刚发布的镜像啦。

从远程仓库拉取并运行镜像

docker run -p 4000:80 username/repository:tag

如果本地环境没有这个镜像,docker会从远程仓库拉取,再运行。

无论docker run在哪执行,都会拉取你的镜像,和python以及其他所有requirements.txt里的依赖包,并执行你的代码。它们一起在一个整洁的包里被移植,主机不需要安装任何环境只需要Docker就能将之运行起来。

相关文章

网友评论

      本文标题:docker制作镜像并发布和运行的最基本操作

      本文链接:https://www.haomeiwen.com/subject/gqofnxtx.html