Dockerfile详解
1.FROM:引入和开始
#从头制作baseImage
FROM scratch
#使用已有的baseImage
FROM centos
#指定使用的版本
FROM ubuntu:14.04
2.LABEL:定义一些说明信息
LABEL maintainer=885599342@qq.com
LABEL version=”1.0”
LABEL description=”xxx”
3.RUN:执行命令,每执行一条RUN,多一个分层,一般用&&合并语句,反斜杠换行
RUN yum -y update && yum -y install lrzsz \
net-tools
RUN apt-get -y update && apt-get -y install lrzsz\
net-tools
RUN /bin/bash -c ‘source $HOME/.bashrc;echo $HOME’
4.WORKDIR:进入或创建目录,尽量不要使用相对路径
#进入/root目录
WORKDIR /root
#如果没有会自动创建
WORKDIR /test
WORKDIR demo
#输出:/test/demo
RUN pwd
5.ADD和COPY:将本地的文件,添加到image里
#将hello添加到根目录下
ADD hello /
#将tar包直接解压到根目录
ADD test.tar.gz /
#最终hello应该在 /root/test/hello
WORKDIR /root
COPY hello test/
6.ENV:增加Dockerfile的可读性
#设置常量
ENV MYSQL_MAJOR 5.5
#使用常量
$MYSQL_MAJOR
RUN apt-get -y install mysql-server=”${MYSQL_VERSION}”
CMD和ENTRYPOINT
#shell格式
RUN apt-get -y install lrzsz
CMD echo “hello docker”
ENTRYPOINT echo “hello docker”
#exec格式
RUN [“apt-get”,”-y”,”install”,”lrzsz”]
CMD [“/bin/echo”,”hello docker”]
ENTRYPOINT [“/bin/echo”,”hello docker”]
ENTRYPOINT使用的比CMD多一些
ENTRYPOINT:设置容器启动时运行的命令,一定会执行,不会被忽略
1.编写Dockerfile


2.构建image
![]()
![]()
3.分别运行两个image看效果

4.修改Dockerfile如下

5.重新构建和运行
![]()
![]()
CMD:设置容器启动后默认执行的参数和命令,若docker指定了其他命令,CMD可以被忽略,CMD若指定多个,只运行最后一个
1.编写file

2.构建和运行
![]()
![]()
CMD和ENTRYPOINT对比
1.再构建一个ENTRYPOINT

2.构建
![]()
3.运行CMD的image
![]()
4.运行ENTRYPOINT的image
![]()
CMD命令可能被覆盖,ENTRYPOINT命令一定会执行
分享docker image
分享的image一定要以自己docker用户名开头,例如:zhangsan/centos
1.登录

2.上传自己得image

3.下载自己的image

分享自己得Dockerfile
分享image不太安全,一般分享Dockerfile
1.点击

2.与gitHub关联,链接一个账户

3.link到github

4.点击

搭建私有的docker registry
1.docker hub里搜

2.开启另一台虚拟机,执行安装运行registry
![]()

3.在之前机器安装telnet,测试连通信
![]()

4.构建image,IP是仓库机器的IP
![]()
5.直接push会报错

6.编写json文件,目录和文件名如下,IP是仓库机器的IP

7.修改文件,添加一行即可
![]()

8.重启docker
![]()
9.查看docker私有仓库的内容,此时没有东西,路径如下

10.上传自己的image到docker私有仓库
![]()
11.再次查看私有仓库

12.删掉本地的image
![]()
13.从私有仓库下东西
![]()
Dockerfile案例
用py写一个web应用
1.编写py文件

2.安装wget
![]()
3.安装pip,直接复制运行.txt中的命令

4.安装
![]()
5.用pip安装flask
![]()
6.搭建web服务成功

7.编写Dockerfile

8.构建image
![]()
9.运行
本文深入解析Dockerfile指令,包括FROM、LABEL、RUN、WORKDIR、ADD、COPY、ENV、CMD和ENTRYPOINT的使用方法。通过实例展示如何构建、运行Docker镜像,并比较CMD与ENTRYPOINT的区别。此外,还介绍了如何搭建私有Docker仓库,分享Docker镜像及Dockerfile的最佳实践。
1323





