9. docker——DockerFile案例

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值