Docker数据卷和Docker系统管理(一)

时间:2021-06-22 09:54:41

一. 创建和挂载数据卷

1. 创建数据卷

(1)执行下列命令,创建一个名为my-data的数据卷

[root@c720120 ~]# docker volume create my-data
my-data

(2)检查(1)步创建卷的详细信息

[root@c720120 ~]# docker volume inspect my-data
[
     {
         "CreatedAt": "2018-05-28T16:27:39+08:00",
         "Driver": "local",
         "Labels": {},
         "Mountpoint": "/var/lib/docker/volumes/my-data/_data",
         "Name": "my-data",
         "Options": {},
         "Scope": "local"
     }
]

2. 挂载数据卷

(1)在docker container run 命令中指定-v 选项进行挂载

[root@c720120 ~]# docker container run --name test -it \
> -v my-data:/data alpine /bin/sh

(2)在容器中创建一些数据文件

/ # cd /data

/data # echo "some data" > data.txt
/data # echo "some more data" > data2.txt
/data # exit

(3)进行刚才第一步检查的卷所在的Docker主机上的位置,查看文件是否存在。

[root@c720120 _data]# ls -l
total 8
-rw-r--r-- 1 root root 15 Jun  5 23:10 data2.txt
-rw-r--r-- 1 root root 10 Jun  5 23:10 data.txt

(4)在Docker主机上,进行创建文件。

[root@c720120 _data]# echo "This file we create on the host" > host-data.txt

(5)然后进入到容器,看是否看到Docker主机创建的文件。

[root@c720120 _data]# docker container run --name test2 -it -v my-data:/app/data centos:7 /bin/bash
[root@11bfd5e29032 /]# cd /app/data/
[root@11bfd5e29032 data]# ls -l
total 12
-rw-r--r-- 1 root root 10 Jun  5 15:10 data.txt
-rw-r--r-- 1 root root 15 Jun  5 15:10 data2.txt
-rw-r--r-- 1 root root 32 Jun  5 15:13 host-data.txt

3. 移除卷

(1)尝试移除我们在第1步所创建的卷,发现报错,这是由于该卷正在使用

[root@c720120 _data]# docker volume rm my-data
Error response from daemon: unable to remove volume: remove my-data: volume is in use - [11bfd5e29032ce16d6c3282adaa613f726a5f15bdf141bc583d9dc049d191ff4]

(2)我们可以使用-f或--force选项强行删除正在使用中的容器。然后再删除卷

[root@c720120 ~]# docker container rm –f $(docker container ls -aq)

[root@c720120 ~]# docker volume rm my-data

二. 在容器之间共享数据

1. 创建一个容器

(1)创建一个名为writer的容器

[root@c720120 ~]# docker container run -it --name writer \
> -v share-data:/data \
> alpine /bin/sh
/ #

(2)在第(1)步创建的容器中写入数据,好进行测试。

/ #  echo "I can create a file" > /data/sample.txt

(3)退出容器,然后执行下面命令,创建一个名字为reader的容器

[root@c720120 ~]# docker container run -it --name reader \
> -v share-data:/app/data:ro \
> ubuntu:17.04 /bin/bash
Unable to find image 'ubuntu:17.04' locally

(4)尝试读取我们第(2)步创建的文件

root@f29815cfea52:/# ls -l /app/data/
total 4
-rw-r--r-- 1 root root 20 Jun  5 15:23 sample.txt

(5)然后尝试创建一个新的文件

root@f29815cfea52:/# echo "Try to break read/only" > /app/data/data.txt
bash: /app/data/data.txt: Read-only file system

可以看到,当尝试创建新的文件时候,提示是只读的,不允许创建。这是由于我们在挂载的时候指定的ro。

(6)移除所有的容器后,移除卷

[root@c720120 ~]# docker container rm -f $(docker container ls -aq)

[root@c720120 ~]# docker volume rm ${docker volume ls -q)

三. 使用主机卷

1. 案例

(1)挂载当前目录 下的/src到容器的/app/src目录下

[root@c720120 ~]# docker container run --rm -it \
>      -v $(pwd)/src:/app/src \
>      alpine:latest /bin/sh

2. 案例2

(1)创建~/my-weba文件夹,并切换到该文件夹

[root@c720120 ~]# mkdir ~/my-web && cd ~/my-web

(2)创建一个简单的web主页

[root@c720120 my-web]#  echo "<h1>Personal Website</h1>" > index.html

(3)创建Dockerfile文件

[root@c720120 my-web]# cat Dockerfile
FROM nginx:alpine
COPY . /usr/share/nginx/html

(4)镜像构建

[root@c720120 my-web]# docker image build -t my-website:1.0 .
Sending build context to Docker daemon  3.072kB
Step 1/2 : FROM nginx:alpine
  ---> ebe2c7c61055
Step 2/2 : COPY . /usr/share/nginx/html
  ---> 51e46f702575
Successfully built 51e46f702575
Successfully tagged my-website:1.0

(5)创建容器,名字为My-site

[root@c720120 my-web]# docker container run -d \
> -p 8080:80 --name my-site \
> my-website:1.0
75f0e41c3759f33eba3f8c7a8a597823c67e9c8849661fd4bcd554bd27d57166

(6)访问docker host上的8080端口,结果如下:

[root@c720120 my-web]# curl localhost:8080
<h1>Personal Website</h1>

(7)然后重新编辑index.html文件,内容如下:

[root@c720120 my-web]# cat index.html
<h1>Personal Website</h1>
<p>This is some text</p>

(8)当我们再次访问docker host 8080端口时,发现内容没有更新。

[root@c720120 my-web]# curl localhost:8080
<h1>Personal Website</h1>

(9) 删除my-site容器,重新构建镜像,重新创建容器。

[root@c720120 my-web]# docker container rm -f my-site
my-site
[root@c720120 my-web]# docker image build -t my-website:1.0 .
Sending build context to Docker daemon  3.072kB
Step 1/2 : FROM nginx:alpine
  ---> ebe2c7c61055
Step 2/2 : COPY . /usr/share/nginx/html
  ---> 26a2c3c3133d
Successfully built 26a2c3c3133d
Successfully tagged my-website:1.0
[root@c720120 my-web]# docker container run -d \
> -p 8080:80 --name my-site \
> my-website:1.0
86b54e1097eef0b91921f068913fa52978311f3399348794bb4be26109e100cd

(10) 再次的访问docker host的8080端口,查看主页内容。

[root@c720120 my-web]# curl localhost:8080
<h1>Personal Website</h1>
<p>This is some text</p>

总结:可以想象下,如果网站改变一点点的内容,就要重新构建镜像和部署容器,是相当的麻烦的。此时,可以用下面的解决方法。

(11)移除容器,直接挂载docker  host卷。

[root@c720120 my-web]# docker container rm -f my-site
my-site

[root@c720120 my-web]# docker container run -d \
> -v $(pwd):/usr/share/nginx/html \
> -p 8080:80 --name my-site \
> my-website:1.0
557b896ff138395489dfa2cf327366fe6e8d17baf72eb0d09bbeade4ee5eee5b

(12)此时,如果我们在本机的卷中修改东西,可以立即生效的。

Docker数据卷和Docker系统管理(一)的更多相关文章

  1. Docker数据卷和Docker系统管理(二)

    一. 在镜像中定义卷 1. Dockerfile中定义卷的案例 VOLUME /app/data VOLUME /app/data, /app/profiles, /app/config VOLUME ...

  2. docker 数据卷和docker数据卷容器以及数据卷的备份和还原

    一:数据卷 1.什么是数据卷 数据卷是通过特殊设计的目录,可以绕过联合文件系统,为一个或者多个容器提供服务,数据卷是在docker宿主机当中,数据卷可以是文件也可以是文件夹. 2.特点 1.数据卷在容 ...

  3. docker 数据卷之进阶篇

    笔者在<Docker 基础 : 数据管理>一文中介绍了 docker 数据卷(volume) 的基本用法.随着使用的深入,笔者对 docker 数据卷的理解与认识也在不断的增强.本文将在前 ...

  4. 1&period;docker 数据卷的备份和恢复(非大数据量)

    在生产环境中使用 Docker,很多时候需要对数据进行持久化,或者进行容器间的数据共享. 容器中的管理数据主要有两种方式: 数据卷 (Data Volumes): 容器内数据直接映射到本地主机环境: ...

  5. 聊聊Docker数据卷和数据卷容器

    当程序在容器运行的时候,特别是需要与其他容器中的程序或容器外部程序进行沟通交流,这时需要进行数据交换,作为常用的两种沟通数据的方式,网络通信与文件读写是需要提供给程序的支持, [数据卷] 文件是数据持 ...

  6. docker 数据卷 ---- 进阶篇

    笔者在<Docker 基础 : 数据管理>一文中介绍了 docker 数据卷(volume) 的基本用法.随着使用的深入,笔者对 docker 数据卷的理解与认识也在不断的增强.本文将在前 ...

  7. 实例解析Docker数据卷&plus;数据卷容器&plus;flocker数据共享&plus;DockerHub操作

    Docker内部数据管理和Docker之间的数据共享为数据卷和数据卷容器,实例解析1.将本地的文件作为容器的数据卷,2.数据卷flocker插件实现容器集群(或者Docker Swarm)的数据共享3 ...

  8. docker数据卷&lpar;volume&rpar;

    1.什么是数据卷volume https://blog.csdn.net/dream_broken/article/details/52314993 为了了解什么是Docker Volume,首先我们 ...

  9. docker数据卷的管理和使用

    数据卷的使用,数据库可以保证如果容器出现问题但是数据不丢失的作用,比如MySQL/date下的数据 或者Nginx根目录下的index.html 查看数据卷 [root@docker ~]# dock ...

随机推荐

  1. git基础

    1.新的未跟踪文件 新创建的README文件没有进行任何跟踪 $ git status On branch master Untracked files: (use "git add &lt ...

  2. linux 系统下开机自动启动oracle 监听和实例 (亲测有效)

    [oracle@oracle11g ~]$ dbstartORACLE_HOME_LISTNER is not SET, unable to auto-start Oracle Net Listene ...

  3. wikioi 1214 线段覆盖

    题目描述 Description 给定x轴上的N(0<N<100)条线段,每个线段由它的二个端点a_I和b_I确定,I=1,2,--N.这些坐标都是区间(-999,999)的整数.有些线段 ...

  4. 如何使用 RDP 或 SSH 连接到 Azure 虚拟机

    使用 RDP 或 SSH 连接到 Azure 虚拟机 本文简要概述了如何使用远程桌面控制协议 (RDP) 或安全外壳(Secure Shell,SSH)客户端登录 Azure 虚拟机.它还包括要求和故 ...

  5. file upload download

    1. 文件上传与下载 1.1 文件上传 案例: 注册表单/保存商品等相关模块! --à 注册选择头像 / 商品图片 (数据库:存储图片路径 / 图片保存到服务器中指定的目录) 文件上传,要点: 前台: ...

  6. 反向找related&lowbar;name以及limit&lowbar;fields&lowbar;to

    问题2:客户的添加页面,通过popup创建用户时 解决方案: 如果新创建的用户时:如果是销售部的人,页面才增加 目的是:拿到limit_choices_to,就可以判断了 当有两个Foreignkey ...

  7. CentOS6&period;5上安装MySQL

    1.查看操作系统的相关信息 2.查看系统上所有MySQL的rpm包并删除 [root@master ~]# rpm -qa | grep -i mysql [root@masterc ~]# yum ...

  8. &lbrack;MySql&rsqb;默认密码的查找与修改

    摘要 在安装成功后,怎么找到mysql的默认密码,折腾很长时间,最后发现在安装的过程中,产生了一个默认的随机密码. 密码 在mysql安装目录生成的data文件下,查找xxx.err的文件如图: 用记 ...

  9. 题解 P1682 【过家家】

    P1682 过家家 题目描述 有2n个小学生来玩过家家游戏,其中有n个男生,编号为1到n,另外n个女生,编号也是1到n.每一个女生可以先选择一个和她不吵嘴的男生来玩,除此之外,如果编号为X的女生的朋友 ...

  10. 不再手写import - VSCode自动引入Vue组件和Js模块

    :first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdow ...