Dockerfile是什么
1,什么是Dockerfile
Dockerfile 相当于是⼀个脚本,不过是可以在这个脚本⽂件⾥使⽤⼀些特定的命令(关键字)完成⼀些⾃动化任务的脚本。如果不⽤Dockerfile创建⼀个⾃定义的镜像,⼤概步骤是:
* ⼀个基础镜像
* docker yun ⽣成⼀个容器container
* 进⼊container
* 做各种操作和配置
* docker tag, docker push 提交成⼀个新的docker container
如果把以上步骤都写进⼀个⽂件⾥,然后让docker⾃⼰去实现就显得⽅便很多,所以就有了dockerfile.
2,准则和命令
* Dockerfile"Dockerfile"这个⽂件名是固定的,⼤⼩写敏感,⾸字母⼤写
* 尽量把Dockerfile放在⼀个空⽬录中,以防⼲扰
* 每个container尽量只实现⼀个功能,不适合集成太多
* Dockerfile⾥的命令越少越好
常⽤命令
* **FROM** 指定基础镜像⽂件
* **MAINTAINER**  维护者的信息
* **RUN**  执⾏命令
* **EXPOSE**  对外暴露的端⼝
* **ADD**  复制⽂件到容器中,若是压缩⽂件会⾃动解压
* **COPY**  复制⽂件到容器中,若是压缩⽂件不会⾃动解压
* **WORKDIR**  改变⼯作⽬录
* **ENTRYPOINT**  运⾏容器时执⾏的命令(default ⾃启动)
3,举个栗⼦
3.1 准备⽂件
在/Users/forrestzhang/Documents/data/路径下创建⼀个空⽂件夹base,把项⽬需要⽤到的其他⽂件都复制到此⽬录下3.2 编写Dcokerfile
在base⽂件夹⾥新建⼀个Dockerfile⽂件,编写内容如下
Dockerfile
#选择基础镜像
FROM ubuntu:18.04
#author作者
MAINTAINER Forrest
RUN apt-get update -y
RUN apt-get install nginx -y --allow-unauthenticated
RUN apt-get install python3-pip -y
#把⼯程⽂件上传容器
ADD front_end_ /data/
ADD forrest_ /data/
ADD forrest_ci_ /data/
#切换到/Users/forrestzhang/Download/LearnDocker/⼯程⽬录,并安装依赖
WORKDIR /Users/forrestzhang/Download/LearnDocker/
RUN pip3 install -
#复制配置⽂件到容器中
f /etc/nginx/conf.d/
f /etc/nginx/conf.d/
f /etc/nginx/conf.d/
#设置环境变量;作⽤:指定系统语⾔为UTF-8;如果不设置,uwsgi运⾏⽆法处理中⽂语⾔
ENV LC_ALL="zh_CN.utf8"
#容器开放端⼝为8080和8081
EXPOSE 8080 8081
#导⼊容器启动脚本
COPY command.sh /data
update是什么#切换容器⽬录
WORKDIR /data
#指定容器运⾏的启动指令
ENTRYPOINT ["/bin/bash","command.sh"]
因为ENTRYPOINT命令只能执⾏⼀条指令,所以我们可以把想要执⾏的多条指令写进⼀个脚本⽂件⾥⼀起执⾏command.sh
cd /Users/forrestzhang/Download/LearnDocker/
uwsgi --ini uwsgi.ini
nginx -g "daemon off;"
3.3 使⽤Dockerfile⽣成镜像
当所有⽂件都准备好了,并且写好Dockerfile了,我们就可以使⽤它⽣成⼀个镜像
docker image build -t FirstDockerImage ./
3.4 运⾏镜像
docker container run -d --name FirstDockerImage --network=host FirstDockerImage:latest
3.5 使⽤浏览器访问
4,Dockerfile 参考模板
FROM base_image:tag #引⽤基础镜像必要
ARG arg_key[=default_value] #声明变量
ENV env_key=value2 #声明环境变量
构建⼏乎不变的部分,例如整体的⽬录结构,build时依赖的⽂件和⼯具包等
COPY src dst
RUN command1 && command2 ...
WORKDIR /path/to/work/dir # 设置⼯作⽬录
构建较少变动的部分,例如应⽤的依赖的⽂件、依赖的包等
COPY src dst
RUN command3 && command4 ...
构建经常变动的部分,例如应⽤的编译⽣成
COPY src dst
RUN command5 && command6 ...
容器⼊⼝必要
ENTRYPOINT ["/entry.app"] # 指定容器启动时默认执⾏的命令
CMD ["--options"] # 指定容器启动时默认命令的默认参数
CMD与ENTRYPOINT
⼜是⼀对很类似的指令,使⽤时需要注意:
CMD 单独使⽤时,⽤来指定容器启动时默认执⾏的命令
ENTRYPOINT 单独使⽤时,可以完全取代 CMD
ENTRYPOINT 和 CMD ⼀起使⽤时,CMD 变成 ENTRYPOINT 的默认参数
推荐使⽤ ENTRYPOINT/CMD 的 exec 书写形式:即ENTRYPOINT ["entry.app", "arg"],因为 shell 书写形式(ENTRYPOINT entry.app arg)会额外启动 shell 进程;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。