machine管理虚拟机器、volume数据卷操作

1.machine操作

  Docker Machine 是一种可以让您在虚拟主机上安装 Docker 的工具,并可以使用 docker-machine 命令来管理主机。(我们按照docker的时候安装了virtualbox)

  Docker Machine 也可以集中管理所有的 docker 主机,比如快速的给 100 台服务器安装上 docker。

  Docker Machine 管理的虚拟主机可以是机上的,也可以是云供应商,如阿里云,腾讯云,AWS,或 DigitalOcean。

  使用 docker-machine 命令,您可以启动,检查,停止和重新启动托管主机,也可以升级 Docker 客户端和守护程序,以及配置 Docker 客户端与您的主机进行通信

安装 Docker Machine 之前你需要先安装 Docker。

Docker Mechine 可以在多种平台上安装使用,包括 Linux 、MacOS 以及 windows。

1.linux下面安装docker machine

$ base=https://github.com/docker/machine/releases/download/v0.16.0 &&
  curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&
  sudo mv /tmp/docker-machine /usr/local/bin/docker-machine &&
  chmod +x /usr/local/bin/docker-machine

2.windows下面安装docker machine

windows下面可以用git bash操作,git bash实际上是一个虚拟的linux环境。

$ base=https://github.com/docker/machine/releases/download/v0.16.0 &&
  mkdir -p "$HOME/bin" &&
  curl -L $base/docker-machine-Windows-x86_64.exe > "$HOME/bin/docker-machine.exe" &&
  chmod +x "$HOME/bin/docker-machine.exe"

查看是否安装成功:

C:\Users\Administrator>docker-machine version
docker-machine version 0.14.0, build 89b8332

  windows安装docker的时候默认已经安装了docker-machine,可以直接使用。

3.基本使用

(1)列出可用的机器

$ docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER     ERRORS
default   *        virtualbox   Running   tcp://192.168.99.100:2376           v19.03.5

(2)创建机器

创建一台名为 test 的机器。

docker-machine create --driver virtualbox test

--driver:指定用来创建机器的驱动类型,这里是 virtualbox。

(3)查看机器的IP

[email protected]1535 MINGW64 /e/docker/dockerTest
$ docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER     ERRORS
default   *        virtualbox   Running   tcp://192.168.99.100:2376           v19.03.5
test      -        virtualbox   Running   tcp://192.168.99.101:2376           v19.03.5

[email protected]-1535 MINGW64 /e/docker/dockerTest
$ docker-machine ip test #查看test机器的IP
192.168.99.101

[email protected]-1535 MINGW64 /e/docker/dockerTest
$ docker-machine ip
192.168.99.100

(4)停止机器

[email protected]1535 MINGW64 /e/docker/dockerTest
$ docker-machine stop test
Stopping "test"...
Machine "test" was stopped.

[email protected]-1535 MINGW64 /e/docker/dockerTest
$ docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER     ERRORS
default   *        virtualbox   Running   tcp://192.168.99.100:2376           v19.03.5
test      -        virtualbox   Stopped                                       Unknown

(5)启动机器

$ docker-machine start test
Starting "test"...
(test) Check network to re-create if needed...
(test) Windows might ask for the permission to configure a dhcp server. Sometimes, such confirmation window is minimized in the taskbar.
(test) Waiting for an IP...
Machine "test" was started.
Waiting for SSH to be available...
Detecting the provisioner...
Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.

(6)进入机器

docker-machine ssh test

(7)docker-machine 命令参数说明

docker-machine active:查看当前激活状态的 Docker 主机。

config:查看当前激活状态 Docker 主机的连接信息。

creat:创建 Docker 主机

env:显示连接到某个主机需要的环境变量

inspect: 以 json 格式输出指定Docker的详细信息

ip: 获取指定 Docker 主机的地址

kill: 直接杀死指定的 Docker 主机

ls: 列出所有的管理主机

provision: 重新配置指定主机

regenerate-certs: 为某个主机重新生成 TLS 信息

restart: 重启指定的主机

rm: 删除某台 Docker 主机,对应的虚拟机也会被删除

ssh: 通过 SSH 连接到主机上,执行命令

scp: 在 Docker 主机之间以及 Docker 主机和本地主机之间通过 scp 远程复制数据

mount: 使用 SSHFS 从计算机装载或卸载目录

start: 启动一个指定的 Docker 主机,如果对象是个虚拟机,该虚拟机将被启动

status: 获取指定 Docker 主机的状态(包括:Running、Paused、Saved、Stopped、Stopping、Starting、Error)等

stop: 停止一个指定的 Docker 主机

upgrade: 将一个指定主机的 Docker 版本更新为最新

url: 获取指定 Docker 主机的监听 URL

version: 显示 Docker Machine 的版本或者主机 Docker 版本

help: 显示帮助信息

2.volume数据卷操作

  volume提供独立于容器之外的持久化存储,我们知道在容器内部修改之后是不会做持久化存储的。并且volume可以提供容器与容器直接共享的数据。

1. 命令行基本操作

(1)命令行启动nginx,并且加-v参数指定volume(容器中的路径),--name指定容器名称,-p指定端口映射。

docker run -d --name nginx -v /usr/share/nginx/html -p 8085:80 hub.c.163.com/library/nginx

(2)查看所有容器

$ docker ps -a
CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS                  NAMES
56871ddcbecd        hub.c.163.com/library/nginx   "nginx -g ‘daemon of…"   4 minutes ago       Up 4 minutes        0.0.0.0:8085->80/tcp   nginx

(3)检查容器:以JSON格式打印容器信息

$ docker inspect nginx

主要查看下面信息:

        "Mounts": [
            {
                "Type": "volume",
                "Name": "fa9e2d47d162cd7d5859d454727b724847d3720d67b584f1de6cc6ed6b3e6d73",
                "Source": "/mnt/sda1/var/lib/docker/volumes/fa9e2d47d162cd7d5859d454727b724847d3720d67b584f1de6cc6ed6b3e6d73/_data",
                "Destination": "/usr/share/nginx/html",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ]

Source指的是本地真实的路径,/mnt 目录一般用于挂载 ,Destination指的是容器里面的路径。

(4)由于我们是windows环境,所有本地真实路径实际是虚拟linux机器里面的路径,我们进入虚拟linux环境(docker-machine进入虚拟环境)

[email protected]1535 MINGW64 /e/docker/dockerTest
$ docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER     ERRORS
default   *        virtualbox   Running   tcp://192.168.99.100:2376           v19.03.5
test      -        virtualbox   Running   tcp://192.168.99.101:2376           v19.03.5

[email protected]-1535 MINGW64 /e/docker/dockerTest
$ docker-machine ssh default
   ( ‘>‘)
  /) TC (\   Core is distributed with ABSOLUTELY NO WARRANTY.
 (/-_--_-\)           www.tinycorelinux.net

[email protected]:~$

查看 /mnt/sda1/var/lib/docker/volumes/fa9e2d47d162cd7d5859d454727b724847d3720d67b584f1de6cc6ed6b3e6d73/_data 目录下文件

[email protected]:~$ sudo -i #切换root用户
[email protected]:~# ls /mnt/sda1/var/lib/docker/volumes/fa9e2d47d162cd7d5859d454727b724847d3720d67b584f1de6cc6ed6b3e6d73/_data #查看目录内容
50x.html    index.html
[email protected]:~# cat /mnt/sda1/var/lib/docker/volumes/fa9e2d47d162cd7d5859d454727b724847d3720d67b584f1de6cc6ed6b3e6d73/_data/index.html #查看index.html的内容
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

(5)进入容器查看内容:

C:\Users\Administrator>docker exec -it 56871ddcbecd bash  #进入容器
[email protected]:/# ls /usr/share/nginx/html/
50x.html  index.html
[email protected]:/# cat /usr/share/nginx/html/index.html
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

(6)从linux虚拟环境修改nginx主页index.html

[email protected]:~# echo "it is monday!" > /mnt/sda1/var/lib/docker/volumes/fa9e2d47d162cd7d5859d454727b724847d3720d67b584f1de6cc6ed6b3e6d73/_data/index.html
[email protected]:~# cat /mnt/sda1/var/lib/docker/volumes/fa9e2d47d162cd7d5859d454727b724847d3720d67b584f1de6cc6ed6b3e6d73/_data/index.html
it is monday!

(7)再次从容器查看

[email protected]:~# echo "it is monday!" > /mnt/sda1/var/lib/docker/volumes/fa9e2d47d162cd7d5859d454727b724847d3720d67b584f1de6cc6ed6b3e6d73/_data/index.html
[email protected]:~# cat /mnt/sda1/var/lib/docker/volumes/fa9e2d47d162cd7d5859d454727b724847d3720d67b584f1de6cc6ed6b3e6d73/_data/index.html
it is monday!

(8)从浏览器查看

2.运行的时候指定本地路径和容器挂载的路径

docker run -v 本地路径:容器中路径 镜像名称

  代表本地路径挂载到容器中的路径。如果不知道本地路径,会默认分配一个路径,见上面1中操作。

(1)启动nginx的时候挂载目录

[email protected]:~# pwd
/root
[email protected]:~# docker run -d -p 8085:80 -v $PWD/html:/usr/share/nginx/html --name nginx hub.c.163.com/library/nginx

  $PWD/html 代表/root/html目录,这个目录不存在也可以,会自动创建目录,是本地目录。

  /usr.share/nginx/html 代表的是容器中的目录。

(2)inspect 检查容器

[email protected]:~# docker inspect nginx

重要的信息如下:

        "Mounts": [
            {
                "Type": "bind",
                "Source": "/root/html",
                "Destination": "/usr/share/nginx/html",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],

(3)本地/root/html目录下新增index.html

[email protected]:~/html# echo "test" > index.html
[email protected]:~/html# ls
index.html
[email protected]:~/html# cat index.html
test

(4)进入容器查看

[email protected]:~/html# docker exec -it 6 bash #交互式进入容器
[email protected]:/# cat /usr/share/nginx/html/index.html  #查看内容
test

(5)浏览器访问

3.--volumes-from 指定从另一个容器中挂载数据目录实现容器间数据共享

  如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷。数据卷容器也是一个容器,但是它的目的是专门用来提供数据卷供其他容器挂载,不启动容器,只是用来作为数据容器。

(1)创建数据目录,并且创建数据容器。因为是数据容器所以只创建不启动,也就是docker create。

[email protected]:~# mkdir ./container_data #创建数据目录
[email protected]:~# ls
container_data  html
[email protected]:~# docker create -v $PWD/container_data:/var/mydata --name container_data alpine  #创建一个容器,只创建不启动。并且指定本地数据目录
2d64a1cc5059b2228bc35a8224b04d6c8a4f432bb375d8e5012ad8807a18867e
[email protected]:~# docker ps -a
CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS                  NAMES
2d64a1cc5059        alpine                        "/bin/sh"                6 seconds ago       Created                                    container_data
6dd41bf46f52        hub.c.163.com/library/nginx   "nginx -g ‘daemon of…"   29 minutes ago      Up 29 minutes       0.0.0.0:8085->80/tcp   nginx

检查容器

[email protected]:~# docker inspect container_data

重要的挂载信息:

        "Mounts": [
            {
                "Type": "bind",
                "Source": "/root/container_data",
                "Destination": "/var/mydata",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],

(2)启动一个容器查看并用--volumes-from指定引用另一容器的挂载信息

[email protected]:~# docker run -it --volumes-from container_data ubuntu bash

  指定启动一个ubuntu容器,并且数据挂载信息采用  container_data 容器的信息,实现数据共享。

查看挂载信息

[email protected]:/# mount|grep mydata
tmpfs on /var/mydata type tmpfs (rw,relatime,size=911900k)

创建一个文件到/var/mydata 目录下(这是容器中目录):

[email protected]:/# cd /var/mydata/
[email protected]:/var/mydata# ls
[email protected]:/var/mydata# echo "123" > test.txt
[email protected]:/var/mydata# cat test.txt
123

(3)退出容器到本地真实环境下查看:(发现与容器中保持一致)

[email protected]:~# cd container_data/
[email protected]:~/container_data# ls
test.txt
[email protected]:~/container_data# cat test.txt
123

(4)重新启动第二个容器,并进入容器查看文件可以看到已经存在test.txt。前后启动的两个容器实现了数据共享。

[email protected]:~/container_data# docker run -it --volumes-from container_data ubuntu bash #重新启动一个容器,并指定数据卷采用container_data的数据卷信息
[email protected]:/# cd /var/mydata/
[email protected]:/var/mydata# ls
test.txt
[email protected]:/var/mydata# cat test.txt
123

原文地址:https://www.cnblogs.com/qlqwjy/p/12321088.html

时间: 2024-08-01 04:13:28

machine管理虚拟机器、volume数据卷操作的相关文章

Kubernetes volume数据卷

Volume是kubernetes Pod中多个容器访问的共享目录 Kubernetes提供了众多的volume类型,包括:emptyDir.hostPath.NFS.GlusterFS.configMap.Cephfs 1.emptyDiremptyDir类型的vloume在Pod分配到node上时被创建,kubernetes会在node上自动分配一个目录,所以无须指定宿主机node上对应的目录文件,该目录初始化内容为空,当Pod从node上被移除时,emptyDir中的数据会被永久删除 1.

Docker学习第三天(Docker数据卷管理)

1.Docker数据卷管理 在Docker中,要想实现数据的持久化(所谓Docker的数据持久化即数据不随着Container的结束而结束),需要将数据从宿主机挂载到容器中.目前Docker提供了三种不同的方式将数据从宿主机挂载到容器中: 1.volumes:Docker管理宿主机文件系统的一部分(默认文件位置:/var/lib/docker/volumes) 常用 由上图可知我们到了 /var/lib/docker/volumes 目录下有的文件名很长这时匿名 二有的则是我们创建时制定的 2.

Docker 学习笔记【2】 Docker 基础操作实,Docker仓库、数据卷,网络基础学习

Docker 学习笔记[3] Docker 仓库实操,创建私有仓库,实操数据卷.数据卷容器,实操 网络基础  ---------高级网络配置和部分实战案例学习 ============================================================= Docker 学习笔记[1]Docker 相关概念,基本操作--------实操记录开始 ============================================================= 被

docker数据卷之持久化操作

docker Docker三大核心组件:(运行起来的镜像就可以称作容器) Docker 镜像--Dcoker images:类比与类 Docker 仓库--Docker registeries: Docker 容器-- Dcoker conrainers:类比于实例化的对象 仓库(registry)--repo(Repository)-->镜像(按版本区分) 共有库 docker.io 私有库 yum库-->不同repo-->软件(按名字区分) docker底层原理 Docker是一个c

[docker]动态挂卷与数据卷管理

声明: 本博客欢迎转发,但请保留原作者信息! 博客地址:http://blog.csdn.net/halcyonbaby 内容系本人学习.研究和总结,如有雷同,实属荣幸! 动态挂卷 目前docker不支持动态挂卷.有同事就提出,以下方法是否可行:1. 将块设备通过ln链接到容器与host的映射目录.2. 将块设备挂载到容器与host的映射目录. 以下是实验过程:由于非特权无法看到/dev下的设备,因此ln链接实际是无效的. 同理,对于其他块设备,也是这样的.当然,我们可以配置privileged

Docker 快速上手系列(4): 数据卷,数据卷容器的概念及相关操作

引子 有些时候,我们的服务运行时必不可少的会产生一些日志,或是我们需要把容器内的数据进行备份,甚至多个容器之间进行数据共享,这必然涉及容器的数据管理操作. 容器中管理数据主要有两种方式: 数据卷 数据卷容器 数据卷是一个可供容器使用的特殊目录,它绕过文件系统,可以提供很多有用的特性: - 数据卷可以在容器之间共享和重用 - 对数据卷的修改会立马生效 - 对数据卷的更新,不会影响镜像 - 卷会一直存在,直到没有容器使用 #(类似linux下的挂载(mount)) 创建数据卷 在用Docker ru

Docker之七:Docker数据卷管理

容器数据持久化 1.数据卷:将本地磁盘mount进入容器-v /dest-v src:dst [ro]|[rw] 2.数据卷容器:将外部容器分享给容器--volumes-from数据卷容器专门用来挂载数据卷的容器,以供其他容器引用和使用 3.数据卷管理命令docker volume 一.数据卷:1.给容器内部映射一个外部数据卷 -v src:dest[[email protected] nginx]# docker run -d --name web1 -v /opt/nginx:/usr/sh

Docker之数据卷Volume(七)

一.简介 Docker数据卷(volume)机制.volume是存在于一个或多个容器中的特定文件或文件夹,这个目录以独立于联合文件系统的形式在宿主机中存在,并为数据的共享与持久化提供便利. 1)volume在容器创建时就会初始化,在容器运行时就可以使用其中的文件 2)volume能在不同的容器之间共享和重用 3)对volume中数据的操作会马上生效 4)对volume中数据的操作不会影响到镜像本身 5)volume的生存周期独立于容器的生存周期,即使删除容器,volume仍然会存在,没有任何容器

docker数据卷管理及网络基础配置

数据卷 数据卷容器 数据卷迁移数据 端口映射 容器间通信 数据卷的管理 当需要查看容器内应用产生的数据或者把容器内数据备份及多个容器数据共享.有两种方式,数据卷以及数据卷容器. 数据卷 数据卷是一个可供容器使用的特殊目录,它绕过文件系统,特性如下: 数据卷可以在容器之间共享和重用 对数据卷的修改会立马生效 对数据卷的更新不会影响镜像 卷会一直存在,直到没有容器使用 其使用类似与mount操作. 在容器内创建一个数据卷 #docker run -d -P --name web -v /webapp