http://www.cnblogs.com/yjmyzz/p/docker-install-tutorial.html

http://www.cnblogs.com/yjmyzz/p/docker-usage.html

三个大坑:

其一:

-v 参数可以只写前面第一部分,-v /Users/yjmyzz/docker_volumn 这样启动也不会报错,但是这样做的效果,在最新版本的docker(1.9.1)上,只会把本机目录挂到容器中,容器中看不到本机的任何文件,所以一定要记得写:后的部分

其二:

权限问题,mac机上如果从网上down(非apple store官方)了一个文件到本机,该文件甚至保存文件的目录权限,都会被设置成特殊权限@,见下面的截图:

ll -l@ -a

先用这个显示特殊权限的详细信息:

然后用xattr -r -d 详细信息 * 去掉这些特殊权限(参考下图),然后再重新挂到容器中,就能正常使用了

其三:

mac上挂载的本机目录,必须是在~/(即:当前用户的目录)下,类似/opt/www这样的目录,就算给它所有权限,挂到容器中后,也只能看到目录,读不到任何文件,centOS上没这问题。

此外,还可以用命令

1
docker inspect myubuntu

查看此时容器的所有状态,会看到一段长长的json输出,类似下面这样:

90~97行的Mounts节点描述了当前容器挂载的"卷"信息。

最后指出一点:目前docker仅支持在run(创建)容器时使用-v创建卷,对于一个已经start的容器,如果想动态添加卷,是十分困难的。虽然国外有牛人,实现了在容器启动后动态添加卷,但过程十分曲折,而且并不能能用,有兴趣的可以参考下面的文章

如果直接在mac本机打开一个终端,然后输入docker ps之类的命令,会提示

1
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

eval $(docker-machine env default)

docker exec -it hello-world-nginx sh
 

这一节我们来稍微了解下docker原理性的东西

1
docker run -i -t ubuntu /bin/bash

输入上面这行命令,启动一个ubuntu容器时,到底发生了什么?

大致过程可以用下图描述:

首先系统要有一个docker daemon的后台进程在运行,当刚才这行命令敲下时,

1. docker client(即:docker终端命令行)会调用docker daemon请求启动一个容器,

2. docker daemon会向host os(即:linux)请求创建容器

3. linux会创建一个空的容器(可以简单理解为:一个未安装操作系统的裸机,只有虚拟出来的CPU、内存等硬件资源)

4. docker daemon请检查本机是否存在docker镜像文件(可以简单理解为操作系统安装光盘),如果有,则加载到容器中(即:光盘插入裸机,准备安装操作系统)

5. 将镜像文件加载到容器中(即:裸机上安装好了操作系统,不再是裸机状态)

最后,我们就得到了一个ubuntu的虚拟机,然后就可以进行各种操作了。

如果在第4步检查本机镜像文件时,发现文件不存在,则会到默认的docker镜像注册机构(即:docker hub网站)去联网下载,下载回来后,再进行装载到容器的动作,即下图所示

另外官网有一张图也很形象的描述了这个过程:

参考文章:

MAC OSX--docker的更多相关文章

  1. MAC OSX Docker安装教程2018

    1.首先打开Docker商店 Docker商店地址:https://store.docker.com/editions/community/docker-ce-desktop-mac 2.打开后界面如 ...

  2. 在Mac OSX系统的Docker机上启用Docker远程API功能

    在Mac OSX系统的Docker机上启用Docker远程API功能 作者:chszs,未经博主同意不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs D ...

  3. mac osx下django-admin.py出现的问题

    mac osx 下面用django-admin.py创建项目的时候,没创建成功出现django-admin.py编辑文件,这主要的原因是mac osx下面django-admin.py被重命名为dja ...

  4. mac osx 上面部署Django项目 apache+mysql+mod_wsgi

    1.安装Xcode command line tools 首先,编译mysql和Homebrew需要用到Xcode command line tools,所以首先安装command line tool ...

  5. Webstorm 10 for mac osx 注册机,序列号,kegen

    小菜最近get到mac体验机会,早就耳闻mac非常适合做开发,于是迫不及待的安装各种开发工具,不知不觉,轮到前端开发神器webstorm了,看了一下官网的价格,心拔凉拔凉的. 果断搜索注册机,搜到的结 ...

  6. Mac OSX网络诊断命令

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 下面是一些Mac OSX下常用的网络诊断命令.它们能帮助我们发现网络问题.文中提到 ...

  7. Mac OSX上的软件包管理工具,brew 即 Homebrew

    brew 即 Homebrew,是Mac OSX上的软件包管理工具,能在Mac中方便的安装软件或者卸载软件, 只需要一个命令, 非常方便. brew类似ubuntu系统下的apt-get的功能. 安装 ...

  8. Install Ansible on Mac OSX

    from: https://devopsu.com/guides/ansible-mac-osx.html and : https://devopsu.com/guides/ansible-post- ...

  9. 更新Mac OSX XCode后Git 不能使用提示Can't start Git: /usr/bin/git

    更新Mac OSX XCode后Git 不能使用提示Can't start Git: /usr/bin/git 解决办法: 终端运行 sudo xcodebuild -license 同意协议就好了.

  10. Mac OSX下卸载Nodejs

    有时手贱看到新版本就升级,升级后发现一堆模块不能用了,心情好慢慢调,但也有调不好的时候,只能卸载重装低版本的node了. 我的机器环境如下 1. Mac OSX 10.10.3 2. node为0.1 ...

随机推荐

  1. oblique perspective projection

    参考: https://en.wikibooks.org/wiki/GLSL_Programming/Vertex_Transformations <3D游戏与计算机图形学中的数学方法>E ...

  2. NGUI ScrollView中的Bounds

    获取到的Bounds值是固定的,是因为Bounds区域的计算是被动计算,需要主动调用使其刷新 scrollView.InvalidateBounds(); 另外Bounds的Min和Max似乎和NGU ...

  3. Java中的四种引用类型,强引用,软引用,弱引用,虚引用

    对于Java中的垃圾回收机制来说,对象是否被回收的标准在于该对象是否被引用.因此,引用也是JVM进行内存管理的一个重要概念. Java中对象的引用一般有以下4种类型: 1强引用  2软引用  3弱引用 ...

  4. thread_线程创建

    创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口. 这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果.如果需要获取执行结果,就必须通过共享变量或者使用线 ...

  5. 基于libmemcached,php扩展memcached的安装

    基于libmemcached,php扩展memcached的安装 张映 发表于 -- 分类目录: php 标签:libmemcached, memcached, php, 安装 一,为什么要装memc ...

  6. CefSharp 集成谷歌浏览器详解---(一)环境搭建(没测试过,不知道好不好用)

    https://blog.csdn.net/zpyxman/article/details/78538808

  7. myeclipse能启动tomcat但是用startup.bat无法启动

    myeclipse能启动tomcat但是用startup.bat无法启动 这个问题困扰了我一天,把一天的周末时间白白花费了.各种百度,各种尝试都没办法解决.在江湖上闯,难道就只有百度一招吗? 不是,我 ...

  8. js----Navigator对象,查看浏览器信息,Screen对象,查看屏幕信息

    Navigator对象 Navigator 对象包含有关浏览器的信息,通常用于检测浏览器与操作系统的版本. 对象属性: 查看浏览器的名称和版本,代码如下: <script type=" ...

  9. java模拟http请求上传文件,基于Apache的httpclient

    1.依赖 模拟http端的请求需要依赖Apache的httpclient,需要第三方JSON支持,项目中添加 <dependency> <groupId>org.apache& ...

  10. How to convert from BufferedImage to JavaFX 2.2 Image

    http://blog.idrsolutions.com/2012/11/convert-bufferedimage-to-javafx-image/ ———————————————————————— ...