文章目录
- 一、什么是Dockerfile?
- 二、制作镜像步骤
- 1.新建一个空目录
- 2.新建Dockerfile
- 3.新建requirements.txt文件
- 4.新建app.py文件
- 5.生成镜像,需要一点时间,因为下载安装很多东西
- 6.查看生成的镜像
- 8.下载redis的镜像
- 9.运行容器
- 总结
一、什么是Dockerfile?
制作一个自己的docker镜像,此文是在其他镜像的基础上为之扩展,Dockerfile是制作镜像的配方。Dockerfile是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。 Docker通过读取Dockerfile中的指令自动生成映像。
二、制作镜像步骤
1.新建一个空目录
本文是centos8系统,代码如下(示例):
[root@centos8-docker /]# mkdir mydocker1
[root@centos8-docker /]# cd mydocker1
2.新建Dockerfile
代码如下(示例):
[root@centos8-docker mydocker1]# vim Dockerfile
[root@centos8-docker mydocker1]# cat Dockerfile
FROM python:3.9-slim
#下载一个python3.9的镜像模板,已经有操作系统和安装好python3.9
WORKDIR /app
#在docker容器里的工作目录-->进入docker容器的时候,所在的目录
ADD . /app
# 复制当前目录下的所有的内容到容器里的/app目录下
VOLUME ["/data_flask"]
#指定数据卷
RUN pip install --trusted-host pypi.python.org -r requirements.txt
#安装requirements.txt里的库,只是在制作镜像的时候运行
EXPOSE 80
#EXPOSE 80 定义环境变量
ENV NAME World
#定义name变量
ENV AUTHOR yejing
#定义author变量
CMD ["python","app.py"]
#容器启动的时候会运行
3.新建requirements.txt文件
[root@centos8-docker mydocker1]# vim requirements.txt
[root@centos8-docker mydocker1]# cat requirements.txt
Flask
Redis
#下载我们所需要的flask框架和redis数据库
4.新建app.py文件
[root@centos8-docker mydocker1]# vim app.py
[root@centos8-docker mydocker1]# cat 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)
[root@centos8-docker mydocker1]# ls
app.py Dockerfile requirements.txt
#这个目录下有这三个文件
5.生成镜像,需要一点时间,因为下载安装很多东西
[root@centos8-docker mydocker1]# docker build -t sc_friendlyhello_2 .
#按照当前路径下的配置文件,生成一个名字为sc_friendlyhello_2的镜像
出现上图即成功生成此镜像
6.查看生成的镜像
[root@centos8-docker mydocker1]# docker images
8.下载redis的镜像
[root@centos8-docker mydocker1]# docker pull redis
9.运行容器
[root@centos8-docker mydocker1]# docker run -d -p 6677:80 --name sc_hello_2 sc_friendlyhello_2
[root@centos8-docker mydocker1]# docker ps
#查看正在运行的容器
用浏览器访问自己虚拟机的ip地址加端口号,出现下图即可,我的是192.168.31.31:6677
因为redis容器没有启动,所以我们启动一个redis容器链接到现在的这个容器。
[root@centos8-docker mydocker1]# docker run -d -p 5644:6379 --name sc_redis_2 redis
#创建redis容器
[root@centos8-docker mydocker1]# [root@centos8-docker mydocker1]# docker run -d -p 5647:80 --name sc_hello_4 --link sc_redis_2:redis sc_friendlyhello_2
#创建一个容器链接到redis数据库容器
再用浏览器访问192.168.31.31:5647
成功显示
总结
至此,成功制作镜像!