DockerFile
一、关于DockerFile
1. DockerFile 是什么?
DockerFile就是镜像描述文件
2. DockerFile 有什么用?
可以通过DockerFile文件构建一个属于自己的镜像
3. 为什么使用 DockerFile 构建镜像?
Docker官方其实已经提供了很多的应用程序,但是如果我们想有适用于我们自己业务的镜像,就必须使用DockerFile去构建自定义的镜像
二、如何构建镜像
1. 创建DockerFile文件
在一个指定位置处,去创建DockerFile文件,然后在DockerFile文件中编写命令。要求:DockerFile文件中一行只有一条完整命令
2. 构建镜像
docker build -t 镜像名称:镜像版本 .
# 注:这个.代表DockerFile文件所在的位置
3. DockerFile内容知识
- 每条保留字指令都必须大写,且后面都要跟至少一个参数
- 指定按照从上到下,顺序执行
- #表示注释
- 每条指定都会创建一个新的镜像层,并对镜像进行提交
4. DockerFile的保留字命令
官方说明:Dockerfile reference | Docker Documentation
保留字 | 作用 |
---|---|
FROM | 当前镜像是基于哪个镜像的 |
RUN | 构建镜像时需要运行的指令 |
EXPOSE | 当前镜像对外暴露的端口号 |
WORKDIR | 指定在创建容器后,终端默认登录进来的工作目录,一个落脚点 |
ENV | 用来在构建镜像过程中设置环境变量 |
ADD | 将宿主机目录下文件拷贝进镜像且ADD命令会自动处理URL和解压tar包 |
COPY | 类似于ADD,拷贝宿主机原路径中的文件和目录到镜像中,将从构建上下文目录中的文件或目录复制到镜像内的目标路径位置 |
VOLUME | 容器数据卷,用于数据保存和持久化工作 |
CMD | 指定一个容器启动时要运行的命令,DockerFile中可以有多个CMD指令,但是只有最后一个生效,CMD会被docker run之后的参数替换 |
ENTRYPOINT | 指定一个容器启动时要运行的命令,目的和CMD一样 |
三、构建并运行示例
说明:以一个SpringBoot应用为例,对redis进行简单的操作
1. 创建SpringBoot应用
在SpringBoot应用的application.yml文件中,spring.redis.host的值为docker中redis的容器名称
spring:
redis:
host: myRedis
2. 打包SpringBoot应用
将打包好的SpringBoot应用的jar包上传至指定目录,并在当前目录下创建DockerFile文件
本文目录:/usr/local/isabener/myApplication/testSpringBootRedis(该目录下存在jar包和DockerFile文件)
DockerFile内容:
FROM kdvolder/jdk8
ENV APP_PATH=/testSpringBootRedis
WORKDIR $APP_PATH
ADD 015-springboot-redis-0.0.1-SNAPSHOT.jar $APP_PATH/015-springboot-redis-0.0.1-SNAPSHOT.jar
EXPOSE 9999
ENTRYPOINT ["java","-jar"]
CMD ["015-springboot-redis-0.0.1-SNAPSHOT.jar"]
3. 构建镜像
在/usr/local/isabener/myApplication/testSpringBootRedis目录下,执行以下命令:
docker build -t myapplication:1.0 .
4. 运行成容器
docker run -d -p 9999:9999 --name myapp myapplication:1.0
5. 将应用容器加入至redis所在网络
docker network connect springbootRedisApplication myapp