zoukankan      html  css  js  c++  java
  • Docker数据卷和Docker系统管理(一)

    一. 创建和挂载数据卷

    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)此时,如果我们在本机的卷中修改东西,可以立即生效的。

    Talent without working hard is nothing.
  • 相关阅读:
    spring boot 在idea中实现热部署
    spring boot jar的生成
    mongodb windows 开机启动
    使用阿里云RDS
    net core 使用ef生成实体类(SqlServer)
    在window下搭建即时即用的hyperledger fabric 的环境
    NET实现谷歌OCR的使用记录(CLOUD VISION API)
    kali 系列学习12-使用Wifite破解无线网络
    kali 系列学习10-渗透攻击MySQL数据库服务、PostgreSQL数据库服务、Tomcat服务和PDF文件
    kali 系列学习09-Kali-linux设置ProxyChains
  • 原文地址:https://www.cnblogs.com/zangxueyuan/p/9142731.html
Copyright © 2011-2022 走看看