05 Dockerfile

构建镜像,用来构建镜像的构建文件。命令脚本

01 基本规则

1 格式

FROM centos

VOLUME ["volume1", "volume2"]

CMD echo "-----end-----"
CMD /bin/bash
  • # 为注释
  • 指令大写,内容小写
  • ,从上向下执行逐行执行,每个指令都会创建一个新的镜像层,并提交
  • 每个dockerfile的第一行非注释指令,必须是“FROM”指令,用于作为镜像文件构建过程中,指定基准镜像,后续的指令运行于此基准镜像所提供的环境种
  • 基准镜像可以是任何可用的镜像文件,默认情况下,docker build会在docker主机(本地)上查找指定的镜像文件,当本地不存在时,从远端检索并pull镜像文件。

构建步骤:

  • 编写Dockerfile文件
  • docker build -f Dockerfile文件 -t 镜像名字
  • docker run
  • docker push到仓库

02 核心指令

docker build -f dockerfile文件 -t 镜像名字 .

Dockerfile文件当前目录下执行

特别注意:最后的.

生成镜像并打tag

docker build . -t docker.io/lynntian/nginx_docker_file:0.0.1
FROM          # 基础镜像,一切从这里开始
MAINTAINER    # 谁写的,姓名+邮箱
RUN           # 镜像构建时需要运行的命令
ADD           # 添加,一般是压缩包,例如tomcat的压缩包,压缩包会自动解压
WORKDIR       # 镜像的工作目录
VOLUME        # 挂载的目录
EXPOSE        # 暴漏端口
CMD           # 指定容器启动的时候要运行的命令,只有最后一个生效,可被替代
ENTRYPOINT。  # 指定容器启动的时候要运行的命令,追加命令
ONBUILD。     # 构建一个被继承DockerFile,会触发
COPY          # 将文件复制到镜像中,一般是文件
ENV           # 环境命令

1 USER/WORKDIR

语法:

Dockerfile

FROM docker.io/library/nginx:latest
USER root
WORKDIR /usr/share/nginx/html

补充:

USER 跟的是容器的用户

WORKDIR 是进入容器的默认目录

whoami查看用户

2 ADD/EXPOSE

语法:

Dockerfile

FROM docker.io/library/nginx:latest
ADD index.html /usr/share/nginx/html/index.html
EXPOSE 80

补充:

ADD相当于copy,把指定的文件复制到容器的制定目录下

EXPOSE指定对外暴露的端口

3 RUN/ENV

语法:

Dockerfile

FROM centos:7

ENV VER  9.11.4
RUN yum install bind-$VER -y
docekr build . -t docker.io/lynntian/bind-docker:0.0.1
 cat /etc/redhat-release printenv

补充:

ENV环境变量

RUN构建镜像时,执行的命令

4 CMD/ENTRYPOINT

启动容器时,默认执行的命令是 /entrypoint.sh命令

CMD语法:

Dockerfile

FROM centos:7RUN yum install httpd -yCMD ["httpd", "-D", "FOREGROUND"]

补充:

CMD容器启动时执行的命令

ENTRYPOINT语法:

Dockerfile

FROM centos:7RUN yum install epel-release -q -y && yum install nginx -yADD entrypoint.sh /entrypoint.shENTRYPOINT /entrypoint.sh

记得给entrypoint.sh加执行权限

entrypoint.sh

#!/bin/basj/sbin/nginx -g "daemon off;"
chmod +x entrypoint.sh

补充:

ENTRYPOINT指定容器启动时,执行的脚本

例子:

03 数据卷容器

--volumes-from

多个容器共享数据(备份),只要有一个容器存在,数据就不会丢失

docker run -it --name 容器名字 --volumes-from 要挂载的容器 镜像名 /bin/bash

实现两个容器中的数据共享同步

注意:

数据卷容器的生命周期,一直持续到没有容器使用为止。但是持久化到了本地,本地数据不会删除。

镜像名放在要挂载的容器之后

![image-20211018144017218](/Users/user/Library/Application Support/typora-user-images/image-20211018144017218.png)

posted @ 2021-10-18 16:46  tianzhh_lynn  阅读(25)  评论(0编辑  收藏  举报