从零开始学习Docker(二、区分docker环境和docker虚拟机环境)
来源:互联网 发布:网络运营培训班 编辑:程序博客网 时间:2024/06/05 20:14
从零开始学习Docker(二、区分docker环境和docker虚拟机环境)
Docker运行环境(为简便起见,我在这里称之为docker shell)和虚拟机环境(此处称之为docker vm shell)是两个不同的环境,如果不理解这一点,后面的学习,特别是涉及到目录访问的操作,就会迷惑不解。
什么是docker环境(docker shell)
docker shell是一个负责与docker服务器端进程通信的命令行程序,它也是Linux内核。docker启动时默认创建或启动一个default虚拟机,在当前环境执行的docker命令,默认都作用到default虚拟机上。
我用的操作系统是Windows7,安装docker toolbox后,桌面上就有了Docker QuickStart Terminal快捷键,双机开启进入默认虚拟机。现在进入的其实是docker shell,而不是docker vm shell。如下图所示:
表面上看,docker shell启动时,必然会启动default虚拟机,两个貌似是一个东西,但docker shell就是docker shell,你可以把它想象成一个独立的操作系统,只不过默认在里面运行了一套default虚拟机而已。在docker shell中执行如下命令,目的是在docker环境根目录下创建一个testDockerShell文件夹,以备后验:
mkdir /testDockerShell
docker虚拟机环境
实现这一点,必须要知道虚拟机的IP地址,在docker shell中输入下面的命令,查看其ip地址:
docker-machine ls
docker虚拟机连接推荐使用XShell终端程序。新建连接,输入docker虚拟机IP地址,连接用户名为docker,密码为tcuser,这是每个docker虚拟机初始的用户名和密码。连接成功后即进入了docker虚拟机环境,我们称之为docker VM shell。如下图:
在docker VM shell中输入 ls /
命令,其根目录下的内容与docker shell是不一样的。足以证明,这是两个不同的环境。一定要理解。
两个环境之间的关系
一句话,docker shell与docker vm shell之间是母子关系。所有的docker虚拟机必须在docker shell 中使用docker-machine create命令创建。而一旦创建完成,docker虚拟机可以使用docker shell操作,也可以使用其他的shell操作。正所谓“儿大不由娘”。
容易混淆两个环境概念的场景
docker 官方文档Get Started,Part5中,配置redis服务,docker-compose.yml文件中代码片段如下:
redis: image: redis ports: - "6379:6379" volumes: - /home/docker/data:/data deploy: placement: constraints: [node.role == manager] command: redis-server --appendonly yes networks: - webnet
其中volumes属性:将虚拟机中的/home/docker/data目录映射到container的/data目录,这样可以使得,redis数据保存到container的同时,也就保存到虚拟机上了,两个数据其实是同一份数据。可以避免虚拟机重启后redis原有的数据丢失。
容易混淆的错误操作是:在docker shell上mkdir /home/docker/data -p
这样会导致redis服务由于在虚拟机上找不到该目录而不能启动,error:”invalid mount config for type”或者”invalid bind mount source”。
正确做法:在docker vm shell上执行:
mkdir /home/docker/data -p
然后再在docker shell上部署服务:
docker stack deploy -c docker-compose.yml <service name> --with-registry-auth
- 从零开始学习Docker(二、区分docker环境和docker虚拟机环境)
- Docker学习总结(13)——从零开始搭建Jenkins+Docker自动化集成环境
- docker基础环境学习
- Docker Machine快速安装Docker环境(二)
- Docker教程(二) Docker环境安装
- 虚拟机安装alpine+docker环境
- Docker实战(十一):Docker安装ELK环境(二)
- Docker实战(十一):Docker安装ELK环境(二)
- Docker实战(十一):Docker安装ELK环境(二)
- Docker Machine快速安装Docker环境(二)
- Docker学习--环境搭建和使用
- Docker学习总结——从零开始搭建Jenkins+Docker自动化集成环境
- 从零开始,在Docker环境部署Hadoop
- 从零开始搭建Jenkins+Docker自动化集成环境
- 从零开始搭建Jenkins+Docker自动化集成环境
- Docker学习文档之二 搭建环境-Windows环境
- Docker学习文档之二 搭建环境-Linux环境
- Docker学习(二)Docker架构
- redis 运维实际经验纪录之一
- netcat网猫
- JDBC学习04-C3P0连接池:下载和使用方法
- 生活小记53
- iOS11 instrument和真机测试的新玩法--无线调试模式(connect via network)
- 从零开始学习Docker(二、区分docker环境和docker虚拟机环境)
- 关联容器set map
- 进程控制编程
- JAVA中的反射机制
- 关于log4j和slf4j的使用说明
- python linkedhashset 简单实现,使用OrderedDict
- 微信公众号支付(二)下单支付
- javax.xml.ws.Service 报错The constructor Service(URL, QName, WebServiceFeature[]) is undefined的解决方案
- Linux系统编程学习笔记(5)-基本shell脚本编程