狂神说Java-- Docker最新超详细版教程通俗易懂 --part02-- 容器数据卷 等

容器数据卷使用 21

https://www.bilibili.com/video/BV1og4y1q7M4?p=21

狂神说Java-- Docker最新超详细版教程通俗易懂 --part02-- 容器数据卷 等_第1张图片
狂神说Java-- Docker最新超详细版教程通俗易懂 --part02-- 容器数据卷 等_第2张图片

目录挂载: 将容器内的目录,挂载到宿主机上面 !
容器的持久化和同步操作!
容器间可以数据共享

命令挂载

背景知识:
docker run -it -p 主机端口:容器端口 (上一阶段学到的 部署tomcat服务器时候的知识)

命令挂载
docker run -it -v 主机目录:容器目录
docker run -it -v /home/ceshi:/home centos /bin/bash
将宿主机的 /home/ceshi 目录 与 centos容器 的 /home 目录建立映射关系
docker inspect **
Mounts : **** 挂载 -V 卷

同步过程是双向绑定的

cd /home/ceshi

docker attach **
cd /home

容器卷可以一对一,也可以一对多
针对配置文件 可以是一对多

docker run 注意事项




狂神说Java-- Docker最新超详细版教程通俗易懂 --part02-- 容器数据卷 等_第3张图片

// 注意启动centos -it 参数一定要添加   
// step1 运行centos ,将在宿主机创建目录 /home/centosfile   映射  启动容器的 /home目录 
docker run -it -v /home/centosfile:/home centos:centos7 /bin/bash
// 在宿主机   cd  /home     然后  ll   看到已经有新增的centosfile 目录 


//docker ps 
//docker inspect ***   // 查看详细信息的mount配置情况,如下图

狂神说Java-- Docker最新超详细版教程通俗易懂 --part02-- 容器数据卷 等_第4张图片

容器运行状态下
修改 宿主机 – 容器数据改变
修改 容器 – 宿主机数据改变

容器停止状态下
修改 宿主机 – (启动后)容器数据改变

//step01  
// 宿主机/home/centosfile 目录下 touch test1.txt  test2.txt   查看容器的变化 
// 所以施维英项目修改配置文件的时候,是不需要重启服务器的 

//step02  容器/home 目录 下新增  image1.txt ,查看 宿主机 /home/centosfile 变化 

//step03 docker stop ***
//宿主机/home/centosfile 目录下 touch out1.txt
//docker restart ****
//docker attach ***

狂神说Java-- Docker最新超详细版教程通俗易懂 --part02-- 容器数据卷 等_第5张图片

在这里插入图片描述

mySql 同步数据 22

https://www.bilibili.com/video/BV1og4y1q7M4?p=22
实战安装mySQL

[root@aliyunleo ~]# docker pull mysql:5.7

[root@aliyunleo ~]# 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
08b96b95a4bc045e5a844ce57930e10921068b96c8338edf3fcf13425d1a3379
[root@aliyunleo ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
08b96b95a4bc        mysql:5.7           "docker-entrypoint.s…"   4 seconds ago       Up 4 seconds        33060/tcp, 0.0.0.0:3310->3306/tcp   mysql01
[root@aliyunleo ~]# 


docker search mysql — 查询 mysql
docker pull mysql:5.7 — 获取 mysql 5.7

docker images

hub.docker.com 中 查询 mysql的配置示例
-d 后台运行
-p 端口映射
-v 卷挂载 本地:容器内
-e 环境配置 root:123456
–name 容器名字
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

启动成功后,再本地使用sqlyog链接测试
-h -u -p
链接到服务器的3310 ,3310 映射3306

容器删除后,挂载到本地数据不会丢失,实现了容器数据持久化功能
docker rm -f mysql01
docker ps -a

/home/mysql/data/mysql 目录下的文件 与 mysql 表结构的是一致的
新增一个表看 /home/mysql/data/mysql 目录的文件变化,发现他们是同步
狂神说Java-- Docker最新超详细版教程通俗易懂 --part02-- 容器数据卷 等_第6张图片新增表后,看到aliyun服务器上面的数据也同步了。

狂神说Java-- Docker最新超详细版教程通俗易懂 --part02-- 容器数据卷 等_第7张图片

具名和匿名挂载 23

 
通过具名挂载,方便找到一个卷,大多数情况下使用 具名挂载 
1. 匿名挂载     -v 容器内路径 
2. 具名挂载    卷名:容器内路径 
3. 指定路径   /宿主机路径::容器内路径    ?? 没有成功过 不清楚是:还是:: 

匿名挂载 -v **  后面只跟一个参数 
-v 只写了容器类路径 没有写 容器外 路径 
-P  随机映射端口 
// type01:   --- 匿名类
docker run -d -P --name nginx02 -v /etc/nginx nginx 

docker  volume --help 
docker volume ls   --- 查看卷文件  
[root@hell39 etc]# docker volume ls
DRIVER    VOLUME NAME
local     f8b7c80daf6473e8b1e06fe73cf99b4cd6ed3cc80cd8cfdfdeb8ba79a4b97f44

//type02:   具名挂载
docker run -d -P --name nginx03 -v juming-nginx:/etc/nginx nginx 
[root@hell39 etc]# docker volume ls
DRIVER    VOLUME NAME
local     f8b7c80daf6473e8b1e06fe73cf99b4cd6ed3cc80cd8cfdfdeb8ba79a4b97f44
local     juming-nginx

docker volume ls 
看到会有  juming-nginx 类 
-v  卷名:容器内路径 
docker volume inspect  juming-nginx  
所有没有指定目录的卷都放在
/var/lib/docker/volumes/juming-nginx/data 


---- 查看所有挂载文件  列表
[root@hell39 etc]# docker volume ls
DRIVER    VOLUME NAME
local     f8b7c80daf6473e8b1e06fe73cf99b4cd6ed3cc80cd8cfdfdeb8ba79a4b97f44
local     juming-nginx

----查看某个挂载文件位置  
[root@hell39 etc]# docker volume inspect juming-nginx
[
    {
        "CreatedAt": "2021-03-14T03:14:35-07:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data",
        "Name": "juming-nginx",
        "Options": null,
        "Scope": "local"
    }
]
[root@hell39 etc]# cd /var/lib/docker/volumes
[root@hell39 volumes]# ls
backingFsBlockDev                                                 juming-nginx
f8b7c80daf6473e8b1e06fe73cf99b4cd6ed3cc80cd8cfdfdeb8ba79a4b97f44  metadata.db
[root@hell39 volumes]# ll
total 24
brw-------. 1 root root  8, 3 Mar 13 19:17 backingFsBlockDev
drwx-----x. 3 root root    19 Mar 14 03:08 f8b7c80daf6473e8b1e06fe73cf99b4cd6ed3cc80cd8cfdfdeb8ba79a4b97f44
drwx-----x. 3 root root    19 Mar 14 03:14 juming-nginx
-rw-------. 1 root root 32768 Mar 14 03:14 metadata.db
[root@hell39 volumes]# 


拓展:

docker  run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro   nginx  
ro: readonly   只读      --- 这个路径只能通过宿主机操作,容器内无法操作 
rw: readwrite   可读可写

/var/lib/docker docker主工作目录

在这里插入图片描述

狂神说Java-- Docker最新超详细版教程通俗易懂 --part02-- 容器数据卷 等_第8张图片

数据卷 dockerFile 24

[root@hell39 docker-test-volume]# cat dockerfile1 
FROM centos 

VOLUME ["volume01","volume02"]

CMD echo "----end---"
CMD /bin/bash

[root@hell39 docker-test-volume]# docker build -f /home/docker-test-volume/dockerfile1 -t weilei/centos01  .  
 

[root@iZm5e72eis7guszkqcstrfZ docker-test-volume]# docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
weilei/centos01       latest              5657035841ac        4 minutes ago       215MB

docker inspect 5657035841ac


docker run -it 5657035841ac /bin/bash
ls  -- 会看到 目录比正常的centos 多了 volume1  volume2 两个目录 ,
按照数据卷挂载的定义,在 volume1 文件夹下新增修改数据  ,会自动同步到宿主机对应的空间表 /var/lib/docker/volumes/89cc7e5f8a138a1090d6b9e905b29f0614ff8d1ab0eba5f55c5d714895527c40/_data

docker inspect 4cef501ec18d  ---查看启动的容器
会看到 volume01 对应的宿主机空间  
        "Mounts": [
            {
                ....... , 
                "Destination": "volume02",
                .......
            },
            {
                "Type": "volume",
                "Name": "89cc7e5f8a138a1090d6b9e905b29f0614ff8d1ab0eba5f55c5d714895527c40",
                "Source": "/var/lib/docker/volumes/89cc7e5f8a138a1090d6b9e905b29f0614ff8d1ab0eba5f55c5d714895527c40/_data",
                "Destination": "volume01",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],

// 回到宿主机   
cd  /var/lib/docker/volumes/89cc7e5f8a138a1090d6b9e905b29f0614ff8d1ab0eba5f55c5d714895527c40/_data 
ls 查看宿主机 内容时候有变化  

狂神说Java-- Docker最新超详细版教程通俗易懂 --part02-- 容器数据卷 等_第9张图片

狂神说Java-- Docker最新超详细版教程通俗易懂 --part02-- 容器数据卷 等_第10张图片

狂神说Java-- Docker最新超详细版教程通俗易懂 --part02-- 容器数据卷 等_第11张图片

volumes-from 让 myslq 实现共享数据库

狂神说Java-- Docker最新超详细版教程通俗易懂 --part02-- 容器数据卷 等_第12张图片


[root@aliyunleo home]# 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
[root@aliyunleo home]# docker run -d -p 3311:3306    -v /home/mysql/conf:/etc/mysql/conf.d   -v /home/mysql/data:/var/lib/mysql     -e MYSQL_ROOT_PASSWORD=123456    --name  mysql02 --volumes-from mysql01  mysql:5.7
4199862c03f465839e8c251c0bef68f0dd25554a4acc0f2db4219d10b6e0d4f3
[root@aliyunleo home]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
4199862c03f4        mysql:5.7           "docker-entrypoint.s…"   6 seconds ago       Up 5 seconds        33060/tcp, 0.0.0.0:3311->3306/tcp   mysql02
08b96b95a4bc        mysql:5.7           "docker-entrypoint.s…"   2 hours ago         Up 2 hours          33060/tcp, 0.0.0.0:3310->3306/tcp   mysql01


多个容器之间同步数据 25

狂神说Java-- Docker最新超详细版教程通俗易懂 --part02-- 容器数据卷 等_第13张图片

关键字 : --volumes-from
狂神说Java-- Docker最新超详细版教程通俗易懂 --part02-- 容器数据卷 等_第14张图片

 
 数据卷容器
两个容器同步数据 (两个mysql同步数据)



docker images 
 docker run -it --name docker01 5657035841ac
ctrl+p+q 
docker run -it --name docker02 --volumes-from docker01 weilei/centos01
ctrl+p+q 
docker run -it --name docker01  *****
ctrl+p+q 



docker attach ****
cd volume01 
touche  ***
docker01 创建的数据同步到了 docker02   
 

狂神说Java-- Docker最新超详细版教程通俗易懂 --part02-- 容器数据卷 等_第15张图片

docker File 介绍 26

https://www.bilibili.com/video/BV1og4y1q7M4?p=27

构建步骤
1.    编写一个 dockerfile 文件 
2.   docker build  构建一个镜像
3.   docker  run  运行镜像  
4.   docker  push  发布镜像 (dockhub /  阿里云仓库 )

dockerFile构建过程  
百度  dockerfile  命令 
基础知识 
1.  每个保留关键字(指令) 都必须是大写字母
2. # 注释
3. 每行指令创建一个镜像层 


dockerfile ,十分简单  ,之前交Jar包,现在交docker镜像,成为企业交付标准
步骤:
1. dockerFile : 构建文件,定义了步骤,
2. dockerImages:  通过dockerFile 构建生成的镜像,最终发布的产品,原来是Jar,war 
3. docker容器:  容器是镜像运行起来其提供服务器的 

 

dockerFile构建过程 27

百度 dockerfile 命令

 
基础知识 
1.  每个保留关键字(指令) 都必须是大写字母
2. # 注释
3. 每行指令创建一个镜像层 

dockerfile ,十分简单  ,之前交Jar包,现在交docker镜像,成为企业交付标准
步骤:
1. dockerFile : 构建文件,定义了步骤,
2. dockerImages:  通过dockerFile 构建生成的镜像,最终发布的产品,原来是Jar,war 
3. docker容器:  容器是镜像运行起来其提供服务器的 


dockerFile 指令说明 

FROM :              基础镜像   centos 
MAINTAINER :        作者  
RUN:                镜像构建时候,需要运行的命令 
ADD:                步骤:tomcat ... 
WORKDIR:            镜像的工作目录 
VOLUME:             挂载的目录位置 
EXPOSE:             暴露端口,此处有了,不用-p 了 
           
CMD:                 命令1 (指定容器启动时候要运行的命令,只有最后一个生效)
ENTRYPOINT:          命令2,(可以追加的命令)
ONBUILD:             当构建一个被继承的dockerFile此时会运行它 --触发指令
COPY :               类似 ADD ,将文件COPY到镜像中 
ENV:                 构建的时候设置环境变量  -e ( 如: 设置使用内存大小  、 设置用户名密码 )

狂神说Java-- Docker最新超详细版教程通俗易懂 --part02-- 容器数据卷 等_第16张图片狂神说Java-- Docker最新超详细版教程通俗易懂 --part02-- 容器数据卷 等_第17张图片

狂神说Java-- Docker最新超详细版教程通俗易懂 --part02-- 容器数据卷 等_第18张图片

dockerFile 制作 自己的centos 28

狂神说Java-- Docker最新超详细版教程通俗易懂 --part02-- 容器数据卷 等_第19张图片
狂神说Java-- Docker最新超详细版教程通俗易懂 --part02-- 容器数据卷 等_第20张图片狂神说Java-- Docker最新超详细版教程通俗易懂 --part02-- 容器数据卷 等_第21张图片

 
-----------------构建自己的centos 

cd  home/dockerfile/
vim mydockerfile-centos

FROM centos
MAINTAINER leowei<wei198621@126.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. 通过文件构建镜像 (注意最后有.)
----- f  文件名   t (target) 目标 
docker build -f mydockerfile-centos -t mycentos:0.1 . 

3.运行
docker images 
docker run -it mycentos:0.1 
pwd      -- 默认工作目录为 文件中编辑的  /usr/local 
ifconfig  -- 可以使用
vim test    -- 可以使用  
 

docker history 查看镜像的制作过程
docker images
docker history *** (imageid)

[root@hell39 mydockerfile]# docker images
REPOSITORY                                               TAG       IMAGE ID       CREATED        SIZE
leo/centos                                               1.3       dfb6da3a432a   3 hours ago    209MB
nginx                                                    latest    6084105296a9   2 days ago     133MB
registry.cn-hangzhou.aliyuncs.com/gousheng/schwing_web   1.0       890c08a70644   2 days ago     376MB
hello-world                                              latest    d1165f221234   8 days ago     13.3kB
centos                                                   latest    300e315adb2f   3 months ago   209MB
[root@hell39 mydockerfile]# docker history dfb6da3a432a
IMAGE          CREATED        CREATED BY                                      SIZE      COMMENT
dfb6da3a432a   3 hours ago    /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "/bin…   0B        
aa2ad38c1b25   3 hours ago    /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B        
4e249a9f074d   3 hours ago    /bin/sh -c #(nop)  VOLUME [volume01 volume02]   0B        
300e315adb2f   3 months ago   /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B        
<missing>      3 months ago   /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B        
<missing>      3 months ago   /bin/sh -c #(nop) ADD file:bd7a2aed6ede423b7…   209MB   

关于 cmd entrypoint 对比 29

cmd 指令替换(不可以累加)
entrypoint 指令累加
狂神说Java-- Docker最新超详细版教程通俗易懂 --part02-- 容器数据卷 等_第22张图片

//  *************  01 测试cmd命令 ,只有最后的CMD 指令被运行 
vim  dockerfile-cmd-test 

FROM centos
CMD ["ls","-a"]

----(.   注意最后有点)
docker  build -f dockerfile-cmd-test -t cmdtest  . 
---ok
docker run *****
---报错  向达到  ls -a -l  ,的目的,实际是 -l  替换了 ls -a -l 所以报错
docker run **** -l  
------OK    用 ls-l  替换原有的CMD指令  ls  -a  
docker run **** ls -l

//  *************02  测试entrypoint-命令 
vim  dockerfile-entrypoint-test 

FROM centos
ENTRYPOINT ["ls","-a"]

docker  build -f dockerfile-entrypoint-test -t entrypointtest  . 
---ok 
docker run *****
----ok  
docker run **** -l  
------- failed 
docker run **** ls -l
[root@hell39 mydockerfile]# docker run entrypointtest ls -l
ls: cannot access 'ls': No such file or directory

dockerFile 制作 tomcat 比较复杂 30

https://www.bilibili.com/video/BV1og4y1q7M4?p=30

 本节在此文章单独做了一次,成功运行 
 https://blog.csdn.net/wei198621/article/details/114684423
  1. 准备 tomcat 压缩包 ,jdk 压缩包
    狂神说Java-- Docker最新超详细版教程通俗易懂 --part02-- 容器数据卷 等_第23张图片

  2. 编写dockerfile 文件 ,官方名称 build 会自动寻找这个文件
    狂神说Java-- Docker最新超详细版教程通俗易懂 --part02-- 容器数据卷 等_第24张图片

vim Dockerfile

 
FROM centos
MAINTAINER leo<wei1986@126.com>

COPY readme.txt /usr/local/readme.txt

#  ADD  添加的命令会自动解压 到后面的目录 
ADD jdk-8u141-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.33.tar.gz /usr/local/

# RUN 会走正常的下载流程
RUN yum -y install vim

ENV MYPATH /usr/local
WORKDIR $MYPATH

#  注意此处是 jdk1.8.0_141  不是 jdk1.8.0.141
ENV JAVA_HOME /usr/local/jdk1.8.0_141
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.33
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.33

ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080

CMD /usr/local/apache-tomcat-9.0.33/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.33/bin/logs/catalina.out

  1. 构建镜像 ( 注意有个.)
----缩略写法  默认是到当前目录下找 Dockerfile 
docker build -t  diytomcat . 
----全部参数
docker build -f Dockerfile -t  diytomcat . 

docker images
狂神说Java-- Docker最新超详细版教程通俗易懂 --part02-- 容器数据卷 等_第25张图片

  1. 启动镜像
    狂神说Java-- Docker最新超详细版教程通俗易懂 --part02-- 容器数据卷 等_第26张图片

在这里插入图片描述


 docker run -d \
 -p 9090:8080 \
 --name leotomcat \
 -v /home/tomcat8source/test:/usr/local/apache-tomcat-9.0.33/webapps/test \
 -v /home/tomcat8source/tomcatlogs/:/usr/local/apache-tomcat-9.0.33/logs \
 diytomcat

docker ps 
docker exec -it 00996826b3af /bin/bash
  1. 访问测试
    aliyun 配置端口映射规则
    curl localhost:9090 ---- 此处不运行执行不下去了,

在这里插入图片描述
6.发布项目(由于做了卷挂载,在本地就可以做到发布了)

 -v /home/tomcat8source/test:/usr/local/apache-tomcat-9.0.33/webapps/test \
 本节在此文章单独做了一次,成功运行 
 https://blog.csdn.net/wei198621/article/details/114684423
 

你可能感兴趣的:(容器---Docker)