Dockerfile
Dockerfile是由一行行指令语句构成的一个创建docker镜像的配置文件。Dockerfile是由三个部分组成:基础镜像(必须的)、运行指令、容器默认执行命令。
1、FROM
FROM 指定基础镜像,目的是为了给构建镜像提供一个基础环境。
2、MAINTAINER
指定维护者信息
3、RUN
基于FROM指定的docker镜像运行一个指令,将结果反映到新生成的镜像。RUN指令后面执行的命令必须是镜像中已经存在了的命令。
4、CMD
指定容器运行的默认命令
nginx -g "daemon off;"
5、昨天的作业
使用dockerfile创建一个nmp
centos => 下载源码包 => 解决依赖 => ./configure => make => make install
6、ADD和COPY
ADD : 将本地文件添加到镜像
ADD支持自动解压,但是仅仅支持解压tar包
ADD支持远程下载,但是不会解压下载内容
COPY : 将文件复制到镜像
7、ENV
设置一个容器的环境变量
8、EXPOSE
指定容器需要向外界暴露的端口,实际上没有暴露,只有指定了EXPOSE才能够使用-P, 可以指定多个端口
9、ARG
指定运行时参数,用于构建docker镜像时传入参数 --build-arg=USER=root
10、VOLUME
设置需要挂载的目录,没有实现挂载。
11、WORKDIR
设置工作目录
1、程序运行的开始目录
2、进入容器的最初目录
12、ONBUILD
ONBUILD 后面跟的是Dockerfile指令不是linux命令
构建触发器 : 当当前镜像用作基础镜像时触发
13、案例
[root@Centos7 nginx]# docker network create lnmp
c7ad0d637a1455ebd5ea9d08e23f5d13971a0172a910ddc8bd4649a68ee27fc4
# 创建nginx
[root@Centos7 nginx]# vim Dockerfile
FROM nginx
RUN useradd www
ADD default.conf /etc/nginx/conf.d/
ADD nginx.conf /etc/nginx
EXPOSE 80
WORKDIR /root
CMD nginx -g "daemon off;"
## 修改nginx.conf
user www;
## 修改default.conf
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.php index.html index.htm;
}
location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
include fastcgi_params;
}
}
# 创建PHP
[root@Centos7 php]# vim Dockerfile
FROM centos:7
RUN yum install php php-devel php-fpm -y
RUN useradd www
ADD www.conf /etc/php-fpm.d/
EXPOSE 9000
CMD ["php-fpm"]
## 修改www.conf
listen = 9000
;listen.allowed_clients = 127.0.0.1
user = www
group = www
request_terminate_timeout = 0
# 创建mysql
docker rm -f mysql && docker run -d --name mysql --network=lnmp -e MYSQL_ROOT_PASSWORD=123 mysql:5.7
注:
dockerfile执行是按照从上到下
如果构建的上一个镜像执行过此步骤,下一个则可以使用缓存(Using cache)
1、从互联网下载内容不会使用缓存
2、添加文件的内容(ADD、COPY)
如果上一步修改过,则下面的dockerfile步骤全部不使用缓存。