linux12 - dockerfile02 --> 实战构建centostomcat

Posted FikL-09-19

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux12 - dockerfile02 --> 实战构建centostomcat相关的知识,希望对你有一定的参考价值。

一、Dockerfile的使用

dockerfile是用来构建docker镜像的文件==>命令参数 脚本

1、构建步骤:

# 1、编写一个dockerfile文件
# 2、docker build 构 建成一个镜像
# 3、docker run 运行镜像
# 4、docker push 发布镜像(DockerHub、阿里云镜像仓库)
1、进入官方查看别人写的docker镜像

在这里插入图片描述
在这里插入图片描述

2.基础知识
每个保留关键字(指令)都必须是大写字母
执行从上到下顺序执行
#表示注释
每一个指令都会创建提交一个新的镜像层,并提交!

在这里插入图片描述

dockerfile是面向开发的,我们以后要发布项目,做镜像,就需要编写dockerfile文件,这个文件十分简单!
docker镜像逐渐成为了企业交付的标准,必须掌握 !

步骤:开发、部署、运维,缺一不可!

# 1、dockerfile:构建文件,定义了一切步骤,相当于源代码
# 2、dockerimages:通过dockerfile构建生成的镜像,最终发布和运行的产品
# 3、docker容器:容器就是镜像运行起来提供服务的

二、dockerfile指令说明

在这里插入图片描述

# 1.FROM        #基础镜像,一切从这里构建 
# 2.MAINTAINER  #镜像是谁写的,姓名+邮箱
# 3.RUN         #镜像构建的时候需要运行的命令
# 4.ADD         #步骤,比如tomcat镜像,这个tomcat压缩包就是添加内容
# 5.WORKDIR     #镜像的工作目录
# 6.VOLUME      #挂载的目录
# 7.EXPOSE      #暴露端口配置
# 8.CMD         #指定容器启动的时候要运行的命令,只有最后一个会生效,可被替代
# 9.ENTRYPOINT  #指定容器启动的时候要运行的命令,可以追加命令
# 10.ONBUILD    #当构建一个被继承dockerfile,这个时候就会运行这个指令,触发指令
# 11.COPY       #类似ADD,将我们的文件拷贝到镜像中
# 12.ENV        #构建的时候设置环境变量

3.实战测试

Docker Hub 99%镜像都是从这个基础镜像过来的FROM scrath 然后配置需要的软件和配置来进行的构建

在这里插入图片描述

1、构建自己的centos

#1.编写dockerfile文件
[root@docter ~]# mkdir dockerfile
[root@docker dockerfile]# vim mydockerfile-centos
FROM centos
MAINTAINER mming<1715554782@qq.com>

ENV MYPAPH /usr/local/
WORKDIR $MYPAPH
RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo $MYPATH
CMD echo "----end ----"
CMD /bin/bash

#2.通过文件构建镜像
# 命令  docker build -f dockerfile文件路径 -t 镜像名:[ tag]
[root@docter dockerfile]# docker build -f mydockerfile-centos -t mycentos:0.1 .
...
Successfully built 5f2c746dd228
Successfully tagged mycentos:0.1

#3.查看自己创建的镜像
[root@docter dockerfile]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
mycentos     0.1       5f2c746dd228   36 seconds ago   295MB
centos       latest    300e315adb2f   6 months ago     209MB

#4.运行自己构建的镜像
[root@docter dockerfile]# docker run -it mycentos:0.1
[root@18c0b2021b90 local]#  pwd   #自动进入工作目录
/usr/local
[root@18c0b2021b90 local]# ifconfig #自己增加的命令可以使用
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 8  bytes 656 (656.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
# 5、镜像历史
docker history 镜像ID
[root@docter dockerfile]# docker history 5f2c746dd228
IMAGE          CREATED         CREATED BY                                      SIZE      COMMENT
5f2c746dd228   3 minutes ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "/bin…   0B        
426dfef72aed   3 minutes ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B        
8b8d3a5d45a5   3 minutes ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B        
9bd6fc6cc33c   3 minutes ago   /bin/sh -c #(nop)  EXPOSE 80                    0B        
cb1cbc6ca58a   3 minutes ago   /bin/sh -c yum -y install net-tools             25MB      
e6172d27435d   3 minutes ago   /bin/sh -c yum -y install vim                   60.7MB    
a866bde5a95c   3 minutes ago   /bin/sh -c #(nop) WORKDIR /usr/local/           0B        
488d69154f12   3 minutes ago   /bin/sh -c #(nop)  ENV MYPAPH=/usr/local/       0B        
77b1bf749a64   3 minutes ago   /bin/sh -c #(nop)  MAINTAINER mming<17155547…   0B        
300e315adb2f   6 months ago    /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B        
<missing>      6 months ago    /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B        
<missing>      6 months ago    /bin/sh -c #(nop) ADD file:bd7a2aed6ede423b7…   209MB   

4.CMD和ENIRYPOINT的区别

CMD # 指定容器启动的时候要运行的命令,只有最后一个会 生效,可被替代

ENTRYPOINT # 指定容器启动的时候要运行的命令,可以追加命令

#1.测试CMD
[root@docker dockerfile]# vim dockerfile-cmd-test  #编写dockerfile文件
FROM centos
CMD ["ls","-a"]
[root@docker dockerfile]# docker build -f dockerfile-cmd-test  -t cmdtest .  #构建镜像 
...
Successfully built 3749d2f86a05  #镜像ID
Successfully tagged cmdtest:latest
[root@docter dockerfile]# docker run  3749d2f86a05  #运行构建的镜像  (ls -a命令生效)
...
run
sbin
srv
sys
tmp
usr
var
#2.想追加一个命令l[ls -al]
[root@docker dockerfile]# docker run  3749d2f86a05  -l
docker: Error response from daemon: OCI runtime create failed: container_linux.go:370: starting container process caused: exec: "-l": executable file not found in $PATH: unknown.

注:CMD用-l替换了 ["ls","-a"],然而-l不是命令所以报错
#如果想运行命令要接完整命令
[root@docter dockerfile]# docker run 3749d2f86a05 ls -al
...
drwxr-xr-x   1 root root  66 Mar 20 10:02 etc
drwxr-xr-x   2 root root   6 Nov  3 15:22 home
#1.测试ENTRYPOINT
[root@docker dockerfile]# vim dockerfile-ENTRYPOINT-test   #编写dockerfile文件
FROM centos
ENTRYPOINT ["ls","-a"]
[root@docker dockerfile]# docker build -f dockerfile-ENTRYPOINT-test  -t entrypointtest .   #构建镜像
[root@docker dockerfile]# docker run 7307bd02d0f8   #运行镜像
.
..
lib
lib64
lost+found

#2.想追加一个命令-l [ls -al]
[root@docker dockerfile]# docker run 7307bd02d0f8 -l
total 0
drwxr-xr-x   1 root root   6 Mar 20 10:07 .
drwxr-xr-x   1 root root   6 Mar 20 10:07 ..
lrwxrwxrwx   1 root root   7 Nov  3 15:22 bin -> usr/bin
drwxr-xr-x   5 root root 340 Mar 20 10:07 dev

# Dockerfile中很多命令都是类似,我们需要了解它们的区别,然后测试效果

5.实战测试tomcat镜像

# 1、准备镜像文件 tomcat压缩包  jdk压缩包
# 2、编写dockerfile文件,官方命名Dockerfile,
# 3、build时候会自动寻找这个文件,不需要-f指定
[root@docter dockerfile]# vim Dockerfile
FROM centos
MAINTAINER mming<1715554782@qq.com>
COPY readme.txt /usr/local/readme.txt
ADD jdk-8u11-linux-x64.tar.gz /usr/local/     #自动解压到此目录
ADD aoache-tomcat-9.0.22.tar.gz /usr/local/   #自动解压到此目录
RUN yum install vim -y

ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_11
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.22
EVN CATALINA_BASH /usr/local/apache-tomcat-9.0.22
EVN PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.22/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.22/bin/logs/catalina.out

#3.构建镜像
[root@docter dockerfile]# docker build -t diytomcat .
[root@docter dockerfile]# docker images  #查看自己构建的镜像

#4.启动镜像(第一个-v 指定项目目录,第二个-v指定日志目录)
[root@docter dockerfile]# docker run -d -p 9090:8080 --name dantomcat -v /home/build/tomcat/test:/usr/local/appache-tomcat-9.0.22/webapps/test  -v /home/build/tomcat/tomcatlogs/:/usr/local/appache-tomcat-9.0.22/logs diytomcat

#5.访问测试
本地:curl localhost:9090
浏览器:外网IP:9090

#6.发布项目(由于做了卷挂载,我们直接在本地编写项目就可以发布了)
cd test
mkdir WEB-INF
cd WEB-INF
vim web.xml===>百度搜索 111 >

cd ..  返回test层
vim index.jsp===> 百度搜索 222 >

以上是关于linux12 - dockerfile02 --> 实战构建centostomcat的主要内容,如果未能解决你的问题,请参考以下文章

linux12 - dockerfile05 --> Dockerfile基础命令和个人blog搭建

linux12 - dockerfile01 -->构建镜像指令与编写案例

linux12 - dockerfile03 --> 搭建 PHP+Nginx+Wordpress.

linux12 - dockerfile04 --> wordpress+php5.4

linux12企业实战 -- 06alpine Linux简介alpine制作jdk镜像jre镜像 Alpine 命令

有没有人有一个 Dockerfile 和命令行的简单示例,可以将外部目录从 linux 挂载到 docker 映像中?