(五):dockerfile说明和使用

简介

dockerfile是用来构建镜像的一种方法。通过Dockerfile文件,根据对应的规则构建镜像,其中Dockerfile文件记录了镜像构建的所有步骤。

官方文档

https://docs.docker.com/engine/reference/builder/#usage

https://docs.docker.com/develop/develop-images/dockerfile_best-practices/

常用配置说明

## 拉取基础镜像
FROM hub.c.163.com/library/java:8-jdk
## 镜像的作者
MAINTAINER csp@xxx.com

## 挂载目录,通过 VOLUME 指令创建的挂载点,无法指定主机上对应的目录,是自动生成的,可以使用docker volume ls 查看。
VOLUME ["/data1","/data2"]

## 命令执行
RUN ["mkdir", "-p", "/app"]

## 结合maven插件dockerfile-maven-plugin的打包使用
ARG JAR_FILE
ADD ${JAR_FILE} /app/app.jar

#为后面的 RUN, CMD, ENTRYPOINT, ADD 或 COPY 指令设置镜像中的当前工作目录。
#WORKDIR  /usr/local/docker/test

#拷贝当前目录文件到容器/app
#COPY .  /app

#与 COPY 类似,从 build context 复制文件到镜像。不同的是,如果 src 是归档文件(tar, zip, tgz, xz 等),文件会被自动解压到 dest。
#ADD src dest

#设置环境变量,环境变量可被后面的指令使用
ENV EVN_SET_TEST "WELCOME TO DOCKERFILE CONTAINER!'

##################
#  RUN、CDM、ENTRYPOINT 命令都包含两种格式:Shell 格式和 Exec 格式
#  CMD还可以放在ENTRYPOINT后,为其传递参数。
#####  shell 格式:######
##  底层会调用 /bin/sh -c <command>

# 在容器中运行指定的命令
RUN echo $EVN_SET_TEST

# 容器启动命令 只有最后一个生效,CMD 可以被 docker run 之后的参数替换。
#只有最后一个生效
CMD echo "CMD Hello world"

#配置容器启动时运行的命令
ENTRYPOINT echo "ENTRYPOINT Hello, $EVN_SET_TEST"

######  Exec 格式: #####
## 当指令执行时,会直接调用 <command>,不会被 shell 解析
# ENTRYPOINT ["/bin/echo", "Hello, $EVN_SET_TEST"]
# 正确写法应该为:
# ENTRYPOINT ["/bin/sh", "-c", "echo Hello, $EVN_SET_TEST"]

# 为Exec 格式的ENTRYPOINT传递参数,结果输出Hello, $EVN_SET_TEST dockerfile world
# CMD ["dockerfile world"]

#只有最后一个生效
ENTRYPOINT ["java","-jar","/app/app.jar"]





#表示哪个端口提供服务的提示,宿主机如果要访问,需要结合-P参数联合使用。
EXPOSE 8080

创建镜像

  • docker build 命令用于使用 Dockerfile 创建镜像。
[root@node191 docker]# docker build --help

Usage:  docker build [OPTIONS] PATH | URL | -

Build an image from a Dockerfile

Options:
      --add-host list           Add a custom host-to-IP mapping (host:ip)
      --build-arg list          Set build-time variables
      --cache-from strings      Images to consider as cache sources
      --cgroup-parent string    Optional parent cgroup for the container
      --compress                Compress the build context using gzip
      --cpu-period int          Limit the CPU CFS (Completely Fair Scheduler) period
      --cpu-quota int           Limit the CPU CFS (Completely Fair Scheduler) quota
  -c, --cpu-shares int          CPU shares (relative weight)
      --cpuset-cpus string      CPUs in which to allow execution (0-3, 0,1)
      --cpuset-mems string      MEMs in which to allow execution (0-3, 0,1)
      --disable-content-trust   Skip image verification (default true)
  -f, --file string             Name of the Dockerfile (Default is 'PATH/Dockerfile')
      --force-rm                Always remove intermediate containers
      --iidfile string          Write the image ID to the file
      --isolation string        Container isolation technology
      --label list              Set metadata for an image
  -m, --memory bytes            Memory limit
      --memory-swap bytes       Swap limit equal to memory plus swap: '-1' to enable unlimited swap
      --network string          Set the networking mode for the RUN instructions during build (default "default")
      --no-cache                Do not use cache when building the image
      --pull                    Always attempt to pull a newer version of the image
  -q, --quiet                   Suppress the build output and print image ID on success
      --rm                      Remove intermediate containers after a successful build (default true)
      --security-opt strings    Security options
      --shm-size bytes          Size of /dev/shm
  -t, --tag list                Name and optionally a tag in the 'name:tag' format
      --target string           Set the target build stage to build.
      --ulimit ulimit           Ulimit options (default [])
docker build -t hub.c.163.com/muxiyue/logstash:latest .
## 语法
docker build [OPTIONS] PATH | URL | -

## OPTIONS说明:

--build-arg=[] :设置镜像创建时的变量;

--cpu-shares :设置 cpu 使用权重;

--cpu-period :限制 CPU CFS周期;

--cpu-quota :限制 CPU CFS配额;

--cpuset-cpus :指定使用的CPU id;

--cpuset-mems :指定使用的内存 id;

--disable-content-trust :忽略校验,默认开启;

-f :指定要使用的Dockerfile路径;

--force-rm :设置镜像过程中删除中间容器;

--isolation :使用容器隔离技术;

--label=[] :设置镜像使用的元数据;

-m :设置内存最大值;

--memory-swap :设置Swap的最大值为内存+swap,"-1"表示不限swap;

--no-cache :创建镜像的过程不使用缓存;

--pull :尝试去更新镜像的新版本;

--quiet, -q :安静模式,成功后只输出镜像 ID;

--rm :设置镜像成功后删除中间容器;

--shm-size :设置/dev/shm的大小,默认值是64M;

--ulimit :Ulimit配置。

--tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。

--network: 默认 default。在构建期间设置RUN指令的网络模式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值