做网站 长,微博图床wordpress,高端网站建设公司报价,114网站制作目录 
第1步#xff1a;编辑Dockerfile  第2步#xff1a;编辑requirements.txt文件 
第3步#xff1a;编辑app.py文件#xff0c;我们的程序文件 第4步#xff1a;生成镜像文件 
第5步#xff1a;使用镜像#xff0c;启动容器 
第6步#xff1a; 启动redis容器、将容器…目录 
第1步编辑Dockerfile  第2步编辑requirements.txt文件 
第3步编辑app.py文件我们的程序文件 第4步生成镜像文件 
第5步使用镜像启动容器 
第6步 启动redis容器、将容器链接到redis容器  
第7步测试 制作一个自己的镜像本文的例子是flask web服务并使用其启动容器访问服务 从镜像的制作到代码编写启动容器 
midkr /mydocker
cd /mydocker 所有用于制作镜像所需文件都会放在mydocker这个文件里 
第1步编辑Dockerfile  
[rootdocker1 mydocker]# vim Dockerfile
[rootdocker1 mydocker]# cat Dockerfile
FROM python:2.7-slim	
WORKDIR /app
ADD . /app
RUN pip install --trusted-host  pypi.python.org -r requirements.txt
EXPOSE 80
ENV NAME World
ENV AUTHOR cali
CMD [python,app.py]FROM python:2.7-slim 导入基础镜像镜像里已经安装了python 2.7 WORKDIR /app 进入到容器后会进入的文件夹 ADD . /app 复制Linux系统当前目录下的内容到容器的/app目录下相当于docker cp RUN 在容器内部执行的命令 EXPOSE 80 容器监听80端口 ENV NAME World 定义环境变量NAME复制world ENV AUTHOR cali 定义环境变量AUTHOR复制cali CMD [“python”,“app.py”] 容器启动时执行命令 RUN和CMD指令是不同的阶段执行的 RUN是在执作镜像的过程中执行的 CMD是镜像制作完成启动容器使用镜像的时候执行的 注意这里的Dockerfile是用于构建 Docker 容器镜像的文本文件其中包含了一系列指令用于描述如何构建一个特定的 Docker 镜像。通过 Dockerfile你可以定义容器的环境、运行命令、安装软件包、设置文件和目录等操作最终将这些指令逐步执行生成一个可运行的 Docker 镜像。 
也就是说他是一个配置文件 第2步编辑requirements.txt文件 
[rootdocker1 mydocker]# vim requirements.txt
[rootdocker1 mydocker]# cat requirements.txt
Flask
Redis这意味着你的应用程序依赖于 Flask 和 Redis 这两个 Python 包。通常情况下当你使用 Docker 镜像制作工具时比如 Dockerfile你可以将这个 requirements.txt 文件用作安装依赖项的基础。例如在 Dockerfile 中可能会有一行类似于 
RUN pip install -r requirements.txt这样的命令将会在构建 Docker 镜像时安装 requirements.txt 文件中列出的所有 Python 依赖包以确保你的应用程序在容器中能够正常运行。 第3步编辑app.py文件我们的程序文件 
这里是python 编写的一个简单的基于flask框架的web服务也就是核心代码 
[rootdocker1 mydocker]# vim app.py
[rootdocker1 mydocker]# cat app.py
from flask import Flask
from redis import Redis, RedisError
import os
import socket# Connect to Redis
redis  Redis(hostredis, db0, socket_connect_timeout2, socket_timeout2)app  Flask(__name__)app.route(/)
def hello():try:visits  redis.incr(counter)except RedisError:visits  icannot connect to Redis, counter disabled/ihtml  h3Hello {name}!/h3 \bHostname:/b {hostname}br/ \bVisits:/b {visits}return html.format(nameos.getenv(NAME, world), hostnamesocket.gethostname(), visitsvisits)if __name__  __main__:app.run(host0.0.0.0, port80)这段代码是一个简单的 Flask 应用程序。它使用 Flask 来创建一个 Web 服务器并在根路径 (/) 上定义了一个路由。当访问该路径时它会尝试连接到 Redis 数据库并增加一个名为 counter 的计数器。然后它会返回一个包含一些信息的 HTML 页面其中包括访问者的主机名、访问次数等信息。 这段代码中的 redis 变量是一个连接到 Redis 数据库的客户端。在 hello() 函数中它尝试递增一个名为 counter 的计数器如果连接到 Redis 失败则会返回一个指示计数器不可用的消息。 在 if __name__  __main__: 语句下它调用了 Flask 应用程序的 run() 方法以便在主机的端口 80 上运行应用程序。 此时ls当前目录有三个文件 
[rootdocker1 mydocker]# ls
app.py  Dockerfile  requirements.txt第4步生成镜像文件 
docker build -t [name] . 
[rootdocker1 mydocker]# docker build -t sc-hello_1 .
Sending build context to Docker daemon  4.608kB
Step 1/8 : FROM python:2.7-slim
2.7-slim: Pulling from library/python
123275d6e508: Pull complete
dd1cd6637523: Pull complete
0c4e6d630f2c: Pull complete
13e9cd8f0ea1: Pull complete
。。。。。
Step 8/8 : CMD [python,app.py]--- Running in 37b5eab93347
Removing intermediate container 37b5eab93347--- 4a40df3dba49
Successfully built 4a40df3dba49
Successfully tagged sc-hello_1:latest
#  查看是否建立成功
[rootdocker1 mydocker]# docker images
REPOSITORY   TAG        IMAGE ID       CREATED          SIZE
sc-hello_1   latest     4a40df3dba49   11 seconds ago   159MB
mysql        5.7.39     daff57b7d2d1   4 days ago       430MB
nginx        1.22.0     1b84ed9be2d4   6 days ago       142MB
nginx        latest     2b7d6430f78d   6 days ago       142MB
python       2.7-slim   eeb27ee6b893   2 years ago      148MB使用 docker images就可以看到已经创建的镜像 
第5步使用镜像启动容器 
docker run 一个容器使用自己刚刚生成的镜像 
[rootdocker1 mydocker]# docker run -d -p 5080:80 --name my-hello-1 sc-hello_1
00cfc6f5255916bbed6aee48039acf1697938002d4be80f010348ec48d439acd访问容器的web服务 curl或者chrome浏览器访问 宿主机ip:5080然后去访问这个服务看是否成功 因为redis数据库容器没有启动flask web服务不能连接到redis数据库  
第6步 启动redis容器、将容器链接到redis容器  
[rootdocker1 mydocker]# docker pull redis
Using default tag: latest
latest: Pulling from library/redis
7a6db449b51b: Already exists
05b1f5f3b2c0: Pull complete
f0036f71a6fe: Pull complete
cd7ddcecb993: Pull complete
8cfc9a467ed7: Pull complete
2a9998409df9: Pull complete
Digest: sha256:495732ba570db6a3626370a1fb949e98273a13d41eb3e26f7ecb1f6e31ad4041
Status: Downloaded newer image for redis:latest
docker.io/library/redis:latest
[rootdocker1 mydocker]# docker run -d -p 6379:6379 --name sc-redis-1 redis
3345b96604508aed60492c9bc0e50e08751f00e76cdd8b1b0f3c40b31a27ab37再次启动一个自己制作镜像的容器连接到redis容器 
[rootdocker1 mydocker]# docker run -d --name my-hello-2 -p 5081:80 --link sc-redis-1:redis sc-hello_1
3470e6ddeaa2367e026b768b2178d83d17c9f246a046ea4303fdc42851e1cf10 这个命令启动了一个名为 my-hello-2 的 Docker 容器使用了 -d 参数让容器在后台运行。它映射了容器内部的 80 端口到主机的 5081 端口-p 5081:80这意味着你可以通过访问主机的 5081 端口来访问该容器中运行的应用程序。 另外--link sc-redis-1:redis 参数建立了与名为 sc-redis-1 的 Redis 容器的连接并将其命名为 redis这样在你的 Flask 应用程序中就可以使用 redis 这个主机名来访问 Redis 容器。 最后sc-hello_1 是指你要运行的 Docker 镜像的名称或 ID。 容器的 ID 是 3470e6ddeaa2367e026b768b2178d83d17c9f246a046ea4303fdc42851e1cf10。   第7步测试 
[rootdocker1 mydocker]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS                   PORTS                                       NAMES
3470e6ddeaa2   sc-hello_1     python app.py          4 minutes ago    Up 4 minutes             0.0.0.0:5081-80/tcp, :::5081-80/tcp       my-hello-2
3345b9660450   redis          docker-entrypoint.s…   6 minutes ago    Up 5 minutes             0.0.0.0:6379-6379/tcp, :::6379-6379/tcp   sc-redis-1
00cfc6f52559   sc-hello_1     python app.py          57 minutes ago   Up 57 minutes            0.0.0.0:5080-80/tcp, :::5080-80/tcp       my-hello-1 访问容器的web服务 curl或者chrome浏览器访问 宿主机ip:5081 
界面显示应该如下即表示成功 Hello World! Hostname: aad7da1892b5 Visits: 1 
同时刷新的时候会看见Visits会加一相当于自动计数访问量