Dockerfile编写

163 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第5天,点击查看活动详情

Dockerfile

构建步骤

1、编写一个 dockerfile 文件

2、docker build 构建成为一个镜像

3、docker run 运行镜像

4、docker push 发布镜像(DockerHub、阿里云镜像仓库)

基础知识

1、每个保留关键字(指令)都必须是大写

2、执行从上到下顺序执行

3、#代表注释

4、每一个指令都会创建提交一个新的镜像层,并提交

Dockerfile指令

FROM            # 基础镜像,一切从这里开始构建
MAINTAINER      # 构建镜像的作者,姓名+邮箱
RUN             # 镜像构建的时候需要运行的命令
ADD             # 步骤:tomcat镜像,这个tomncat压缩包,谭家内容
WORKDIR         # 镜像的工作目录
VOLUME          # 挂载的目录
EXPOSE          # 对外端口设置
CMD             # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被代替
ENTRYPOINT      # 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD         # 当构建一个被继承 Dockerfile 这个时候就会运行 ONBUILD 的命令,触发指令。
COPY            # 类似ADD,将我们文件拷贝到镜像中
ENV             # 构建的时候设置的环境变量

创建centos

FROM centos
MAINTAINER Sentiment<1509041516@qq.com>
​
ENV MYPATH /usr/local
WORKDIR MYPATHRUN yum -y install vim
RUN yum -y install net-tools
​
EXPOSE 80CMD echo $MYPATH
CMD echo ---- end ----
CMD /bin/bash 

image-20220914161829142.png

CMD和ENTRPOINT区别

CMD测试

定义CMD后运行,直接输出了ls -a 的内容

image-20220914161829142.png

若此时想追加l 即:ls -al,用cmd的方式只能替换:

docker run cmdtest ls -al

ENTRYPOINT测试

同理运行后执行ls -a

但此时若想 执行ls -al只需要在后边追加l即可:

docker run entrypoint-test -l

练习

dockerfile制作tomcat镜像

1、准备镜像文件tomcat压缩包和jdk压缩包

[root@VM-16-10-centos tomcat]# ls
apache-tomcat-9.0.65.tar.gz 
jdk-8u65-linux-x64.tar.gz

2、编写dockerfile文件,官方命名问dockerfile,使用该命名后build时会自动寻找这个文件,不再需要加- f

FROM centos
MAINTAINER sentiment<1509041516@qq.com>
​
ADD jdk-8u65-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.65.tar.gz /usr/local/
​
​
ENV MYPATH /usr/local
WORKDIR $MYPATH
​
ENV JAVA_HOME /usr/local/jdk1.8.0_65
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.65
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.65
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
​
EXPOSE 8080
​
CMD /usr/local/apache-tomcat-9.0.65/bin/startup.sh &&tail -F /usr/local/apache-tomcat-9.0.65/bin/logs/catalina.out

3、构建镜像

docker build -t idytomcat

4、启动镜像

docker run -d -p 4000:8080 --name sentimenttomcat -v /dockerfile/tomcat/test:/usr/local/apache-tomcat-9.0.65/webapps/test -v /dockerfile/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.65/logs diytomcat

5、访问4000端口测试

6、发布项目,在test目录下创建index.jsp和WEB-INF文件夹以及对应的web.xml

xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    version="3.1">
</web-app>

jsp

<html>
<head>
    <title>Tomcat</title>
</head>
<body>
<h2>Hi,Sentiment!</h2>
</body>
</html>

此时访问test目录

image-20220916095647768.png

发布镜像

docker login 

输入账号密码后可以登录自己的dockerhub,之后就可以通过docker push命令 上传我们的镜像

docker push sentiment/diytomcat:1.0
The push refers to repository [docker.io/sentiment/diytomcat]
An image does not exist locally with the tag: sentiment/diytomcat

这里报错 tag有问题,所以尝试修改一下,修改后成功上传

image-20220917122330776.png