Docker 支持通过扩展现有镜像,以及创建新的镜像。
下面演示如何自制一个自己的镜像,并且使用自制镜像启动容器的实验。
目录
第一步、编辑Dockerfile文件
第2步、编辑requirements.txt文件
第3步、编辑app.py文件
第4步、生成镜像文件
第5步、使用镜像,启动容器
第6步、访问容器的web服务
第7步、 启动redis容器
第8步、 再次启动一个自己制作镜像的容器,链接到redis容器
第九步、访问容器的web服务
第一步、编辑Dockerfile文件
1、在/下创建一个目录,再进入到该目录:
mkdir /mydocker/
cd /mydocker/
2、创建Dockerfile文件
vim Dockerfile
Dockerfile 文件内容是:
# 使用python3.9版本
FROM python:3.9-slim
# /app文件
WORKDIR /app
# 加载/app文件内容
ADD . /app
RUN pip install --trusted-host pypi.python.org -r requirements.txt
# 80端口
EXPOSE 80
# 环境ENV的设置:NAME和AUTHOR可以自己设置
ENV NAME World
ENV AUTHOR xiayuzhen
# CMD用来执行文件的
CMD ["python","app.py"]
第2步、编辑requirements.txt文件
创建requirements.txt文件,内容如下:
Flask
Redis
vim requirements.txt
第3步、编辑app.py文件
app.py是程序文件
vim 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 = "<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)
第4步、生成镜像文件
使用docker bulid -t 生成镜像文件,注意后面一定要使用 “ . ”,把当前目录下的第三个文件都加载进去。
1、查看当前目录下,只有三个刚刚创建的文件:
2、生成镜像文件
docker build -t xyz_friendlyhello_1 .
会自动从上往下一步一步的执行文件,最后出现successfully就创建镜像成功!
3、查看镜像文件
docker images
第5步、使用镜像,启动容器
生成一个使用自制镜像的容器:
docker run -d -p 4080:80 --name xyz-hello--1 xyz_friendlyhello_1
第6步、访问容器的web服务
使用curl或者chrome浏览器访问;
主机ip:4080
因为redis数据库容器没有启动,flask web服务不能连接到redis数据库
(端口要接容器设定的端口号访问)
第7步、 启动redis容器
docker run -d -p 6379:6379 --name sc_redis_1 redis
查看启动的容器:
第8步、 再次启动一个自己制作镜像的容器,链接到redis容器
docker run -d --name xyz-hello--2 -p 4081:80 --link sc_redis_1:redis xyz_friendlyhello_1
查看容器是否启动,每一次启动后的容器,都查看确保已经启动。
第九步、访问容器的web服务
使用重新启动容器的端口访问,链接redis后,可以显示出访问次数。
curl或者chrome浏览器访问
宿主机ip:4081
总结:从镜像的制作到代码编写,启动容器并且使用的实验就完成啦,而且还链接到redis查看到访问次数。