- 定制docker 镜像的方式:
- 手动修改容器内容,导出新的镜像
- 基于dockerfile 自行编写指令,基于指令流程创建镜像
- 镜像和容器的层级实现
- docker拉取镜像到docker engine 之后,共享系统内核。
在内核层上有镜像层(本质上只读的文件)
再依据镜像创建容器层(本质上就是给文件增加一个写的功能)
- 自己编写Dockerfile文件,在创建镜像的时候,是根据指令依次创建的(镜像是多层存储,每一层在前一层的基础上进行修改)
依次递加完成之后,最终形成一个新的镜像,最后再生成容器
- dockerfile介绍
dockerfile用于构建docker镜像,部署一个属于自己的容器环境。相当于一个脚本通过dockerfile中的指令来构建软件的环境依赖,文件依赖以及存储等等信息。
传统的拉取的镜像并使用的方式定制属于自己的docker镜像需要在其镜像的基础之上,会增加不必要的镜像内容,因此需要了解dockerfile中的内容,来实现自行编写指令。 - dockerfile的主要组成部分(基础镜像信息、制作镜像的操作指令、容器启动时执行的命令)
# 基础镜像信息(镜像是基于什么做的)
FROM ubuntu:latest
# 在创建镜像的时候需要运行的命令
RUN apt install xxx
# 在生成容器时要执行的命令
CMD ["/bin/bash"]
- dockerfile中的详细信息
# 基础镜像
FROM node:alpine
# 维护者信息 (可以没有)
MAINTAINER NAME "123@abc.COM"
# 拷贝以来文件并安装,copy 主机目录(源头) docker容器目录(目标)
# 主机目录通常建议使用相对路径(相对于dockerfile文件的路径),如果使用绝对路径,那么在run的时候需要添加路径,使其在构建上下文中
# 容器目录可以是绝对路径,可以是相对路径(相对路径需配合WORKDIR使用,二者共同构成一个绝对路径)
COPY package*.json ./
# add 主机目录 docker目录(add和copy的作用一直,但是add会自动解压,也可以是网址,会自动下载)
# 和python中的pip install一样
RUN npm install
# 创建工程目录
WORKDIR /usr/src/app
# copy的第一个.相对路径(主机目录)
# copy的第二个.相对路径(docker镜像目录)
COPY . .
# 设置容器内的数据卷,仅仅是声明的作用,具体的映射工作需要在运行容器的时候加上-v操作
# 如果在run 的过程中不添加-v,那么会关联到主机的匿名卷中(可以到inspect中的Mounts查看信息)
VOLUME ["/data"]
# 运行在3000端口(容器的端口)
# 运行到主机端口需要用到端口映射
# 端口映射:容器端口 映射 主机端口
# ——> 在主机通过主机端口去运行容器
EXPOSE 3000
# 设置环境变量
# ENV 环境变量
# 运行server.js(镜像到容器的分界,使静态转化为动态可运行的状态,在cmd中要写的内容)
CMD ["node","sever.js"]
# 和ENTRYPOINT ["node","sever.js"] 的命令执行结果一致
注:Dockerfile中的关键系必须是大写的,不然构建镜像的时候会出错。