Dockerfile

Dockerfile

Dockerfile就是用来构建docker镜像的构建文件!

复制代码
[root@localhost rongqi_ceshi]# cat dockerfile1
FROM tomcat:latest #指令(大写),参数,这里的每个命令都是镜像的一层

VOLUME ["volume01","volume02"]
CMD echo "---end---"
CMD /bin/bash
[root@localhost rongqi_ceshi]# docker build -f dockerfile1 -t gao/tomcat:latest .
[+] Building 0.1s (5/5) FINISHED                                                                 docker:default
 => [internal] load build definition from dockerfile1                                                      0.0s
 => => transferring dockerfile: 183B                                                                       0.0s
 => [internal] load metadata for docker.io/library/tomcat:latest                                           0.0s
 => [internal] load .dockerignore                                                                          0.0s
 => => transferring context: 2B                                                                            0.0s
 => [1/1] FROM docker.io/library/tomcat:latest                                                             0.0s
 => exporting to image                                                                                     0.0s
 => => exporting layers                                                                                    0.0s
 => => writing image sha256:abe50d97830dc56fed4c08bdcf5e8e83aa5ae9aa36597f0fe40114ed4ceb6831               0.0s
 => => naming to docker.io/gao/tomcat:latest                          

[root@localhost rongqi_ceshi]# vim dockerfile2
[root@localhost rongqi_ceshi]# docker images
REPOSITORY               TAG       IMAGE ID       CREATED        SIZE
tomcat2.00               1.0       0ad8e3ecec7e   44 hours ago   422MB
nginx                    latest    99133eed2307   4 days ago     161MB
portainer/portainer-ce   latest    2ad8d683056c   2 weeks ago    183MB
tomcat                   latest    a76ed56adf24   3 weeks ago    416MB
gao/tomcat               latest    abe50d97830d   3 weeks ago    416MB
mysql                    5.7       5107333e08a8   2 years ago    501MB
kibana                   7.6.2     f70986bc5191   5 years ago    1.01GB
elasticsearch            7.6.2     f29a1ee41030   5 years ago    791MB
[root@localhost rongqi_ceshi]# cat dockerfile2
FROM tomcat2.00:1.0

VOLUME ["volume01","volume02"]

CMD echo "---end---"&&/bin/bash

[root@localhost rongqi_ceshi]# docker build -f dockerfile2 -t gao/tomcat2.00:1.0 .
[+] Building 0.1s (5/5) FINISHED                                                                 docker:default
 => [internal] load build definition from dockerfile2                                                      0.0s
 => => transferring dockerfile: 183B                                                                       0.0s
 => [internal] load metadata for docker.io/library/tomcat2.00:1.0                                          0.0s
 => [internal] load .dockerignore                                                                          0.0s
 => => transferring context: 2B                                                                            0.0s
 => [1/1] FROM docker.io/library/tomcat2.00:1.0                                                            0.0s
 => exporting to image                                                                                     0.0s
 => => exporting layers                                                                                    0.0s
 => => writing image sha256:ee731b5b5c78dd3c5d412816b2a050804278aacc6b05705a4d9da1fa53a0f4a3               0.0s
 => => naming to docker.io/gao/tomcat2.00:1.0                                                              0.0s
[root@localhost rongqi_ceshi]# docker build -f dockerfile2 -t gao/tomcat:1.0 .
[+] Building 0.1s (5/5) FINISHED                                                                 docker:default
 => [internal] load build definition from dockerfile2                                                      0.0s
 => => transferring dockerfile: 183B                                                                       0.0s
 => [internal] load metadata for docker.io/library/tomcat2.00:1.0                                          0.0s
 => [internal] load .dockerignore                                                                          0.0s
 => => transferring context: 2B                                                                            0.0s
 => CACHED [1/1] FROM docker.io/library/tomcat2.00:1.0                                                     0.0s
 => exporting to image                                                                                     0.0s
 => => exporting layers                                                                                    0.0s
 => => writing image sha256:ee731b5b5c78dd3c5d412816b2a050804278aacc6b05705a4d9da1fa53a0f4a3               0.0s
 => => naming to docker.io/gao/tomcat:1.0                                                                  0.0s
[root@localhost rongqi_ceshi]# docker images
REPOSITORY               TAG       IMAGE ID       CREATED        SIZE
tomcat2.00               1.0       0ad8e3ecec7e   44 hours ago   422MB
gao/tomcat2.00           1.0       ee731b5b5c78   44 hours ago   422MB
gao/tomcat               1.0       ee731b5b5c78   44 hours ago   422MB
nginx                    latest    99133eed2307   4 days ago     161MB
portainer/portainer-ce   latest    2ad8d683056c   2 weeks ago    183MB
tomcat                   latest    a76ed56adf24   3 weeks ago    416MB
gao/tomcat               latest    abe50d97830d   3 weeks ago    416MB
mysql                    5.7       5107333e08a8   2 years ago    501MB
kibana                   7.6.2     f70986bc5191   5 years ago    1.01GB
elasticsearch            7.6.2     f29a1ee41030   5 years ago    791MB

测试启动容器

这个目录是生成镜像时自动挂载的,数据卷目录

复制代码
docker inspect 容器ID #查看卷挂载路径

数据卷容器

通过--volumes-from挂载,其后面是数据卷容器。通过它可以实现容器间的数据共享

复制代码
[root@localhost gao]# docker run -it --name docker01 aiit/tomcat:1.0 
---end---
#创建docker01容器

[root@localhost gao]# docker run -it --name docker02 --volumes-from docker01 aiit/tomcat:1.0
---end---
#创建docker02容器并复用docker01数据卷(数据同步)

[root@localhost gao]# docker run -it --name docker03 --volumes-from docker01 --volumes-from docker02 aiit/tomcat:1.0
---end---
#创建docker03容器并同时复用docker01与docker02的数据卷

多个mysql实现数据共享

复制代码
[root@localhost gao]# docker run -d -p 3301:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
6ec478105dec58dd8ae5a385cdfb5b419c379be9251688b1a9f4814ccae16490
[root@localhost gao]# docker exec -it mysql01 /bin/bash
bash-4.2# 
#创建mysql01

[root@localhost gao]# docker run -d -p 3302:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-from mysql01 mysql:5.7
a613ebfa066e7ec24229974cf25b63f385a10aebc4d5ea51532f713ecdb1aa19
[root@localhost gao]# docker exec -it mysql02 /bin/bash
bash-4.2# 
#创建mysql02并复用mysql01数据卷

Dockerfile的构建

dockerfile 是用来构建 dokcer 镜像的文件!命令参数脚本!

构建步骤:

1、编写一个 dockerfile 文件

复制代码
[root@localhost rongqi_ceshi]# vim dockerfile2
[root@localhost rongqi_ceshi]# cat dockerfile2
FROM tomcat2.00:1.0

VOLUME ["volume01","volume02"]

CMD echo "---end---"&&/bin/bash

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

复制代码
[root@localhost rongqi_ceshi]# docker build -f dockerfile2 -t gao/tomcat2.00:1.0 .

3、docker run 运行镜像

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

DockerFile的构建过程

基础知识

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

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

3、# 表示注释

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

dockerfile命令见

https://mp.csdn.net/mp_blog/creation/editor/159085708

FROM # 基础镜镜像,一切从这里开始构建

MAINTAINER # 镜像是谁写的,姓名 + 邮箱

RUN # 镜像构建的时候需要运行的命令

ADD # 步骤:tomcat 镜像,这个 tomcat 压缩包!添加内容

WORKDIR # 镜像的工作目录

VOLUME # 挂载的目录

EXPOSE # 保留端口配置

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

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

ONBUILD # 当构建一个被继承 DockerFile 这个时候就会运行 ONBUILD 的指令。触发指令。

COPY # 类似 ADD,将我们文件拷贝到镜像中

ENV # 构建的时候设置环境变量!

实战01:构建自己的centos

复制代码
[root@localhost dockerfile]# vim mydockerfile    #创建dockerfile文件
[root@localhost dockerfile]# cat mydockerfile    #查看dockerfile文件
FROM centos:7    #基础镜像

LABEL author="gaoyu" version="1.0"    #信息

ENV MYPATH /usr/local
WORKDIR $MYPATH

#默认官方源访问慢,直接替换为阿里云CentOS 7源
RUN rm -f /etc/yum.repos.d/*.repo && \
    curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
RUN yum clean all && yum makecache
RUN yum -y update
RUN yum -y install vim
RUN yum -y install net-tools
RUN yum clean all

EXPOSE 80

CMD ["sh", "-c", "echo $MYPATH && echo '---end---' && /bin/bash"]

[root@localhost dockerfile]# docker build -f mydockerfile -t mycentos:1.0 .    #构建镜像
[+] Building 53.8s (12/12) FINISHED                         docker:default
 => [internal] load build definition from mydockerfile                0.0s
 => => transferring dockerfile: 522B                                  0.0s
 => [internal] load metadata for docker.io/library/centos:7           1.3s
 => [internal] load .dockerignore                                     0.0s
 => => transferring context: 2B                                       0.0s
 => [1/8] FROM docker.io/library/centos:7@sha256:be65f488b7764ad3638  0.0s
 => CACHED [2/8] WORKDIR /usr/local                                   0.0s
 => [3/8] RUN rm -f /etc/yum.repos.d/*.repo &&     curl -o /etc/yum.  0.5s
 => [4/8] RUN yum clean all && yum makecache                         32.1s
 => [5/8] RUN yum -y update                                          11.3s 
 => [6/8] RUN yum -y install vim                                      4.6s 
 => [7/8] RUN yum -y install net-tools                                2.3s 
 => [8/8] RUN yum clean all                                           0.4s 
 => exporting to image                                                1.4s 
 => => exporting layers                                               1.3s 
 => => writing image sha256:a51a2d1d31758a84632ce412cf9d488a6f34eb76  0.0s 
 => => naming to docker.io/library/mycentos:1.0                       0.0s

[root@localhost dockerfile]# docker images         #验证                        
REPOSITORY               TAG       IMAGE ID       CREATED          SIZE
mycentos                 1.0       a51a2d1d3175   58 seconds ago   1.62GB

[root@localhost dockerfile]# docker run -it mycentos:1.0 /bin/bash    #进入容器
[root@211b80ada4e7 local]# pwd    #查看当前目录
/usr/local    #之前文件中设置的工作目录,默认成为根目录

注意:docker build 命令的格式是 docker build [选项] 构建上下文路径

方案 1:默认 Dockerfile

构建文件名为 Dockerfile(在当前目录),正确命令是:

复制代码
docker build -t mycentos:1.0 .
  • -t mycentos:1.0:给镜像打标签(名称:版本);
  • .:表示「构建上下文路径」为当前目录(Docker 会在该目录找 Dockerfile)。
方案 2:自定义 Dockerfile 文件名

构建文件名为 mydockerfile(非默认名),需要用 -f 指定文件名:

复制代码
docker build -f mydockerfile -t mycentos:1.0 .
  • -f mydockerfile:指定要使用的 Dockerfile 文件名;
  • -t mycentos:1.0:打标签;
  • .:构建上下文路径(当前目录)。

CMD与ENTRYPOINT的区别

实战02:Dockerfile制作Tomcat镜像

1、准备镜像文件 tomcat压缩包,jdk的压缩包!|

2.编写dockerfile文件

具体详细步骤见下文

https://blog.csdn.net/returnthem/article/details/159087855?sharetype=blogdetail&sharerId=159087855&sharerefer=PC&sharesource=returnthem&spm=1011.2480.3001.8118

相关推荐
沉默-_-1 小时前
接收请求:HttpServletRequest的几种用法
前端·servlet·firefox
历程里程碑1 小时前
37 线程安全单例模式深度解析
java·服务器·开发语言·前端·javascript·c++·排序算法
一尾流莺1 小时前
狼人杀娱乐版型介绍
前端
wuhen_n1 小时前
v-once和v-memo完全指南:告别不必要的渲染,让应用飞起来
前端·javascript·vue.js
干前端2 小时前
Vue3 组件库实战(六):从本地到 NPM,Vue 组件库工程化构建与打包全指南(上)
前端·vue.js·npm
fjhcom2 小时前
PDF与图片互转WEB应用开发教程
前端·pdf·图片·web应用·streamlit
云原生指北2 小时前
记忆不上云:mem9 + TiDB 打造 OpenClaw 私有记忆中枢
前端
IT_陈寒2 小时前
Vite vs Webpack终极对决:5个关键指标告诉你谁更快?
前端·人工智能·后端
Moment2 小时前
2026 年前端 Agent 框架选型:Mastra 与 LangChain 该怎么选
前端·后端·面试