DockerFile

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
### 创建和使用 Dockerfile #### 编写 Dockerfile Dockerfile 是一种用于定义 Docker 镜像的脚本文件,它包含了构建镜像所需的一系列指令。以下是编写 Dockerfile 的基本结构和常用指令: 1. **FROM**: 定义基础镜像,这是所有 Dockerfile 中的第一个非注释指令。 示例:`FROM ubuntu:latest` 表示基于最新的 Ubuntu 镜像创建新的镜像[^4]。 2. **ENV**: 设置环境变量。 示例:`ENV JAVA_HOME /usr/local/jdk1.8.0_71` 用来设置 `JAVA_HOME` 环境变量[^4]。 3. **ADD/COPY**: 添加或复制文件到镜像中。两者的主要区别在于 `ADD` 支持远程 URL 和自动解压功能,而 `COPY` 更加直观简单。 示例:`COPY app.jar /app/` 将本地的 `app.jar` 文件复制到容器内的 `/app/` 路径下[^3]。 4. **RUN**: 执行命令以安装软件或其他必要的操作。这些命令将在构建过程中被执行。 示例:`RUN apt-get update && apt-get install -y curl` 更新包管理器并安装 `curl` 工具[^4]。 5. **EXPOSE**: 声明容器运行时监听的端口号。这不会实际开放端口,仅作为文档用途供客户端参考。 示例:`EXPOSE 8080` 指定容器内部服务使用的端口为 8080[^4]。 6. **CMD 或 ENTRYPOINT**: 定义容器启动时默认执行的命令。注意,一个 Dockerfile 只能有一个有效的 CMD 指令,若有多个,则只有最后一条生效;ENTRYPOINT 则更常用于固定入口程序调用方式。 示例:`CMD ["java", "-jar", "/app/app.jar"]` 启动 Java 应用程序[^3]。 #### 使用 Dockerfile 构建镜像 通过 `docker build` 命令可以依据 Dockerfile 来生成自定义镜像。具体语法如下: ```bash docker build [OPTIONS] PATH | URL | - ``` 常见选项包括 `-t` 设定新镜像的名字与标签以及 `-f` 明确指出所采用的 Dockerfile 名字及其位置[^2]。例如,在当前目录存在名为 php.Dockerfile 的情况下,可通过下面这条语句建立镜像: ```bash docker build -f ./php.Dockerfile -t my-php-app:v1 . ``` #### 运行由 Dockerfile 构建出来的镜像 一旦成功构建好镜像之后,就可以利用 `docker run` 把这个静态映射变成动态实例化的过程——也就是常说的“跑起来”。其基本形式如下所示: ```bash docker run [OPTIONS] IMAGE [COMMAND] [ARG...] ``` 举个例子来说就是假如前面提到过的那个 PHP Web Server 类型的应用程序已经打包完毕成为镜像叫做 `my-php-app:v1`,那么现在想让它作为一个独立的服务进程开始运作则只需要输入类似这样的东西就可以了: ```bash docker run -d --name my-running-server -p 8080:80 my-php-app:v1 ``` 这里的关键部分解释一下,“-d”表示后台模式运行容器,“--name”赋予特定名字给这次启动的新实体以便后续识别方便,“-p”实现主机端口向容器内暴露出去的功能从而允许外部访问[^3]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值