目录
一、镜像images
二、镜像的层次结构
三、镜像的制作
一、镜像imagesA 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



