linux12 - dockerfile02 --> 实战构建centos、tomcat
文章目录
一、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 >