dockerfile

Dockerfile

docker镜像分层

docker的最小镜像

[root@docker01 ~]# docker pull hello-world

在这里插入图片描述
Dockerfile的组成:

  1. FROM : scratch(抓、挠)

2)COPY: hello /

  1. CMD: ["/hello"]

base镜像

Centos:7 镜像的dockerfile

FROM scratch
ADD centos-7-x86_64-docker.tar.xz / 

LABEL \ 
org.label-schema.schema-version="1.0" \ 
org.label-schema.name="CentOS Base Image" \ 
org.label-schema.vendor="CentOS" \ 
org.label-schema.license="GPLv2" \ 
org.label-schema.build-date="20200504" \
org.opencontainers.image.title="CentOS Base Image" \ org.opencontainers.image.vendor="CentOS" \ 
org.opencontainers.image.licenses="GPL-2.0-only" \ org.opencontainers.image.created="2020-05-04 00:00:00+01:00" 

CMD ["/bin/bash"]

镜像的分层

1)dockerfile的书写格式为:Dockerfile

  1. FROM: 构建镜像有两种方式,一种是scratch(从零构建),另一种可以基于某个镜像开始构建。

3)镜像所运行的操作(用户所期望的)。
在这里插入图片描述
//根据Dockerfile文件制作镜像。

[root@docker01 ~]# docker build -t centos7-vim-net-tools:12-11 .

在这里插入图片描述
Dockerfile镜像分层总结:

镜像时容器的基石,容器是镜像运行后的实例。当镜像运行为容器之
后,对镜像的所有数据仅有只读权限,如果需要对镜像源文件进行修改或
删除操作,此时是在容器层(可写层)进行的,用到了COW(copy on
write)写时复制机制。

Docker镜像的缓存特性

创建一个新的dockerfile文件
在这里插入图片描述

[root@docker01 ~]# docker build -t new-centos .

1) 如果在相同的层,有用到相同的镜像,可以不必再去下载,直接使用缓
存。

创建一个新的Dockerfile
在这里插入图片描述
2) 即使镜像层里的操作一样,也必须是在同一层才可以使用dockerfile的
缓存特性

如果制作镜像过程中,不想使用缓存,可以加–no-cache选项。

3) 如果前边的层发生改变,即使后边的层操作和顺序一样,也不能使用缓
存特性

Dockerfile常用指令

*1) FROM: 构建镜像基于哪个镜像
例如: FROM centos:7

2) MAINTAINER: 镜像维护者姓名或邮箱地址
例如: MAINTAINER adam

*3) RUN: 构建镜像时运行的shell命令
例如:
RUN [“yum”,“install”,“httpd”]
RUN yum -y install httpd
~]# docker build -t new-centos .

*4) CMD: 运行容器时执行的shell命令
例如:
CMD ["/bin/bash"]

*5) EXPOSE声明容器的服务端口
例如: EXPOSE 80 443

*6) ENV: 设置容器环境变量
例如:
ENV MYSQL_ROOT_PASSWORD 123.com

*7) ADD: 拷贝文件或目录到镜像,如果是URL或压缩包会自动下载或自动
解压
ADD <源文件>… <目标目录>
ADD [“源文件”…“目标目录”]

*8) COPY: 拷贝文件或目录到镜像容器内,跟ADD类似,但不具备自动下载或解压功能

9) ENTRYPOINT: 运行容器时执行的shell命令
例如:
ENTRYPOINT ["/bin/bash","-c",“command”]
ENTRYPOINT /bin/bash -c ‘command’

*10) VOLUME: 指定容器挂载点到宿主机自动生成的目录或其他容器
例如:
VOLUME ["/var/lib/mysql"]

11) USER: 为RUN、CMD、和ENTRYPOINT执行命令指定运行用户

*12)WORKDIR: 为RUN、CMD、ENTRYPOINT、COPY和ADD设置工作目录,意思为切换目录
例如:
WORKDIR: /var/lib/mysql

13)HEALTHCHECK: 健康检查

14) ARG: 构建时指定的一些参数
例如:
FROM centos:7
ARG user
USER $user

注意:
1、RUN在building时运行,可以写多条。其实RUN是有条件限制的()。
2、CMD和ENTRYPOINT在运行container时运行,只能写一条,如果写多条,最后一条生效
3、CMD在run时可以被COMMAND覆盖,ENTRYPOINT不会被COMMAND覆盖,但可以指定–entrypoint覆盖。
4、如果在Dockerfile里需要往镜像内导入文件,则,此文件必须在dockerfile所在目录或子目录下。
5、一个目录下,只能有一个Dockerfile文件,并且名称的大小写严格按照要求: Dockerfile.

小实验
写一个dockerfile,基于centos:7 镜像,部署安装NGINX服务。

FROM centos:7 
RUN yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel 
COPY nginx-1.6.0.tar.gz / 
RUN tar -zxf nginx-1.6.0.tar.gz -C /usr/src 
RUN useradd -M -s /sbin/nologin nginx 
WORKDIR /usr/src/nginx-1.6.0 RUN ./configure --prefix=/usr/local/nginx --user=nginx -- group=nginx 
RUN make && make install 
RUN ln -s /usr/local/nginx/sbin/* /usr/local/sbin/ 
RUN nginx -t 
RUN nginx 
EXPOSE 80

// 可以通过docker build 命令将上述Dockerfile文件制作成镜像

[root@docker01 ~]# docker build -t webapp .

注意,此工作目录和dockerfile是在同一个目录中。

//如果想要保证容器运行之后,nginx服务就直接开启,不必手动开启,我们可以在命令最后加上: nginx -g "daemon off;"选项

[root@docker01 ~]# docker run -itd --name testweb webapp:latest nginx -g "daemon off;"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值