docker学习之数据卷、DockerFile

 一 、容器数据卷

将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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值