docker 容器的文件系统在宿主机上存在的方式很复杂,这会带来下面几个问题:
为了能够 保存(持久化) 数据以及 共享 容器间的数据,docker 引入了数据卷(volume) 机制。数据卷是存在于一个或多个容器中的特定文件或文件夹,它可以绕过默认的联合文件系统,以正常的文件或者目录的形式存在于宿主机上。
其生存周期独立于容器的生存周期。
容器中主要有 两种 管理数据方式: 数据卷(Data Volumes) , 数据卷容器(Data Volume Containers) 。
数据卷是一个可供容器使用的特殊目录,它绕过文件系统,可以提供很多有用的特性:
数据卷的使用类似 linux 下对目录或文件进行 mount *** 作,目前Docker提供了 三种 不同的方式将数据从宿主机挂载到容器中,分别是
其中 volume 、 bind mount 比较常用, tmpfs mount 基本不会用
volumes作为Docker管理宿主机文件系统的一部分 ,默认位于 /var/lib/docker/volumes 目录中,不是宿主机已有数据,而是新建的。
docker 专门提供了 volume 子命令来 *** 作数据卷:
先创建一个名称为 hello 的数据卷并通过 ls 命令进行查看:
然后可以使用 inspect 命令看看数据卷hello的详细信息
该数据卷使用的 Driver 为默认的 local ,表示数据卷使用宿主机的本地存储;
Mountpoint 是 volumes 的挂载点,默认是本机 /var/lib/docker/volumes 下的一个目录。
所有Container的数据都保存在了这个目录下边,由于没有在创建时指定卷,所以Docker帮我们默认创建许多匿名卷。
使用 -v 选项也可以指定挂载一个本地的已有目录到容器中去作为数据卷:
docker run -it –-name robot1 -v /var/data:/opt/mydata ros/kinetic /bin/bash
上面的命令挂载主机的 /var/data 目录到容器的 /opt/mydata 目录。
这个功能在测试的时候特别方便,比如用户可以放置一些程序或数据到本地目录中,然后在容器中使用。另外,本地目录的路径必须是绝对路径,如果目录不存在,Docker 会自动创建。
Docker 挂载数据卷的默认权限是可读写 rw ,用户也可以通过 ro 标记指定为只读:
docker run -it –-name robot1 -v /var/data:/opt/mydata:ro ros/kinetic /bin/bash
加了 :ro 之后,容器内挂载的数据卷内的数据就变成只读的了。
除了把数据卷中的数据存储在宿主机,docker 还允许我们通过指定 volume driver 的方式把数据卷中的数据存储在其它的地方,比如 Azrue Storge 或 AWS 。
通过 vieux/sshfs 驱动把数据卷的存储在云主机上,docker 默认是不安装 vieux/sshfs 插件的,我们可以通过下面的命令进行安装:
docker plugin install --grant-all-permissions vieux/sshfs
然后通过 vieux/sshfs 驱动创建数据卷,并指定远程主机的登录用户名、密码和数据存放目录:
注意:确保指定的远程主机上的挂载点 /home/nick/sshvolume 目录是存在的,否则在启动容器时会报错。
最后在启动容器时指定挂载这个数据卷:
在容器中 /world 目录下 *** 作的文件都存储在远程主机的 /home/nick/sshvolume 目录中。进入容器 testcon 然后在 /world 目录中创建一个文件,然后打开远程主机的 /home/nick/sshvolume 目录进行查看,新建的文件会出现在那里。
当使用 bind mounts 将主机上的目录挂载到容器中时,目录由其在主机上的完整或相对路径引用。
bind mount 和 volume 其实都是利用宿主机的文件系统,不同之处在于volume是docker自身管理的目录中的子目录,所以不存在权限引发的挂载的问题,并且目录路径是docker自身管理的,所以也不需要在不同的服务器上指定不同的路径,不需要关心路径
bind mounts 可以挂载在宿主机系统的任意位置 ,但 bind mount 在不同的宿主机系统是不可移植的,比如Windows和Linux的目录结构是不一样的, bind mount 所指向的 host 目录也不能一样。这也是为什么 bind mount 不能出现在Dockerfile中的原因,因为这样Dockerfile就不可移植了。
如果使用 Bind mounts 挂载 宿主机目录 到 容器内非空目录 ,那么 此容器中的非空目录中的文件会被隐藏 ,容器访问这个目录时能够访问到的文件均来自于宿主机目录。这也是Bind mounts模式和Volumes模式最大的行为上的不同。
挂载存储在宿主机系统的内存中,而不会写入宿主机的文件系统;
这张图说明 bind mount 和 volume 其实都是利用宿主机的文件系统, Bind mounts 模式是将宿主机上的任意文件或文件夹挂载到容器,而 Volumes 本质上是将Docker服务管理的一块区域(默认是 /var/lib/docker/volumes 下的文件夹)挂载到容器。所以 volume 不存在权限引发的挂载的问题,并且目录路径是docker自身管理的,所以也不需要在不同的服务器上指定不同的路径,不需要关心路径。
相对于 bind mount , volume 是Docker Engine在自己的“地盘”分配了一个路径作为挂载点,自己地盘的权限肯定是安排的明明白白。所以,以上挂载宿主机路径的问题都解决了。
在使用 volume 作为数据卷挂载到容器时,直接用 volume 名称代替宿主机路径名就行:
docker run -d -v test_vol:/var/data some_image
这样就将数据卷 test_vol 挂载到了容器内的 /var/data 目录下。
命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器
可以利用数据卷容器对其中的数据卷进行备份、恢复,以实现数据的迁移。
备份
使用下面的命令来备份 mydata 数据卷容器内的数据卷:
sudo docker run --volumes-from mydata -v $(pwd):/backup –-name worker ubuntu tar cvf /backup/backuptar /data
这个命令首先利用 Ubuntu 镜像创建了一个容器 worker。又使用 --volumes-from mydata 参数来让 worker 容器挂载 mydata 容器的数据卷。接下来使用 -v $(pwd):/backup 参数来挂载本地的当前目录到 worker 容器的 /backup 目录。
在 worker 容器启动后,使用了 tar cvf /backup/backuptar /data 命令来将 /data 下内容备份为容器内的 /backup/backuptar,即宿主主机的当前目录下的backuptar。
恢复
如果要恢复数据到一个容器,可以按照下面的 *** 作。首先创建一个带有数据卷的容器 mydata2:
sudo docker run -v /data –-name mydata2 ubuntu /bin/bash
然后创建另一个新的容器,挂载 mydata2 的数据卷,并使用 tar 解压缩备份文件到所挂载的容器卷中:
sudo docker run --volumes-from mydata2 -v $(pwd):/backup busybox tar xvf /backup/backuptar
如果用户需要在容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。数据卷容器其实就是一个普通的容器,专门用它提供数据卷供其他容器挂载。下面简单介绍其使用方法。
首先要创建一个数据卷容器 mydata,并在其中创建一个数据卷挂载到 /data 目录。
sudo docker run -it -v /data –-name mydata ubuntu
然后在其他容器中使用 --volumes-from 来挂载 mydata 容器中的数据卷。例如创建两个容器 mycon1 和 mycon2,并从 mydata 容器挂载数据卷:
sudo docker run -it --volumes-from mydata –-name mycon1 ubuntu
sudo docker run -it --volumes-from mydata –-name mycon2 ubuntu
(注意,命令中没有指定数据卷的信息,也就是说新容器中挂载数据卷的目录和源容器中是一样的。)
此时容器 mycon1 和 mycon2 都挂载同一个数据卷到相同的目录 /data。三个容器任何一个在该目录下写入数据其他容器都能看到。
可以多次使用 --volumes-from 参数来从多个容器挂载多个数据卷。还可以从其他已经挂载了容器的容器来挂载数据卷。并且使用 --volumes-from 参数所挂载数据卷的容器自身并不需要保持在运行状态。
但删除挂载了数据卷的容器时,数据卷并不会被自动删除。如果要删除一个数据卷,必须在删除最后一个还挂载着它的容器时显式的使用 docker rm -v 命令来指定同时删除关联的容器。
如何对已经运行的容器挂载目录?
>环境:
Server:CentOS7
IP:172165200
WebServer:nginx
如果端口无法访问,关闭服务器防火墙
访问 >
Dockerfile 中包括 FROM 、 MAINTAINER 、 RUN 、 CMD 、 EXPOSE 、 ENV 、 ADD 、 COPY 、 ENTRYPOINT 、 VOLUME 、 USER 、 WORKDIR 、 ONBUILD 、 LABEL 等14个指令。
1FROM
格式: FROM image 或 FROM image:tag
含义:Dockerfile中第一条指令必须是FROM指令,且在同一个Dockerfile中创建多个镜像时,可以使用多个FROM指令。
docker1705版本开始,dockerfile中允许使用多个FROM指令,主要是解决编译环境和运行环境分开的问题。 >
目录
一、镜像加速
Docker 默认是从官方镜像地址 Docker Hub 下下载镜像,由于服务器在国外的缘故,导致经常下载速度非常慢。为了提升镜像的下载速度,我们可以手动配置国内镜像加速,让下载速度飚起来。
国内的镜像加速选项较多,如:阿里云,DaoCloud 等。
本文主要说说如何配置阿里云的镜像加速。
21 登录阿里云获取加速信息
>安装一个docker,然后自己用命令行启动另外一个docker
下面是一个启动命令:
<pre t="code" l="bash">nohup docker daemon --selinux-enabled=false --log-driver=journald --storage-driver=overlay \
-H unix:///var/run/docker-bootstrapsock -p /var/run/dockerbootstrappid \
--iptables=false --ip-masq=false --bridge=none --graph=/var/lib/dockerbootstrap \
2> /var/log/docker-bootstraplog 1> /dev/null
注意几点:-H参数需要给出另外一个socket文件名-p给出另外一个pid文件名--graph 给出另外一个存放docker镜像容器的路径名称
Debian / Ubuntu
sudo apt update
sudo apt install dockerio
sudo systemctl enable docker
sudo systemctl start docker
RedHat / CentOS
sudo yum update
sudo yum install dockerio
sudo systemctl enable docker
sudo systemctl start docker
# 以 centos 镜像作为基础镜像,我们启动自己的容器并在其中执行/bin/bash命令
# 注:-t -i 参数用于创建一个虚拟的命令行。
sudo docker run -t -i centos /bin/bash
现在我们已经成功的运行了自己的第一个容器,并且进入到容器的命令行界面中。在容器中,我们执行下面的命令:
yum -y update # 更新软件包
yum install which # 安装which命令
yum install git # 安装Git
安装完成后,按 Ctrl + d 来退出容器的命令行。
# 执行sudo docker ps -a,可以看到被我们终止的容器
CONTAINER ID IMAGE COMMAND CREATED……
da9031d3568f centos:64 /bin/bash 5 minutes ago…
把我们所做的改变提交到一个新的容器:
# 这里我们创建一个自己的基础容器,容器中安装好了文章中所需的常用工具。读者的容器 id 可能与文章中的有所不同,以上一步 docker ps -a 的结果为准。
sudo docker commit da90 custom/base
容器成功提交后,执行 sudo docker images ,我们会看到刚才提交的容器(如下面的结果所示)。我们就以这个容器为基础容器,再来创建一个新的容器。
REPOSITORY TAG IMAGE ID CREATED
custom/base latest 05b6cecd370b 2 minutes ago
centos 64 539c0211cd76 10 months ago
centos latest 539c0211cd76 10 months ago…
步骤2:创建新的容器,并安装 apache
# 以 custom/base 容器为基础,运行一个新的容器。
sudo docker run -t -i custom/base /bin/bash
# 安装 >生产环境,测试环境中,Docker 可以做什么
Docker 是容器管理工具
Docker是一个轻量级、便携式、与外界隔离的容器,也是一个可以在容器中很方便地构建、传输、运行应用的引擎。和传统的虚拟化技术不同的是,Docker
引擎并不虚拟出一台虚拟机,而是直接使用宿主机的内核和硬件,直接在宿主机上运行容器内应用。也正是得益于此,Docker
容器内运行的应用和宿主机上运行的应用性能差距几乎可以忽略不计。
但是 Docker 本身并不是一个容器系统,而是一个基于原有的容器化工具 LXC 用来创建虚拟环境的工具。类似 LXC 的工具已经在生产环境中使用多年,Docker 则基于此提供了更加友好的镜像管理工具和部署工具。
Docker 不是虚拟化引擎
Docker 第一次发布的时候,很多人都拿 Docker 和虚拟机 VMware、KVM 和 VirtualBox
比较。尽管从功能上看,Docker 和虚拟化技术致力于解决的问题都差不多,但是 Docker
却是采取了另一种非常不同的方式。虚拟机是虚拟出一套硬件,虚拟机的系统进行的磁盘 *** 作,其实都是在对虚拟出来的磁盘进行 *** 作。当运行 CPU
密集型的任务时,是虚拟机把虚拟系统里的 CPU
指令“翻译”成宿主机的CPU指令并进行执行。两个磁盘层,两个处理器调度器,两个 *** 作系统消耗的内存,所有虚拟出的这些都会带来相当多的性能损失,一台虚拟机所消耗的硬件资源和对应的硬件相当,一台主机上跑太多的虚拟机之后就会过载。而
Docker 就没有这种顾虑。Docker 运行应用采取的是“容器”的解决方案:使用 namespace 和 CGroup
进行资源限制,和宿主机共享内核,不虚拟磁盘,所有的容器磁盘 *** 作其实都是对 /var/lib/docker/
的 *** 作。简言之,Docker 其实只是在宿主机中运行了一个受到限制的应用程序。
从上面不难看出,容器和虚拟机的概念并不相同,容器也并不能取代虚拟机。在容器力所不能及的地方,虚拟机可以大显身手。例如:宿主机是
Linux,只能通过虚拟机运行 Windows,Docker 便无法做到。再例如,宿主机是 Windows,Windows 并不能直接运行
Docker,Windows上的 Docker 其实是运行在 VirtualBox 虚拟机里的。
Docker 使用层级的文件系统
前面提到过,Docker 和现有容器技术 LXC 等相比,优势之一就是 Docker 提供了镜像管理。对于 Docker
而言,镜像是一个静态的、只读的容器文件系统的快照。然而不仅如此,Docker
中所有的磁盘 *** 作都是对特定的Copy-On-Write文件系统进行的。下面通过一个例子解释一下这个问题。
例如我们要建立一个容器运行 JAVA Web 应用,那么我们应该使用一个已经安装了 JAVA 的镜像。在
Dockerfile(一个用于生成镜像的指令文件)中,应该指明“基于 JAVA 镜像”,这样 Docker 就会去 Docker Hub
Registry 上下载提前构建好的 JAVA 镜像。然后再 Dockerfile 中指明下载并解压 Apache Tomcat 软件到 /opt/tomcat
文件夹中。这条命令并不会对原有的 JAVA 镜像产生任何影响,而仅仅是在原有镜像上面添加了一个改动层。当一个容器启动时,容器内的所有改动层都会启动,容器会从第一层中运行 /usr/bin/java
命令,并且调用另外一层中的 /opt/tomcat/bin
命令。实际上,Dockerfile 中每一条指令都会产生一个新的改动层,即便只有一个文件被改动。如果用过 Git
就能更清楚地认识这一点,每条指令就像是每次 mit,都会留下记录。但是对于 Docker
来说,这种文件系统提供了更大的灵活性,也可以更方便地管理应用程序。
我们Spantree的团队有一个自己维护的含有 Tomcat 的镜像。发布新版本也非常简单:使用 Dockerfile
将新版本拷贝进镜像从而创建一个新镜像,然后给新镜像贴上版本的标签。不同版本的镜像的不同之处仅仅是一个 90 MB 大小的 WAR
文件,他们所基于的主镜像都是相同的。如果使用虚拟机去维护这些不同的版本的话,还要消耗掉很多不同的磁盘去存储相同的系统,而使用 Docker
就只需要很小的磁盘空间。即便我们同时运行这个镜像的很多实例,我们也只需要一个基础的 JAVA / TOMCAT 镜像。
Docker 可以节约时间
很多年前我在为一个连锁餐厅开发软件时,仅仅是为了描述如何搭建环境都需要写一个 12 页的 Word 文档。例如本地 Oracle
数据库,特定版本的
JAVA,以及其他七七八八的系统工具和共享库、软件包。整个搭建过程浪费掉了我们团队每个人几乎一天的时间,如果用金钱衡量的话,花掉了我们上万美金的时间成本。虽然客户已经对这种事情习以为常,甚至认为这是引入新成员、让成员适应环境、让自己的员工适应我们的软件所必须的成本,但是相比较起来,我们宁愿把更多的时间花在为客户构建可以增进业务的功能上面。
如果当时有 Docker,那么构建环境就会像使用自动化搭建工具 Puppet / Chef / Salt / Ansible
一样简单,我们也可以把整个搭建时间周期从一天缩短为几分钟。但是和这些工具不同的地方在于,Docker
可以不仅仅可以搭建整个环境,还可以将整个环境保存成磁盘文件,然后复制到别的地方。需要从源码编译 Nodejs 吗?Docker
做得到。Docker 不仅仅可以构建一个 Nodejs 环境,还可以将整个环境做成镜像,然后保存到任何地方。当然,由于 Docker
是一个容器,所以不用担心容器内执行的东西会对宿主机产生任何的影响。
现在新加入我们团队的人只需要运行 docker-pose up
命令,便可以喝杯咖啡,然后开始工作了。
Docker 可以节省开销
当然,时间就是金钱。除了时间外,Docker 还可以节省在基础设施硬件上的开销。高德纳和麦肯锡的研究表明,数据中心的利用率在 6% -
12% 左右。不仅如此,如果采用虚拟机的话,你还需要被动地监控和设置每台虚拟机的 CPU 硬盘和内存的使用率,因为采用了静态分区(static
partitioning)所以资源并不能完全被利用。。而容器可以解决这个问题:容器可以在实例之间进行内存和磁盘共享。你可以在同一台主机上运行多个服务、可以不用去限制容器所消耗的资源、可以去限制资源、可以在不需要的时候停止容器,也不用担心启动已经停止的程序时会带来过多的资源消耗。凌晨三点的时候只有很少的人会去访问你的网站,同时你需要比较多的资源执行夜间的批处理任务,那么可以很简单的便实现资源的交换。
虚拟机所消耗的内存、硬盘、CPU 都是固定的,一般动态调整都需要重启虚拟机。而用 Docker 的话,你可以进行资源限制,得益于
CGroup,可以很方便动态调整资源限制,让然也可以不进行资源限制。Docker
容器内的应用对宿主机而言只是两个隔离的应用程序,并不是两个虚拟机,所以宿主机也可以自行去分配资源。
Docker 有一个健壮的镜像托管系统
前面提到过,这个托管系统就叫做 Docker Hub Registry。截止到 2015年4月29日,互联网上大约有 14000
个公共的 Docker,而大部分都被托管在 Docker Hub 上面。和 Github 已经很大程度上成为开源项目的代表一样,Docker
官方的 Docker Hub 则已经是公共 Docker 镜像的代表。这些镜像可以作为你应用和数据服务的基础。
也正是得益于此,你可以随意尝试最新的技术:说不定有些人就把图形化数据库的实例打包成了 Docker 镜像托管在上面。再例如
Gitlab,手工搭建 Gitlab 非常困难,译者不建议普通用户去手工搭建,而如果使用 Docker
Gitlab,这个镜像则会五秒内便搭建完成。再例如特定 Ruby 版本的 Rails 应用,再例如 Linux 上的 NET
应用,这些都可以使用简单的一条 Docker 命令搭建完成。
Docker 官方镜像都有 official 标签,安全性可以保证。但是第三方镜像的安全性无法保证,所以请谨慎下载第三方镜像。生产环境下可以只使用第三方提供的 Dockerfile 构建镜像。
Docker Github 介绍:5 秒内搞定一个 Gitlab
关于 Linux 上的 NET 应用和 Rails 应用,将会在以后的文章中做详细介绍。
Docker 可以避免产生 Bug
Spantree 一直是“固定基础设置”(immutable
infrastructure)的狂热爱好者。换句话说,除非有心脏出血这种漏洞,我们尽量不对系统做升级,也尽量不去改变系统的设置。当添加新服务器的时候,我们也会从头构建服务器的系统,然后直接将镜像导入,将服务器放入负载均衡的集群里,然后对要退休的服务器进行健康检查,检查完毕后移除集群。得益于
Docker 镜像可以很轻松的导入导出,我们可以最大程度地减少因为环境和版本问题导致的不兼容,即便有不兼容了也可以很轻松地回滚。当然,有了
Docker,我们在生产、测试和开发中的运行环境得到统一。以前在协同开发时,会因为每个人开发的电脑配置不同而导致“在我的电脑上是能运行的,你的怎么不行”的情况,而如今
Docker 已经帮我们解决了这个问题。
Docker 目前只能运行在 Linux 上
前面也提到过,Docker 使用的是经过长时间生产环境检验的技术,虽然这些技术已经都出现很长时间了,但是大部分技术都还是 Linux
独有的,例如 LXC 和 Cgroup。也就是说,截止到现在,Docker 容器内只能在 Linux 上运行 Linux
上的服务和应用。Microsoft 正在和 Docker 紧密合作,并且已经宣布了下一个版本的 Windows Server 将会支持
Docker 容器,并且命名为 Windows Docker,估计采用的技术应该是Hyper-V
Container,我们有望在未来的几年内看到这个版本。
Docker是一个为开发人员和系统管理员开发、迁移和运行应用程序的平台。应用程序通过Docker打包成DockerImage后,可以实现统一的方式来下载、启动、扩展、删除和迁移,这样方便了应用程序的部署和运维。本文将介绍如何在不同 *** 作系统平台上部署Docker环境的方法。信息Ubuntu:Docker刚推出的时候只支持Ubuntu,后来才一点点开始对其他平台的支持。所以在Ubuntu平台上部署Docker平台还是挺简单的。官方目前支持的版本有UbuntuTrusty1404(LTS)、UbuntuPrecise1204(LTS)、UbuntuSaucy1310。Docker要求64位的系统且内核版本至少为310(如果是Ubuntu1204LTS,则要求内核版本至少是313)。可以使用uname–r命令来确认当前系统的内核版本:$uname-r3110-15-generic可以使用以下命令来升级内核:$sudoapt-getupdate$sudoapt-getinstalllinux-image-generic-lts-trusty$sudoreboot之后就可以安装Docker了:$wget-qO-/boot2docker/osx-installer/releases/latest获得。安装完成后,Boot2Docker位于Applications文件夹。注:Boot2Docker目前只是作为开发工具发布,请不要将其应用在生产环境中。创建Boot2Docker虚拟机:$boot2dockerinit$boot2dockerstart$boot2dockershellinit显示或设置Docker客户端环境变量$boot2dockershellinit$eval"$(boot2dockershellinit)"最后验证安装是否成功:$dockerrunhello-worldWindows:Windows与MACOS相同,也需要安装Boot2Docker工具。安装文件可以在/boot2docker/windows-installer/releases/latest获得。Windows版的Boot2Docker在启动时会自动确认环境变量,因此可以直接验证安装是否成功:$dockerrunhello-world。
测试环境和生产环境能互相转换么 大家做etl任务分测试环境和生产环境吗,各个环境之间怎么切换呢?
一般分 开发,测试,uat,生产环境。切换的话先导出资源库,在导入即可。
通常企业不会直接导数据,而是复制整个生产环境作为测试环境,这样可以保证测试环境的配置和正式系统的一样。
目前测试环境规划时,通常有三套:联调测试环境、功能测试环境、准发布环境。为了更接近用户的真实环境,比如可能会用一些真实的数据来测试软件,这时重点覆盖的用例应当是重要的业务流程,用户最常用的功能,本次新加的功能,对公司利益影响最大的功能等等
运行环境和测试环境 运行环境就是 机子支持软件的条件 比如说有些老游戏不能在windows环境下运行,只能在DOS下运行,就是说该游戏运行环境是DOS
同样测试环境就是能够支持软件进行测试的条件
开发环境跟测试环境于个人来说,通常是一样的。应为通常你就用同一部电脑。
具体说 我开发一个网站
开发环境:windows
tomcat
jdk
·
·
·
Docker Swarm 是官方发布的集群容器管理工具。它的特点是:比较轻量级,无缝支持标准的docker API。 深入浅出Swarm 一文很清晰地讲解了它的架构和命令。本文从零开始搭建并管理一个swarm集群。
准备工作
我们需要先安装 virtualBox 和 vagrant 。通过vagrant来驱动virtualBox搭建一个虚拟测试环境。首先在本地任意路径新建一个空文件夹比如 test ,运行以下命令:
virtual box host
mkdir test
cd test
vagrant init minimum/ubuntu-trusty64-docker
vi Vagrantfile
里面应该有一句 configvmbox = "minimum/ubuntu-trusty64-docker" ,在它的下面添加如下几行代码,相当于给它分配三台虚拟机,一台叫做 manager ,它的IP是 1921683317 ;另两台叫做 node1 和 node2 ,它们的IP是 1921683318 和1921683319 。
Vagrantfile
configvmdefine "manager" do | host |
hostvmhostname = "manager"
hostvmneork "private_neork", ip: "1921683317"
end
configvmdefine "node1" do | host |
hostvmhostname = "node1"
hostvmneork "private_neork", ip: "1921683318"
end
configvmdefine "node2" do | host |
hostvmhostname = "node2"
hostvmneork "private_neork", ip: "1921683319"
end
这个vagrant镜像已经在ubuntu的基础上帮我们安装了docker,用起来很方便。然后分别在三个终端运行以下命令启动并连接三台虚拟机。
virtual box host terminal 1
vagrant up
vagrant ssh manager
virtual box host terminal 2
vagrant ssh node1
virtual box host terminal 3
vagrant ssh node2
搭建环境
想要让swarm管理node,首先得让docker daemon支持TCP。在三台虚拟机上运行以下命令:
manager and node1 and node2
sudo sh -c 'echo DOCKER_OPTS=\"-H tcp:0000:2375 -H unix:/var/run/dockersock\" >> /etc/default/docker'
sudo rm /etc/docker/keyjson # 免得我们用vagrant生成的docker id都一样,删掉了重启docker服务会自动生成一个新的
sudo service docker restart
首先,是可以进 的环境监测站做环境监测工作,其次可以进环境治理公司当技术员(可以是环境监测,也可以其他工作),还可以进仪器公司当仪器设计、仪器检验、仪器应用、仪器售后、仪器咨询、仪器销售,可以进化工厂当化验员等等。
搭建windinws测试环境和linux测试环境有什么区别没明白你想做什么,如果是应用程序测试环境,那安装linux系统,部署应用就行了,如果是测试数据库,就安装数据库软件
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)