1. Base镜像(scratch)
Docker Hub 中 99% 的镜像都是通过在 base 镜像中安装和配置需要的软件构建出来的
2. 自定义镜像mycentos
从dockerHub上拉取的centOs是不带vim与ifconfig的,我们可以自定义一个centOs,让其默认就只带这两个指令
2.1 编写
在myDocker目录下,新建一个DockerFile文件,内容如下
FROM centos
# 指定作者
MAINTAINER zdm<zoudmbean@163.com>
# 指定环境变量路径
ENV MYPATH /usr/local
WORKDIR $MYPATH
# 因为默认的centOs不带vim编辑器,所以需要下载安装vim
RUN yum -y install vim
# 安装ifconfig
RUN yum -y install net-tools
# 暴露端口80
EXPOSE 80
CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash
2.2 构建(build)
语法格式:
docker build -t 新镜像名字:TAG .
注意:. 表示当前目录
例如:
# -f /mydocker/DockerFile2 指定Dockerfile文件
docker build -f /mydocker/DockerFile2 -t mycentos:1.3 .
2.3 运行
docker run -it mycentos:1.3
发现,默认登录目录不再是根目录,而是我们指定的目录
执行指令vim和ifconfig,都可以执行,自定义成功!
3. CMD-ENTRYPOINT命令案例
Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换
3.1 CMD命令
正确的运行Tomcat的命令方式如下:
docker run -it -p 8888:8080 tomcat
是因为在Tomcat的DockerFile的文件中最后面的CMD指定了启动Tomcat的命令,可以去官网查看其源码,
但是,现在这样运行
docker run -it -p 8888:8080 tomcat ls -l
Tomcat启动不起来,只能显示Tomcat的根目录下的文件列表,这是因为CMD命令的覆盖作用,启动Tomcat的命令被ls -l 命令给覆盖了。
使用CMD命令做一个查看ip的镜像:
1)DockerFile文件DockerFile3
FROM centos
RUN yum install -y curl
CMD ["curl","-s","http://www.baidu.com"]
2)build文件
docker build -f ./DockerFile3 -t myip .
3)run运行
docker run -it myip
如果想在后面加参数,比方说想打印出请求头信息,如图:
发现运行报错,这是因为-i覆盖了原来的curl命令。
3.2 ENTRYPOINT命令
docker run 之后的参数会被当做参数传递给 ENTRYPOINT,之后形成新的命令组合
使用方式用于替换CMD,如下:
FROM centos
RUN yum install -y curl
ENTRYPOINT [ "curl", "-s", "http://ip.cn" ]
使用ENTRYPOINT之后,使用docker run命令运行容器的时候,就可以无惧后面跟参数了。
3.3 ONBUILD命令案例
1)新建父容器
1.1 新建DockerFile文件
FROM centos
CMD ls -l
ONBUILD RUN echo "father on build ********************************************************"
1.2 构建
docker build -f DockerFile4 -t myrun .
2)以父容器为新建子容器
2.1 新建DockerFile
FROM myrun
CMD ls -l
2.2 build
docker build -f DockerFile5 -t myrun1 .
2.3 执行镜像
4. 自定义的tomcat
4.1 操作步骤
4.1.1 构建镜像上下文路径
也就是创建目录
mkdir -p /zoudm/mydockerfile/tomcat9
4.1.2 在Tomcat9目录下新建一个txt文件
目的是为了演示copy
touch c.txt
4.1.3 将jdk和tomcat安装的压缩包拷贝进tomcat9目录
演示add命令,该命令带有拷贝与解压缩的功能
4.1.4 编写Dockerfile文件
FROM centos
MAINTAINER zoudm<zoudmbean@163.com>
#把宿主机当前上下文的c.txt拷贝到容器/usr/local/路径下
COPY c.txt /usr/local/cincontainer.txt
#把java与tomcat添加到容器中
ADD jdk-8u291-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.45-deployer.tar.gz /usr/local/
#安装vim编辑器
RUN yum -y install vim
#设置工作访问时候的WORKDIR路径,登录落脚点
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置java与tomcat环境变量
ENV JAVA_HOME /usr/local/jdk-8u291-linux-x64
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.45-deployer
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.45-deployer
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
# 容器运行时监听的端口
EXPOSE 8080
#启动时运行tomcat
# ENTRYPOINT ["/usr/local/apache-tomcat-9.0.45-deployer/bin/startup.sh" ]
# CMD ["/usr/local/apache-tomcat-9.0.45-deployer/bin/catalina.sh","run"]
CMD /usr/local/apache-tomcat-9.0.45-deployer/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.45-deployer/bin/logs/catalina.out
4.1.5 构建
docker build -t mytomcat9 .
注意:这里没有用-f参数命令是因为在当前目录下dockerfile文件的文件名为DockerFile,因此docker可以自动识别,不需要指定文件目录
查看镜像,如图:
4.1.6 运行run
docker run -d -p 9080:8080 --name myt9 -v /zoudm/mydockerfile/tomcat9/test:/usr/local/apache-tomcat-9.0.45-deployer/webapps/test -v /zoudm/mydockerfile/tomcat9/tomcat9logs/:/usr/local/apache-tomcat-9.0.45-deployer/logs --privileged=true mytomcat9