DockerFile

DockerFile

DockerFile构建过程

Dockerfile是用来构建Docker镜像的文本文件,也可以说是命令参数脚本。docker build命令用于从Dockerfile构建镜像。可以在docker build命令中使用-f标志指向文件系统中任何位置的Dockerfile。

Docker镜像发布的步骤:
1、编写一个dockerfile文件

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

3、docker run 镜像

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

Dockerfile指令说明
指令说明
FROM指定基础镜像
MAINTAINER镜像是谁写的,姓名+邮箱
RUN镜像构建的时候需要运行的命令
ADD将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget
WORKDIR镜像的工作目录
VOLUME挂载的目录
EXPOSE保留端口配置
CMD指定这个容器启动的时候要运行的命令(只有最后一个会生效)
ENTRYPOINT指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD当构建一个被继承DockerFile,这个时候就会运行ONBUILD的指令,触发指令
COPY功能类似ADD,但是是不会自动解压文件,也不能访问网络资源
ENV构建的时候设置环境变量

在这里插入图片描述

Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,’#’ 为 Dockerfile 中的注释。

关于DockerFile文件的脚本注意点有:

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

2、文件中的指令从上到下顺序执行,第一个指令必须是FROM

3、# 号表示注释

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

dockerfile是面向开发的,我们以后要发布项目,做镜像,就需要编写dockerfile文件,这个文件十分简单!

Docker镜像逐渐成为企业交付的标准,必须要掌握!
步骤:开发,部署,运维。。。缺一不可!
DockerFile :构建文件,定义了一切的步骤,源代码
Dockerlmages:通过 DockerFile构建生成的镜像,最终发布和运行的产品!

Docker容器︰容器就是镜像运行起来提供服务器

实战测试

创建一个自己的centos

构建镜像命令:docker build -f dockerfile文件路径 -t 镜像名[:版本号] .

# 1、编写dockerFile文件
[root@iZwz93j24hpsj03xcor6ieZ dockerfile]# cat dockerfile-centos 
FROM centos
MAINTAINER sky<1459543337@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 镜像名[:版本号] .
[root@iZwz93j24hpsj03xcor6ieZ dockerfile]# docker build -f dockerfile-centos -t mycentos:0.1 .
Successfully built b0ac2a90ff44
Successfully tagged mycentos:0.1

CMD和ENTRYPOINT的区别

测试CMD

# 编写dockerfile文件
[root@iZwz93j24hpsj03xcor6ieZ dockerfile]# cat dockerfile-cmd-test 
FROM centos
CMD ["ls","-a"]

# 构建dockerfile镜像
[root@iZwz93j24hpsj03xcor6ieZ dockerfile]# docker build -f dockerfile-cmd-test -t cmdtest .
Sending build context to Docker daemon  3.072kB
Step 1/2 : FROM centos
 ---> 5d0da3dc9764
Step 2/2 : CMD ["ls","-a"]
 ---> Running in a16f0c53534c
Removing intermediate container a16f0c53534c
 ---> e47937b047ce
Successfully built e47937b047ce
Successfully tagged cmdtest:latest

# 运行镜像容器
[root@iZwz93j24hpsj03xcor6ieZ dockerfile]# docker run e47937b047ce
.
..
.dockerenv
bin
dev

# 想追加一个命令 -l ls -al
[root@iZwz93j24hpsj03xcor6ieZ dockerfile]# docker run e47937b047ce -l
docker: Error response from daemon: failed to create shim: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "-l": executable file not found in $PATH: unknown.

# #由于使用的是 CMD指令,命令无追加,-l取代了原本的ls -a,而-l命令不存在所以报错。

测试ENTRYPOINT

# 编写dockerfile文件
[root@iZwz93j24hpsj03xcor6ieZ dockerfile]# cat dockerfile-cmd-test 
FROM centos
ENTRYPOINT ["ls","-a"]

# 构建镜像
[root@iZwz93j24hpsj03xcor6ieZ dockerfile]# docker build -f dockerfile-cmd-entrypoint -t entrypoint-test .
Sending build context to Docker daemon  4.096kB
Step 1/2 : FROM centos
 ---> 5d0da3dc9764
Step 2/2 : ENTRYPOINT ["ls","-a"]
 ---> Running in 0bc29180d00a
Removing intermediate container 0bc29180d00a
 ---> b59230bfa931
Successfully built b59230bfa931
Successfully tagged entrypoint-test:latest

# 正常运行
[root@iZwz93j24hpsj03xcor6ieZ dockerfile]# docker run b59230bfa931
.
..
.dockerenv
bin
dev

# 追加镜像再次运行
[root@iZwz93j24hpsj03xcor6ieZ dockerfile]# docker run b59230bfa931 -l
total 56
drwxr-xr-x   1 root root 4096 May  3 08:33 .
drwxr-xr-x   1 root root 4096 May  3 08:33 ..
-rwxr-xr-x   1 root root    0 May  3 08:33 .dockerenv
lrwxrwxrwx   1 root root    7 Nov  3  2020 bin -> usr/bin
drwxr-xr-x   5 root root  340 May  3 08:33 dev

实战:Tomcat镜像

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

[root@iZwz93j24hpsj03xcor6ieZ tomcat]# ls
apache-tomcat-9.0.60.tar.gz  jdk-8u191-linux-x64.tar.gz

2、编写dockefile文件

[root@iZwz93j24hpsj03xcor6ieZ tomcat]# cat Dockerfile 
FROM centos:7
MAINTAINER yinwenjian<1459543337@qq.com>

ADD jdk-8u191-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.60.tar.gz /usr/local/

RUN yum -y install vim

ENV MYPATH /usr/local
WORKDIR $MYPATH

ENV JAVA_HOME /usr/local/jdk1.8.0_191
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.60
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.60
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080

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

3、构建镜像 注意这里没有指定dockerfile 名称是因为我的dockerfile名称为Dockerfile 会默认识别

docker build -t diytomcat .

4、启动镜像

[root@iZwz93j24hpsj03xcor6ieZ tomcat]# docker run -d -p 8080:8080 --name skytomcat -v /home/sky/build/tomcat/test:/usr/local/apache-tomcat-9.0.60/webapps/test -v /home/sky/build/tomcat/logs:/usr/local/apache-tomcat-9.0.60/logs diytomcat

在test下面新建一个html文件 ;

和一个WEB-INF目录下建一个web.xml

5、访问测试

<?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_4_0.xsd"
         version="4.0">

</web-app>

index.html

<!DOCTYPE html>
<html>
    <head>
         <meta charset="UTF-8"/>
        <title>这是个标题</title>
    </head>
    <body>
        <h1>这是一个一个简单的HTML</h1>
        <p>Hello World!</p>
    </body>
</html>

6、发布项目

http:/ip:8080/test/

在这里插入图片描述

发布镜像到DockerHub

退出是 docker logout

[root@iZwz93j24hpsj03xcor6ieZ ~]# docker login -u yinwenjian
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

# 提交镜像
[root@iZwz93j24hpsj03xcor6ieZ ~]# docker tag 256aec61645c yinwenjian/diytomcat:1.0
[root@iZwz93j24hpsj03xcor6ieZ ~]# docker images
REPOSITORY             TAG          IMAGE ID       CREATED         SIZE
diytomcat              latest       256aec61645c   14 hours ago    838MB
yinwenjian/diytomcat   1.0          256aec61645c   14 hours ago    838MB
entrypoint-test        latest       b59230bfa931   17 hours ago    231MB
cmdtest                latest       e47937b047ce   17 hours ago    231MB
mycentos               0.1          b0ac2a90ff44   18 hours ago    591MB
mytomcat               1.0          f267763101fa   40 hours ago    684MB
elasticsearch          8.1.3        b543e34fe3ca   2 weeks ago     1.2GB
nginx                  latest       605c77e624dd   4 months ago    141MB
tomcat                 9.0          b8e65a4d736d   4 months ago    680MB
tomcat                 latest       fb5657adc892   4 months ago    680MB
mysql                  8.0          3218b38490ce   4 months ago    516MB
rabbitmq               management   6c3c2a225947   4 months ago    253MB
hello-world            latest       feb5d9fea6a5   7 months ago    13.3kB
centos                 7            eeb6ee3f44bd   7 months ago    204MB
centos                 latest       5d0da3dc9764   7 months ago    231MB
portainer/portainer    latest       580c0e4e98b0   13 months ago   79.1MB
[root@iZwz93j24hpsj03xcor6ieZ ~]# docker push yinwenjian/diytomcat:1.0
The push refers to repository [docker.io/yinwenjian/diytomcat]
发布镜像到阿里云镜像服务

1、登录阿里云

2、找到容器镜像服务

3、创建命名空间

在这里插入图片描述

4、创建容器镜像

在这里插入图片描述

docker login --username=毕竟尹稳健 registry.cn-shenzhen.aliyuncs.com
docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/yinwenjian/skytest:1.0
docker push registry.cn-shenzhen.aliyuncs.com/yinwenjian/skytest:1.0
docker login --username=毕竟尹稳健 registry.cn-shenzhen.aliyuncs.com
docker tag 5e04fd3ea63b registry.cn-shenzhen.aliyuncs.com/yinwenjian/skytest:1.0
docker push registry.cn-shenzhen.aliyuncs.com/yinwenjian/skytest:1.0
The push refers to repository [registry.cn-shenzhen.aliyuncs.com/yinwenjian/skytest]
92b51dd75c08: Pushing [=======>                                           ]  31.63MB/221.1MB
ea69da1ec832: Pushing [=================================>                 ]  10.77MB/16.02MB
ee4998ffb352: Pushing [=>                                                 ]   13.1MB/396.5MB
174f56854903: Pushing [====>                                              ]  19.58MB/203.9MB
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

毕竟尹稳健

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值