Dockerfile的编写
bash
1、访问容器中的服务
1、端口映射
2、使用IP
# 构建镜像
1、Dockerfile
规范:
Dockerfile命名必须D大写其他必须小写。
Dockerfile中所有的指令必须大写
构建镜像的命令
docker build
参数:
-t : 指定构建镜像的名称
1、FROM
指定基础镜像。在Dockerfile中唯一一个必须项。
2、RUN
在构建镜像时,运行指定的命令。
注意:运行的命令必须是基础镜像中包含的命令;执行的结果直接保存在镜像中。
3、ADD
将指定的文件上传到镜像中。
4、COPY
将指定的文件复制到镜像中。
COPY 和 ADD 之间的区别?
1、ADD支持自动解压功能(只支持tar包解压),COPY不支持
2、ADD支持通过URL下载文件(不支持自动解压),COPY不支持
5、EXPOSE
指定容器需要向外暴露的端口
如果没有指定任何端口,可以使用-p做端口映射,但是不能使用-P做端口映射。
6、VOLUME
指定挂在卷,指定的挂载卷并不是设置了就挂载到指定的目录。当容器启动的时候,如果添加了-v参数,以-v参数为准,如果没有,则在宿主主机上的/var/lib/docker/volumes,随机映射。
7、CMD
指定一个容器的启动命令。全局只能有一个,如果有多个,最后一个生效。
exec格式
["nginx", "-g", "daemon off;"]
shell格式
nginx -g 'daemon off;'
8、WORKDIR
设置工作目录。运行应用程序时的启始目录(默认是根目录),可以这样理解,执行命令时相对路径的原始目录。
9、ARG
设置运行时变量。
案例:要求写一个Dockerfile,实现每次安装的软件都是自定义。
[root@kubernetes docker]# docker build --build-arg=PACKAGE=zsh -t nginx:v15 .
10、ONBUILD
触发器,ONBUILD后面跟指令,在构建是不会执行,当当前镜像作为基础镜像构建时执行。
11、ENV
设置一个环境变量。
12、MAINTAINER
设置维护者信息。
13、ENTRYPOINT
设置启动命令。
### ENTRYPOINT 和 CMD 的区别
1、ENTRYPOINT 作为启动命令时无法被docker run覆盖(如果docker run指定命令,会被认为成ENTRYPOINT的参数)。
2、如果ENTRYPOINT和CMD指令同时存在,则CMD的相关内容会被设置成ENTRYPOINT的参数
# nginx中
server {
server_name _;
listen 80;
root /usr/share/nginx/html;
location / {
index index.php ;
}
location ~* \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}