Docker镜像原理:
- docker镜像是由特殊的文件系统叠加而成
- 最低端的是boofs,并使用宿主机的bootfs
- 第二层是root文件系统rootfs,称为base image
- 让再往上叠加其他的镜像文件
- 统一文件系统(Union FileSystem)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角这样就隐藏了多层的存在,在用户的角度看来,只存在个文件系统
- 一个镜像可以放在另一个镜像的上面。位于下面的镜像称为父镜像,最底部的镜像成为基础镜像。
- 当从一个镜像启动容器时,Docker会在最顶层加载一个读写文件系统作为容器
操作系统的组成部分:
- 进程调度子系统
- 进程通信子系统
- 内存管理子系统
- 设备管理子系统
- 文件管理子系统
- 网络通信子系统
- 作业控制子系统
镜像制作:
容器转为镜像
docker commit 容器id 镜像名称:版本号
docker save -o 压缩文件名称 镜像名称:版本号 #将镜像打包成压缩文件,可以发给测试人
docker load -i 压缩文件名称 #测试人解压文件
注意:如果是镜像卷的方式挂载的文件,则打包镜像压缩后镜像中挂载失效,但是文件是存在的
Dockerfile概念
- Dockerfile 是一个文本文件
- 包含了一条条的指令
- 每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像
- 对于开发人员:可以为开发团队提供一个完全一致的开发环境,构建一个新的镜像开始工作了
- 对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件
- 对于运维人员:在部署时,可以实现应用的无缝移植
举例
FROM centos:7
LABEL maintainer blackholll@163.com
# 安装基础包
RUN yum install -y mysql-devel gcc gcc-devel python3 python3-pip python3-dev python3-devel mysql-devel zlib-devel openssl-devel openssl-devel git
RUN mkdir -p /var/log/loonflow
WORKDIR /opt
# RUN git clone https://github.com/blackholll/loonflow.git
RUN git clone https://gitee.com/shihowcom/loonflow_ro
WORKDIR /opt/loonflow_ro
RUN git checkout r1.0.6
WORKDIR /opt
RUN mv loonflow_ro loonflow
WORKDIR /opt/loonflow/requirements
RUN pip3 install -r pro.txt -i http://pypi.douban.com/simple/ --trusted-host=pypi.douban.com
# 复制config.py文件
WORKDIR /opt/loonflow/settings
RUN cp pro.py.simple config.py
# 修改redis配置
RUN sed -i "s/REDIS_HOST = '127.0.0.1'/REDIS_HOST = 'loonflow-redis'/g" /opt/loonflow/settings/config.py
RUN sed -i "s/REDIS_PASSWORD = ''/REDIS_PASSWORD = 'loonflow123'/g" /opt/loonflow/settings/config.py# 修改数据库配置
RUN sed -i "s/'NAME': 'loonflownew'/'NAME': 'loonflow'/g" /opt/loonflow/settings/config.py
RUN sed -i "s/'USER': 'loonflownew'/'USER': 'loonflow'/g" /opt/loonflow/settings/config.py
RUN sed -i "s/'PASSWORD': '123456'/'PASSWORD': 'loonflow123,.Ly'/g" /opt/loonflow/settings/config.py
RUN sed -i "s/'HOST': '127.0.0.1'/'HOST': 'loonflow-db'/g" /opt/loonflow/settings/config.py# 修改日志路径
RUN sed -i "/HOMEPATH = os.environ/c\ HOMEPATH = '/var/log/loonflow'" /opt/loonflow/settings/common.pyWORKDIR /opt/loonflow