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