一 、容器数据卷
将Docker容器之中产生的数据同步到本地,即为数据卷技术。
可以理解为目录的挂载,将我们的容器内的目录,挂载到Linux上面。
总结:卷技术是为了容器的持久化和同步操作,容器间也是可以数据共享的。
数据卷的使用:
方式1:使用命令来挂载 -v
docker run -it -v 主机目录:容器内目录
启动之后,可以通过docker inspect 查看挂载信息(“Mount”中有主机目录和容器目录的对应关系),对应目录之间数据同步
示例:MYSQL的持久化
docker run -d -p 3310: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
-d 后台运行
-v 数据卷挂载
-p 端口映射
-e 环境配置
--name 容器名称
具名挂载和匿名挂载
@匿名挂载
-v 容器内路径 (自动去除主机路径)
docker run -d -p --name nginx01 -v /etc/nginx nginx
@具名挂载
-v 卷名:容器内路径
查看卷路径
docker volume inspect 卷名
#所有的docker容器内的卷,在没有指定目录的情况下都是在/var/lib/docker/
volumes/xxxx/_data
#通过具名挂载可以方便的找到一个我们使用的卷,大多数情况使用的是具名挂载
具名挂载、匿名挂载、指定路径挂载的区分
-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载
-v 主机路径:容器内路径 #指定路径挂载
扩展:通过-v 容器内路径:ro/rw 改变读写权限
ro 只读
rw 可读可写
#一旦设定了容器的权限,容器对挂出来的内容就有限定了
docker run -d -p --name nginx01 -v jumping:/etc/nginx:ro nginx
docker run -d -p --name nginx01 -v jumping:/etc/nginx:ro nginx
#rw是默认,ro表明路径只能通过宿主机来操作改变
方式2:利用DockFile实现
dockerfile就是用来构建docker镜像的构建文件,由命令脚本构成。
通过这个脚本来生成一个镜像,镜像是一层一层的,每个命令就是一层。
测试:
#创建一个dockefile文件
#文件内容:指令、参数
FROM centos
VOLUME ["volume01","volume02"]
CMD echo "-----end-----"
CMD /bin/bash
#这里的每个命令,就是镜像的一层
数据卷容器
多个mysql同步数据等实现多个容器之间同步数据。
二、DockerFile
dockerfile就是用来构建docker镜像的文件,即命令参数脚本
构建步骤:
1)编写一个dockerfile文件
2)docker build构建成为一个镜像
3)docker run运行镜像
4) docker push 发布镜像到指定仓库(DockerHub,阿里云、私有仓库)
DockerFile的构建过程
基础知识:
1、每个关键字都必须是大写字母
2、执行都是从上到下顺序执行
3、#表示注释
4、每一个指令都会创建一个新的镜像层并提交
docker的镜像分层:
具体指令:
FROM #基础镜像,一切从这里开始
MAINTAINER #镜像是谁写的:姓名+邮箱
RUN #镜像构建的时候需要运行的命令
ADD #步骤,tomcat镜像,这个tomcat的压缩包,添加内容
WORKDIR #镜像的工作目录
VOLUMN #挂载目录
EXPOSE #指定暴露端口配置
CMD #指定这个容器启动的时候要运行的命令,只有最后一个会生效,可以被替代
ENTRYPOINT #指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD #当构建一个被继承的DockerFile,这个时候就会运行ONBUILD的指令,触发指令
COPY #类似ADD,将我们文件拷贝到镜像中
ENV #构建的时候设置环境变量
总结:DockerFile:构建文件,定义了一切的步骤,源代码。
DockerImages:通过dockerfile构建生成的一个镜像,这个镜像即最终发布和运行的产品。
Docker容器:容器就是镜像运行起来提供服务器。
实战测试:
1、例如centos的dockerfile
DockerHub中99%的镜像都是从这个基础镜像生成的FROM search,然后配置需要的软件和配置来进行构建
2、创建一个自己的centos
1) dockerfile构建
FROM centos
MAINTAINER Dylan<XXX@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)通过dockerfile构建镜像
docker build -f mydockerfile-centos -t mycentos:0.1 .
命令:docker build -f dockerfile文件路径 -t 镜像名:版本号
3) 测试运行镜像
docker run -it mycentos:0.1
附:利用docker history查看镜像安装历史
tomcat镜像实战:
1)准备镜像文件,tomcat压缩包,jdk压缩包
2)编写dockerfile文件,官方命名Dockerfile,build会自动找到这个文件,而不需要手动指定
FROM centos
MAINTAINER Dylan<xxx@qq.com>
COPY readme.txt /usr/local/readme.txt
ADD jdk-8u291-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-10.0.6-src.tar.gz /usr/local/
RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_291
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-10.0.6
ENV CATALINA_BASH /usr/local/apache-tomcat-10.0.6
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-10.0.6/bin/startup.sh && tail -F /usr/local/apache-tomcat-10.0.6/bin/logs/catalina.out
3)构建镜像
docker build -t diytomcat .
4) 启动镜像
docker run -d -p 9090:8080 --name dylan -v /home/dylan/test:/usr/local/apache-tomcat-10.0.6/webapps/test -v /home/dylan/logs:/usr/local/apache-tomcat-10.0.6/logs diytomcat