Docker学习笔记--------2.Dockerfile的指令
文章目录
- 1.Dockerfile的指令
- 1.FROM
- 2.MAINTAINER
- 3.RUN
- 3.1 方式一:RUN (shell模式)
- 3.3 方式二:RUN [] (exec模式)
- 4.EXPOSE
- 5.CMD和ENTRYPOINT
- 6.ADD和COPY
- 7.VOLUME
- 8.WORKDIR ENV 和USER
- 9.ONBUILD
- ENV:在使用Dockerfile的过程中创建环境变量
- 使用docker-compose.yml也可以设置环境变量
1.Dockerfile的指令
1.FROM
格式1:
FROM <image> #
格式2:
FROM <image>:<tag>
注意:
1.必须是已存在的镜像
2.必须是第一个非注释的指令
2.MAINTAINER
1.指定镜像的作者信息,包含镜像的所有者和联系信息
2.如:
MAINTAINER ywk "yangwenkai94@163.com"
3.RUN
3.1 方式一:RUN (shell模式)
3.3 方式二:RUN [] (exec模式)
4.EXPOSE
此处暴露的端口,docker并不会自动配置,还是需要run的时候手动指定
5.CMD和ENTRYPOINT
CMD指令
1.CMD 是在容器运行时运行的,如果run是指定了容器执行后的指令,则cmd的指令不会执行
CMD ["executable","param1","parma2"] # exec模式
CMD command parma1 param2 # shell模式
CMD ["parma1","parma2"] # 作为ENTRYPOINT指令的默认参数
2.如
---1. vi Dockerfile
# first dockerfile content
FROM ubuntu:16.04
MAINTAINER ywk "yangwenkai94@163.com"
RUN apt-get update && apt-get install nginx
EXPOSE 80
CMD ["/user/sbin/nginx","-g","daemon off"]
---2. docker build -t="ywk/test"
---3.docker run -p 80 --name cmd_test -d ywk/test
---4.docker top ywk/test # 查看docker容器运行了哪些服务
ENTRYPOINT指令
ENTRYPOINT ["executable","param1","parma2"] # exec模式
ENTRYPOINT command parma1 param2 # shell模式
即使docker run 指定了命令,如
docker run -p 80 --name cmd_test -d ywk/test /bin/bash
/bin/bash也不会执行
6.ADD和COPY
ADD <src> <dest>
ADD ['<src>"...."<dest>"](适用于文件路径中有空格的情况)
COPY <src> <dest>
COPY ['<src>"...."<dest>"](适用于文件路径中有空格的情况)
注意1:都是将文件复制到docker构建的镜像中
注意2:src:必须是构建镜像的相对地址
dest:镜像中的绝对地址
注意3:
ADD:包含类似tar的解压功能
如果是单纯的复制文件,Docker推荐使用COPY
如:
# first dockerfile content
FROM ubuntu:16.04
MAINTAINER ywk "yangwenkai94@163.com"
RUN apt-get update && apt-get install -y nginx
COPY index.html /usr/share/nginx/html/
EXPOSE 80
CMD ["/user/sbin/nginx","-g","daemon off"]
--------------------------------------------------------
docker build......
-------------------------------------------------------
docker run -d -p 80 --name copy_test ywk/test3
--------------------------------------------------------
访问nginx
cul http://127.0.0.1:49168
结果:nginx的页面被替换
7.VOLUME
用来基于镜像文件的卷,实现数据持久化
点击这里查看使用方法:Docker的数据卷容器
8.WORKDIR ENV 和USER
WORKDIR /path/to/workdir # 容器内部的工作目录
ENV <key><value> # 设置环境变量
ENV <key>=<value>
USER daemon # 指定镜像以 何用户的身份 来运行
如 USER nginx
如果不指定用户,则以root用户的方式运行
9.ONBUILD
ONBUILD [INSTRUCTION]
镜像触发器
当 这个镜像(有ONBUILD指令) 被其他镜像作为基础镜像时执行
会在构建过程中插入指令
如:
# first dockerfile content
FROM ubuntu:16.04
MAINTAINER ywk "yangwenkai94@163.com"
RUN apt-get update && apt-get install -y nginx
ONBUILD COPY index.html /usr/share/nginx/html/ # 修改了这里
EXPOSE 80
CMD ["/user/sbin/nginx","-g","daemon off"]
--------------------------------------------------------
docker build......
-------------------------------------------------------
docker run -d -p 80 --name copy_test ywk/test4
--------------------------------------------------------
访问nginx
cul http://127.0.0.1:49168
结果:nginx的页面没有被替换
-----------------------------------------------------------
构建第二个镜像,构建后页面会被替换
FROM
xxx ywk/test4
xxx
xxx
10. ENV:在使用Dockerfile的过程中创建环境变量
ENV <key><value>
ENV CONFIG /usr/local/config
编写Dockerfile的时候使用,推荐使用这种方式
使用docker-compose.yml也可以设置环境变量
- 区别1:docker-compose.yml是在docker run的时候添加的环境变量
区别2:docker-compose.yml使用environment或者使用.env文件,如下:
environment:
PROJECT_HOST: '${HOST_IP}:8001'
MYSQL_DATABASE: '${MYSQL_DATABASE}'
MYSQL_PASSWORD: '${MYSQL_ROOT_PASSWORD}'
还没有评论,来说两句吧...