Dockerfile 学习笔记

#Dockerfile [字体 ··]

Dockerfile

Dockerfile 的作用是用来构建 docker 镜像(image),使用 Dockerfile 我们可以构建出更符合自己需要的镜像,而编写好的 Dockerfile 我们可以多次使用。

Dockerfile 中的保留字

Dockerfile 中的保留字在使用时全部需要大写,保留字不能再作为属性的值使用。

  • FROM:指定当前镜像是基于哪个镜像来构建的
  • RUN:构建镜像是需要运行的指令
  • EXPOSE:当前容器对外暴露的端口
  • WORKDIR:指定容器创建后,终端默认的进入的路径(PATH)
  • EVN:用来定义在构建过程中设置环境变量,使用$引用
  • ADD:把宿主机目录下的文件和目录拷贝到容器,如果是 tar 文件则会镜像自动解压,如果 ADD 的第一个参数是 URL,则会下载文件然后拷贝到容器
  • COPY:把宿主机目录下的文件拷贝到容器,不对被拷贝进行操作,功能通 cp 命令
  • VOLUME:设置容器容器数据卷,用于容器中数据持久化存储
  • CMD:指定一个容器启动时运行的命令,使用 docker run 命令最后加的命令会覆盖 CMD 指定的命令
  • ENTRYPOINT:指定一个容器启动时要运行哪个命令,功能同 CMD 但不能被覆盖。通常与 CMD 配合使用,注意:配合使用时要用数组方式执行命令,即 ENTRYPOINT ["java","-jar"]

Dockerfile 示例

构建 springboot 镜像,启动时运行 springboot 项目

1FROM:openjdk:8-jre
2# 指定进入容器默认进入路径
3WORKDIR /app
4# 拷贝jar包并重命名
5ADD demo-0.0.1-SNAPSHOT.jar app.jar
6ENTRYPOINT ["java","-jar"]
7CMD ["app.jar]

构建后端 api 使用的镜像

 1FROM centos:7
 2# 指定工作目录(进入容器的默认目录)
 3WORKDIR /project
 4# 在 centos7 中安装相关依赖
 5RUN yum -y update \
 6    && yum -y install vim \
 7    && yum -y install git \
 8    && yum -y install java-1.8.0-openjdk-devel.x86_64 \
 9    && yum install -y maven \
10    && mkdir ~/.m2
11# 配置 maven
12RUN echo '<?xml version="1.0" encoding="UTF-8"?><settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"><mirrors><mirror><id>alimaven</id><mirrorOf>central</mirrorOf><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/repositories/central/</url></mirror></mirrors></settings>' > ~/.m2/settings.xml

构建 nvm(node version manage)镜像

 1# 依赖centos环境
 2FROM centos:latest
 3# 指定工作目录(进入容器的默认目录)
 4WORKDIR /project
 5#安装vim和git环境
 6RUN yum -y update \
 7    	&& yum -y install vim \
 8	&& yum -y install git \
 9	&& git --version \
10	&& cd ~/ \
11	&& git clone https://hub.fastgit.org/nvm-sh/nvm.git .nvm \
12	&& echo "source ~/.nvm/nvm.sh" >> ~/.bashrc && source ~/.bashrc

实践总结:

  • 通常在 Dockerfile 中尽量少使用 RUN 命令,因为每个 RUN 命令会对容器包装一层
  • 通常在基于某个镜像构建我们自己的镜像时,可以先用该镜像创建一个容器,在里面把软件的安装过一遍,数据卷映射规划一遍,最后再编写 Dockerfile,这样思路会更清晰一点

使用 Dockerfile 构建镜像

通常我们将要构建镜像要用的 Dockerfile、配置文件、数据等放在一个文件夹里,然后在这个文件夹中运行 docker build 命令。

1# 使用默认 Dockerfile, 比如构建 api 容器, -t 设置镜像标签,这里 api 镜像的标签为 api:v1, 最后要加一个路径,(.)表示当前路径
2docker buil -t api:v1 .
3
4# 使用 Dockerfile-api 构建 api 镜像,-f 指定 Dockerfile,-t 设置标签
5docker build -f  Dockerfile-api -t api:v1 .

Dockerfile 构建镜像的流程

image.png

使用镜像

1# 运行容器,-i 交互运行 -t tty终端 --name 设置容器启动的名字,api:v1指定使用的镜像,"/bin/bash" 为非必须参数
2docker run -itd --name my-api api:v1 /bin/bash


博客没有评论系统,可以通过 邮件 评论和交流。 Top↑