dockerfile用于构建docker镜像(命令参数脚本)
1.dockerfile构建过程:
# 1.指令关键字必须大写
# 2.从上往下顺序执行
# 3.# 表示注释
# 4.每一个指令都会创建一个新的镜像层,并提交
DockerFile:构建文件,定义执行的内容
DockerImages:通过DockerFile构建生成的镜像,即最终发布和运行的产品
DockerContainer:运行镜像并提供服务
2.DockerFile指令
FROM # 基础镜像
MAINTAINER # 作者:姓名+邮箱
RUN # 镜像构建时需要运行的命令
ADD # 添加需要使用的文件(会自动解压)
WORKDIR # 镜像工作目录
VOLUME # 挂载目录
EXPOSE # 暴露端口
CMD # 指定容器启动时要运行的命令(只有最后一个才生效,可被替代)
ENTRYPOINT # 同理CMD,但可命令可以追加,类似于StringUtils.append()
ONBUILD # 当构建一个被继承的dockerfile时,就会运行onbuild指令(触发指令)
COPY # 类似于ADD,将需要的文件拷贝到镜像中
ENV # 构建时设置环境变量
3.centos 测试实例
DockerHub中大部分的镜像都是基于scratch这个基础镜像构建而来
# 1.编写dockerfile配置文件
FROM centos
MAINTAINER suaxi<281463547@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
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@suaxi dockerfile]# docker build -f dockerfile-centos -t mycentos:1.0 .
# 3.测试运行
镜像构建历史:docker history 容器id
CMD和ENTRYPOINT的区别
测试CMD
# 1.编写dockerfile文件
FROM centos
CMD ["ls","-a"]
# 2.构建镜像
[root@suaxi dockerfile]# docker build -f docker-cmd-test -t cmdtest .
# 3.运行,执行了ls -a 命令
[root@suaxi dockerfile]# docker run 92054cb6235d
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
# 现在项追加一个 -l 命令 ls -al
[root@suaxi dockerfile]# docker run 92054cb6235d -l
docker: Error response from daemon: OCI runtime create failed: container_linux.go:367: starting container process caused: exec: "-l": executable file not found in $PATH: unknown.
# 在使用CMD指令的情况下,后追加的 -l 命令替换了之前的CMD["ls","-a"]命令,所以报错
测试ENTRYPOINT
# 1.编写dockerfile文件
FROM centos
ENTRYPOINT ["ls","-a"]
# 第2、3步的build和run与之前的一样
[root@suaxi dockerfile]# docker build -f docker-entrypoint-test -t entrypointtest .
Sending build context to Docker daemon 4.096kB
Step 1/2 : FROM centos
---> 300e315adb2f
Step 2/2 : ENTRYPOINT ["ls","-a"]
---> Running in bf423c7dc041
Removing intermediate container bf423c7dc041
---> e25354d47b76
Successfully built e25354d47b76
Successfully tagged entrypointtest:latest
[root@suaxi dockerfile]# docker run e25354d47b76
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
# 同理追加 -l 命令
[root@suaxi dockerfile]# docker run e25354d47b76 -l
total 56
drwxr-xr-x 1 root root 4096 Mar 23 14:12 .
drwxr-xr-x 1 root root 4096 Mar 23 14:12 ..
-rwxr-xr-x 1 root root 0 Mar 23 14:12 .dockerenv
lrwxrwxrwx 1 root root 7 Nov 3 15:22 bin -> usr/bin
drwxr-xr-x 5 root root 340 Mar 23 14:12 dev
drwxr-xr-x 1 root root 4096 Mar 23 14:12 etc
drwxr-xr-x 2 root root 4096 Nov 3 15:22 home
lrwxrwxrwx 1 root root 7 Nov 3 15:22 lib -> usr/lib
lrwxrwxrwx 1 root root 9 Nov 3 15:22 lib64 -> usr/lib64
drwx------ 2 root root 4096 Dec 4 17:37 lost+found
drwxr-xr-x 2 root root 4096 Nov 3 15:22 media
drwxr-xr-x 2 root root 4096 Nov 3 15:22 mnt
drwxr-xr-x 2 root root 4096 Nov 3 15:22 opt
dr-xr-xr-x 100 root root 0 Mar 23 14:12 proc
dr-xr-x--- 2 root root 4096 Dec 4 17:37 root
drwxr-xr-x 11 root root 4096 Dec 4 17:37 run
lrwxrwxrwx 1 root root 8 Nov 3 15:22 sbin -> usr/sbin
drwxr-xr-x 2 root root 4096 Nov 3 15:22 srv
dr-xr-xr-x 13 root root 0 Mar 22 13:57 sys
drwxrwxrwt 7 root root 4096 Dec 4 17:37 tmp
drwxr-xr-x 12 root root 4096 Dec 4 17:37 usr
drwxr-xr-x 20 root root 4096 Dec 4 17:37 var
# 可以发现,使用ENTRYPOINT指令,-l命令直接追加在了ls -a之后,且正确执行
4.Tomcat 测试实例
1.准备文件:
2.编写Dockerfile文件
注:Dockerfile为官方命名,build时会自动查找该文件,不需要 -f 指定文件路径
FROM centos
MAINTAINER suaxi<281463547@qq.com>
COPY readme.txt /usr/local/readme.txt
ADD jdk-8u281-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.27.tar.gz /usr/local/
RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_281
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.27
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.27
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.27/bin/startup.sh && tail -f /usr/local/apache-tomcat-9.0.27/logs/catalina.out
3.构建镜像
[root@suaxi dockerfile]# docker build -t diycentos .
4.启动镜像
[root@suaxi dockerfile]# docker run -d -p 8088:8080 --name tomcattest -v /home/test/tomcat/test:/usr/local/apache-tomcat-9.0.27/webapps/test -v /home/test/build/tomcat/logs:/usr/local/apache-tomcat-9.0.27/logs diycentos
5.访问测试
6.发布项目(挂载目录之后在本地编写项目即可)
在挂在路径下新建WEB-INF/web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
</web-app>
cd ..
返回上一级,新建index.html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Docker</title>
</head>
<body>
<h1>Docker Tomcat diy test</h1>
</body>
</html>
外网访问测试成功
评论 (0)