栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Docker镜像的制作

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Docker镜像的制作

目录

一、镜像images

二、镜像的层次结构

三、镜像的制作

一、镜像images

A Docker container image is a lightweight, standalone, executable package of sofrware that includes everything needed to run an application: code,runtime,system tools, system libraries and settings. 来自docker官方文档

镜像可以理解成一个软件 是一个app封装 里面有核心代码 系统工具 系统库等。

二、镜像的层次结构

容器启动的时候 内核启动bootfs后直接将base镜像加载 然后一层一层的加载 是自下而上

容器运行后访问文件的时候 是自下而上 一层一层往下访问的。

scratch是最基础的docker镜像 是一个空白的镜像。

镜像分层结构的最大好处就是资源共享。

可写层和镜像层 当容器启动时 一个新的可写层被加载到镜像的顶部 这一层被称作“容器层” 容器层之下的都叫“镜像层”。所有对容器的改动-无论添加、删除、还是修改文件都只会发生在容器层中。只有容器层是可写的 容器层下面的所有镜像层都是只读的。

三、镜像的制作

接下来只是制作镜像一个流程

1.新建一个空目录

[root docker mydocker]# mkdir mydocker
[root docker mydocker]# cd mydocker/

2.新建Dockerfile文件

[root docker mydocker]# vim Dockerfile 
#下载一个python2.7的基础镜像模板 python3.9也行 
FROM python:2.7-slim
#创建容器后 进入docker容器所在的目录
WORKDIR /app
#复制当前目录下的所有的内容到容器里的/app目录下
ADD . /app
#数据卷 可以不写
VOLUME [ /data_flask ]
#下载requirements.txt里的库 在制作镜像的时候运行
RUN pip install --trusted-host pypi.python.org -r requirements.txt
#表示开放80端口
EXPOSE 80
#声明环境变量NAME 值为World
ENV NAME World
#容器启动的时候执行的命令
CMD [ python , app.py ]

3.新建requirements.txt文件

[root docker mydocker]# vim requirements.txt
[root docker mydocker]# cat requirements.txt 
Flask
Redis

4.新建app.py文件

[root docker mydocker]# vim 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)

5.生成名字为sc_friendlyhello_1的镜像

[root docker mydocker]# docker build -t sc_friendlyhello_1 .

6.查看生成的镜像

[root docker mydocker]# docker images 
REPOSITORY TAG IMAGE ID CREATED SIZE
sc_friendlyhello_1 latest e2dc0bc22059 2 seconds ago 151 MB

7.创建并运行容器

[root docker mydocker]# docker run -d -p 4000:80 --name sc-hello-1 sc_friendlyhello_1

8.测试

在另一个终端去执行 下面表示linux里去访问网站

[root docker ~]# curl 192.168.10.10:4000
 h3 Hello World! /h3 b Hostname: /b 102212ba7691 br/ b Visits: /b i cannot connect to Redis, counter disabled /i 

此时可以说明自己制作的镜像已经成功 但是发现不能连接到redis数据库 因为当前还没有启动redis数据库容器 所有web服务不能连接到redis数据库 接下来我们再拉取redis镜像 并且启动一个redis容器 再次启动一个自己制作镜像的容器 链接到redis容器 然后再去测试。

[root docker ~]# docker pull redis
[root docker ~]# docker run -d -p 6379 6379 --name sc-redis-1 redis
[root docker ~]# docker run -d --name sc-hello-2 -p 4001:80 --link sc-redis-1:redis sc_friendlyhello_1
[root docker ~]# curl 192.168.10.10:4001

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/266952.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号