Dockerfile
dockerfile就是用来构建docker镜像的构建文件!命令脚本!
通过这个脚本生成镜像,镜像是一层一层的
# 编写dockerfile
FROM centos # 这是 Dockerfile 中的基础镜像声明。表示你将使用 centos 作为基础镜像,构建新的 Docker 镜像。这个基础镜像会是 CentOS 的一个官方版本。
VOLUME ["volume01","volume02"] # 这个命令用来声明容器中的挂载点,也就是卷(volumes)。volume01 和 volume02 是容器内的路径。这些卷在容器运行时将被 Docker 挂载,用来存储数据,并且这些数据可以持久化(不会因为容器的删除而丢失)。注意,这里没有指定宿主机路径,所以卷是匿名挂载,也就是说 Docker 会自动管理这些卷。
CMD echo "---end---" # CMD 用于指定容器启动时要执行的默认命令。在这里,CMD echo "---end---" 会在启动容器时输出 "---end---"。如果你运行这个镜像,默认情况下这个命令会执行,显示 ---end---,然后容器会停止。
CMD /bin/bash # 这是另一个 CMD 指令。它表示容器启动时,会默认进入 /bin/bash,也就是启动一个 Bash shell。因为 Dockerfile 中只能有一个 CMD 指令生效,所以这个 /bin/bash 会覆盖上一个 CMD echo "---end---"。最终容器启动时,默认会进入 Bash 命令行,而不是执行 echo "---end---"
构建docker镜像
docker build -f dockerfile1 -t guoyunqiao/centos .
docker images
这个卷和外部一定有一个同步的目录!
查看一下卷挂载的路径
数据卷容器
多个mysql同步数据
多个mysql实现数据共享
docker run -d -p 3310:3306 -v /etc/mysql/conf.d -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-form mysql01 mysql:5.7
这个时候,可以实现两个容器数据同步!
结论:容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止。但是一旦你持久化到了本地,这个时候,本地的数据是不会删除的!
DockerFile
dockerfile文件是用来构建docker镜像的文件,命令参数的脚本
构建步骤:
1. 编写一个dockerfile文件
2. docker build 构架成为一个镜像
3. docker run 运行镜像
4. docker push 发布镜像(dockerhub,阿里云镜像仓库!)
DockerFile的构建过程
基础知识:
1、每个保留关键字(指令)都是必须是大写字母
2、执行从上到下顺序执行
3、# 表示注释
4、每一个指令都会创建提交一个新的镜像层,并提交!
dockerfile面向开发的,我们以后发布项目,做镜像,就需要编写dockerfile文件
Docker镜像逐渐成为了企业交付的标准
步骤:开发,部署,上线,运维…
dockerfile:构建文件,定义一切步骤,源代码
dockerimages:通过构建生成的镜像,最终发布和运行的产品
docker容器:容器就是镜像运行起来的提供服务
Dockerfile的指令
FROM # 基础镜像,一切从这里开始构建
MAINTAINER # 镜像是谁写的,姓名+邮箱
RUN # 镜像构建的时候需要运行的命令
ADD # 步骤:tomcat镜像,这个tomcat压缩包!就是添加内容
WORKDIR # 镜像的工作目录
VOLUME # 挂载的目录
EXPOSE # 保留端口配置
CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD # 当构建一个被继承DockerFile这个时候就会运行ONBUILD的指令,触发指令。
COPY # 类似ADD,将我们文件拷贝到镜像中
ENV # 构建的时候设置环境变量
实战:创建自己的centos
Docker Hub中99%镜像都是从这个基础镜像过来的 FROM scratch,然后配置需要的软件和配置来进行构建
- 编写配置文件
- 通过文件构建镜像