1.Dockerfile是什么?
Docker镜像的描述文件,是由一系列命令和参数构成的脚本。
定义:镜像的描述文件
2.Dockerfile的作用?
作用:通过Dockerfile文件构建一个属于自己的镜像
3.为什么使用Dockerfile构建镜像
官方镜像确实足够好了,足够适用于大多数应用程序,但是如果我们想自定义属于我们自己的镜像,这个时候必须自定义镜像
4.如何通过Dockerfile构建自己的镜像?
a. 在指定位置创建一个dockerfile文件
编写dockerfile相关语法
b.通过Dockerfile构建镜像
docker build -t aa:1.0 .(指定Dockerfile文件所在的位置)
-t:指定的镜像是谁
aa:1.0 名字:版本号
5.Dockerfile构建镜像流程
6、Dockerfile相关指令。
保留字 | 作用 |
from | 从哪里来 |
MAINTAINER(早期有,后来废弃) | 镜像的作者和邮箱 |
RUN | 构建镜像时运行哪些指令 |
EXPOSE | 自定义的镜像允许暴露哪些端口 |
WORKDIR | 镜像的工作目录 |
ENV | 构建镜像时设置的环境变量 |
ADD | 往镜像里面添加一些自定义的文件 |
COPY | 拷贝文件或者目录到镜像 |
VOLUME | 暴露镜像有哪些数据卷 |
CMD | 指定一个容器启动时要运行的命令 |
ENTRYPOINT | 指定一个容器启动时要运行的命令 |
7.步骤,基于哪个镜像进行创建
查看镜像
docker images
1.新建一个Dockerfile文件
注意:
每条指令都必须大写,且后面都要跟至少一个参数
指令按照从上往下,顺序执行
#表示注释
每条指令都会创建一个新的镜像层,并对镜像进行提交
2.编辑内容(基于mysql,docker images查询出来的)
3. docker build -t zspsql:01 .
4.查询一下,已经创建出来了
另外的:
run就是在上一步的基础之上再做一些命令,第二种方式不经过缓存(临时镜像)
EXPOSE 声明服务端口,除了第一行以外写
WORKDIR 指定落脚点,也就是你进入某个容器的某个服务之后首先到的是哪个位置,可以指定这个位置
重新build一下
查询容器:docker images
运行容器:
mysql独有的启动 docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root --name zzzsql --restart=always -v /root/data:/var/lib/mysql -d zspsql:02
一般启动 docker run -it (Repository):(TAG)
查询docker中运行的服务:docker ps
进入服务:docker exec -it (CONTAINER ID) bash
可以看到落脚点为apps
ADD 拷贝文件或者目录到当前容器,先测试一个a.txt
add 也可以写url地址 直接下载地址所对应的文件
ADD http://...tar .
可以跟RUN连用,下载完直接解压
下载完直接解压并删除压缩包,并改名为zsp-tomcat-9
ENV 设置变量
VOLUME 数据卷 声明用的
告诉使用者容器中可以挂载这个目录到宿主机中
CMD&ENTRYPOINT
1.CMD&ENTRYPOINT作用:都是用来指定容器启动时默认执行的指令
注意:CMD指令可以存在多个,但是只有最后一个指令生效
2.使用语法:
直接命令方式: java -jar zsp.jar
json数据方式:["java","-jar","zsp.jar"] 推荐 支持传参
运行这个容器,默认执行 查看apps文件夹下的文件 ,把CMD换成ENTRYPOINT也可以实现同样的效果
3.CMD&ENTRYPOINT区别
a.CMD里面的命令如果在运行容器的时候进行覆盖:
docker run 镜像:版本号 覆盖自定义的命令 ls /
docker run mysql:03 ls /
b.ENTRYPOINT里面的命令如果在运行容器的时候进行覆盖:
docker run --entrypoint=覆盖指令 镜像:版本号 传递参数
docker run --entrypoint=ls mysql:03 /
4.如何使用
ENTRYPOINT用来书写容器固定的指令
CMD用来给ENTRYPOINT传递参数
使用配合的方式时,必须使用json数组的语法
本章结束。