9、利用 Dockerfile 定制镜像


准备工作
下载代码 git clone git@gitlab.com:xhcheng/docker_hello.git
下载不了的就按下面步骤创建
touch Dockerfile
在 Dockerfile 中输入下面的内容 # Dockerfile

使用 Python 运行时作为基础镜像

FROM python:2.7-slim

设置 /app 为工作路径

WORKDIR /app

将当前目录所有内容复制到容器的 /app 目录下

ADD . /app

安装 requirements.txt 中指定的包

RUN pip install –trusted-host pypi.python.org -r requirements.txt

对容器外开放80端口

EXPOSE 80

定义环境变量

ENV NAME World

当容器启动时运行 app.py

CMD [“python”, “app.py”]
touch requirements.txt
在 requirements.txt 中输入下面的内容 Flask
Redis
touch app.py
在 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 = “cannot connect to Redis, counter disabled

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)
开始构建镜像
docker build -t docker_hello .
值得注意的是上下文路径这个概念。在本例中我们用 . 定义,那么什么是上下文环境呢?这里我们需要了解整个 build 的工作原理。
Docker 在运行时分为 Docker 引擎(也就是服务端守护进程)和客户端工具。Docker 的引擎提供了一组 REST API,被称为 Docker Remote API,而如 docker 命令这样的客户端工具,则是通过这组 API 与 Docker 引擎交互,从而完成各种功能。因此,虽然表面上我们好像是在本机执行各种 docker 功能,但实际上,一切都是使用的远程调用形式在服务端(Docker 引擎)完成。
构建完成后,docker images 查看
运行镜像
docker run -p 4000:80 docker_hello
浏览器查看 http://192.168.1.39:4000/
或者curl 查看 curl http://192.168.1.39:4000

输出结果

Hello World!

Hostname: 98750b60e766
Visits: cannot connect to Redis, counter disabled 发布镜像 如果你已经登录docker (使用命令 docker login) 就使用 docker push username/repository:tag 我这里是用本地仓库 docker tag 193d4bebc5d7 192.168.1.39:5000/docker_hello docker push 192.168.1.39:5000/docker_hello 发布完成后,可以在任意一台 docker 环境的机器上运行该镜像 在另外一台机器上 docker run -p 4001:80 192.168.1.39:5000/docker_hello 8、swarm集群搭建NGINX服务|2019-03-19 00:00:00|docker

在manager节点部署nginx服务,服务数量为10个,公开指定端口是8080映射容器80,使用nginx镜像
docker service create –replicas 10 –name nginx –publish 8080:80 nginx

执行上述命令时manager节点分发任务到各个worker节点,包括Manager节点本身(管理节点也可以是worker节点),可以通过 docker service ps nginx 命令查看

http://192.168.1.39:8080/ 访问即可


文章作者: Bob
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Bob !
  目录