- 1. 引言
- 2. Docker容器数据卷
- 2.1 容器数据卷是什么?
- 2.2 容器数据卷能干嘛?
- 2.3 数据卷添加
- 2.3.1 直接命令添加
- 2.3.2 查看数据卷是否挂载成功
- 2.3.3 容器和宿主机之间数据共享
- 2.3.4 命令(带权限)
- 3. DockerFile介绍
- 3.1 DockerFile是什么
- 3.2 DockerFile构建过程解析
- 3.3 如何自定义构建一个镜像?
- 4. DockerFile体系结构说明
- 5. 使用DockerFile构建镜像
- 5.1 需求
- 5.2 Jdk8下载
- 5.3 编写DockerFile
- 5.4 构建
- 5.5 运行镜像
- 6. 虚悬镜像
-
对于
Java
语言,我们需要编写java
源代码,然后用编译器对源代码文件进行编译得到class
文件,最后虚拟机再对class
文件进行解释执行 -
在
Docker
中,我们该如何生成自己的镜像,然后把镜像放到镜像库中呢?这就需要用到DockerFile
-
在
Redis
中,我们想把数据持久化到硬盘上,我们采用AOF
或者RDB
的方式,但对于Docker
容器如何实现数据在宿主机和容器间进行共享持久化呢?这就需要用到数据卷。
Docker
容器产生的数据,如果我们不通过docker commit
命令来生成新的镜像,使得数据作为镜像的一部分保存下来,那么当容器删除后,数据自然就没有了。为了能保存数据在Docker
中,我们使用卷。
- 可以完成容器到宿主主机、宿主主机到容器的双方向数据共享
- 特点
- 数据卷可在容器之间共享或重用数据
- 卷中的更改可以直接生效
- 数据卷中的更改不会包含在镜像的更新中
- 数据卷的生命周期一直持续到没有容器使用它为止
- 卷的设计目的就是数据的持久化,完全独立于容器的生成周期,因此
Docker
不会在容器删除时删除其挂载的数据卷
方式一:在容器内添加
方式二:DockerFile
添加
-
命令:
docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
-
执行以下命令:
docker run -it -v /myDataVolume:/dataVolumeContain centos
- 查看数据卷是否起作用:
docker inspect 镜像ID
容器停止退出后,主机修改后数据是否可以同步到容器?答案:可以
2.3.4 命令(带权限)-
命令:
docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名(容器内readonly,只读,不可写)
-
执行以下命令:
docker run -it -v /myDataVolume:/dataVolumeContain:ro centos
-
查看数据卷是否起作用:
docker inspect 镜像ID
此方式,容器中数据卷只读
DockerFile
为镜像模板的描述文件DockerFile
是用来构建Docker
镜像的构建文件,是由一系列命令和参数构成的脚本
DockerFile
文件说明:- 每条保留字指令都必须为大写字母且后面要跟随至少一个参数
- 指令按照从上到下,顺序执行
#
表示注释- 每条指令都会创建一个新的镜像层,并对镜像进行提交
Docker
执行DockerFile
的大致流程:docker
从基础镜像运行一个容器- 执行一条指令并对容器作出修改
- 执行类似
docker commit
的操作提交一个新的镜像层 docker
再基于刚提交的镜像运行一个新容器- 执行
dockerfile
中的下一条指令直到所有指令都执行完成
-
编写
DockerFile
文件 -
docker build
docker build -f /mydocker/Dockerfile -t scorpios/centos .
-
docker run
当使用DockerFile
中的VOLUME
属性添加数据卷时:
使原始的centos7
镜像,具备以下功能:vim+ifconfig+jdk8
Jdk8
镜像下载地址:https://www.oracle.com/java/technologies/downloads/#java8
把下载好的Jdk8
包上传到服务器上
Dockerfile文件的第一个字母必须为大写:D
FROM centos
MAINTAINER scorpios
ENV MYPATH /usr/local
WORKDIR $MYPATH
#安装vim编辑器
RUN yum -y install vim
#安装ifconfig命令查看网络IP
RUN yum -y install net-tools
#安装java8及lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把jdk-8u171-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
EXPOSE 80
CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash
5.4 构建
docker build -t 新镜像名字:TAG .
docker build -t mycentos7:1.2.1 .
上面TAG后面有个空格,有个点
5.5 运行镜像查看镜像并运行镜像:
docker run -it 新镜像名字:TAG
eg:docker run -it mycentos7:1.2.1
- 仓库名、标签都是
的镜像,俗称
dangling image
- 查看虚悬镜像:
docker image ls -f dangling=true
- 删除:
docker image prune