docker学习(1) 安装
docker是啥就不多讲了,简言之就是更轻量、更牛叉的新一代虚拟机技术。下面是安装步骤:
一、mac/windows平台的安装
docker是在linux内核基础上发展而来的,无法直接运行在mac/windows上,需要借助docker-machine工具,先在mac/windows上建一个linux的虚拟机,然后才能继续玩下去。默认内置的虚拟机引擎是Oracle的免费软件VirtualBox,可支持vmware fusion之类的商业软件。
1.1 下载docker toolbox
下载地址:http://www.docker.com/docker-toolbox ,toolbox已集成了docker-machine,docker client,virtualbox之插件,强烈建议在mac/windows上学习docker的同学用这种方式安装docker(注:虽然mac上也可以通过brew install 方式安装,但是没有图形界面,学习起来不方便)。
安装过程很简单,一路Next就可以了,唯一要注意的是最后一个界面:

docker toolbox提供了二种运行方式,终端命令行及图形界面,建议初学者选择图形界面,以降低学习难度。
进入后,会要求先创建一个docker hub的账号,注册账号完成邮箱验证后,就能进入了,docker hub上提供了大量的docker镜像文件(可以理解各种虚拟机的模板,不过建议翻~*墙,否则速度奇慢,甚至打不开),基本上可以满足各种要求,比如:需要一个持续集成的虚拟机,可以直接使用jenkins镜像,需要一个mysql,可以直接使用mysql镜像...

天朝的程序员估计是全世界幸福感最差的程序员,所有外国的好东西,要么不能用,要么龟速,docker hub下载巨慢,第1次接触慢慢等吧,后面会介绍如何使用国内daocloud的代理进行加速。
注:toolbox并没有提供卸载工具,如果出于某种原因需要卸载,可利用https://github.com/docker/toolbox/blob/master/osx/uninstall.sh 这个脚本完成,脚本内容如下:
#!/bin/bash
# Uninstall Script
if [ "${USER}" != "root" ]; then
echo "$0 must be run as root!"
exit 2
fi
while true; do
read -p "Remove all Docker Machine VMs? (Y/N): " yn
case $yn in
[Yy]* ) docker-machine rm -f $(docker-machine ls -q); break;;
[Nn]* ) break;;
* ) echo "Please answer yes or no."; exit 1;;
esac
done
echo "Removing Applications..."
rm -rf /Applications/Docker
echo "Removing docker binaries..."
rm -f /usr/local/bin/docker
rm -f /usr/local/bin/docker-machine
rm -r /usr/local/bin/docker-machine-driver*
rm -f /usr/local/bin/docker-compose
echo "Removing boot2docker.iso"
rm -rf /usr/local/share/boot2docker
echo "All Done!"
上面的脚本并没有删除virtualbox,如果连virtualbox也要卸载,自行到Application面板里,把virtualbox拖到垃圾箱里即可。
1.2 下载镜像
先选一个小点儿的镜像感受下,比如:用kitematic/hello-world-nginx测试下nginx

点击New,搜索nginx就能找到,其文档地址为:https://hub.docker.com/r/kitematic/hello-world-nginx/,通过GUI界面下载的过程,等效于下面的命令:
docker pull kitematic/hello-world-nginx
1.3 一些常规操作
下图是KI的GUI界面,打红圈的地方可以直接操作,工具栏里的Start点击一下,把nginx容器运行起来

点击上图中"浏览nginx首页"的按钮,就可以直接在浏览器里看到nginx首页了,很方便吧!工具栏里的STOP/RESTART这些按钮看名字就知道用途了,不再啰嗦。
可以有同学注意到了,浏览器里的地址类似:http://192.168.99.100:32774,如果想知道为啥是这个IP及端口,可以看下Ports页,如下图:

上图的意思是,将docker容器中的80端口,映射到虚拟机的32774端口,那么问题来了,192.168.99.100又是哪里来的?

点击左下角的DOCKER CLI,就能进入docker终端,然后运行:
docker-machine ls
会显示出当前创建的虚拟机(还记得本文最开头说的,mac上不能直接运行docker,必须先创建一个linux虚拟机吧),输出的default就是虚拟机的名字,然后再运行:
docker-machine ip default
就能看到virtual box给虚拟机default分配的IP. 继续,点击下图中的Exec,将进入nginx docker容器的bash命令行模式:

输入nginx -V查看配置文件的位置:

可以看出配置文件为/etc/nginx/nginx.conf,用cat命令查看一下:

从上图看,网站的根目录为/website_files,回到KI中,点击Volumns标签

可以看到实际是上把mac本机的~/Documents/Kitematic/hello-world-nginx/website_files 映射到docker容器实例中的/website_files,大家可以尝试把mac本机~/Documents/Kitematic/hello-world-nginx/website_files 中的index.html修改下,再刷新下浏览器中nginx页面,应该马上就能看到效果了。
1.4 docker 命令行的秘密
如果直接在mac本机打开一个终端,然后输入docker ps之类的命令,会提示
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
但是从KI界面点击DOCKER CLI进入终端后,再输入docker ps,能正常显示正在运行的容器信息:

原因在于:通过KI进入终端后,会先执行
bash -c "clear && DOCKER_HOST=tcp://192.168.99.100:2376 DOCKER_CERT_PATH=/Users/yjmyzz/.docker/machine/machines/default DOCKER_TLS_VERIFY=1 /bin/zsh"
大家在docker CLI终端里,按一下向上的箭头就能发现这个秘密了,把这一行长长的命令换行整理一下,
bash -c "
clear &&
DOCKER_HOST=tcp://192.168.99.100:2376
DOCKER_CERT_PATH=/Users/yjmyzz/.docker/machine/machines/default
DOCKER_TLS_VERIFY=1
/bin/zsh"
并没有什么特别之处,就是定义了几个bash变量而已,上面这一段不用死记,可以简化成:
docker-machine start default #启动虚拟机default,如果vm未启动的话,先执行这一行
docker-machine env default #获取default的环境变量
第二行执行完以后,会输出:
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/Users/yjmyzz/.docker/machine/machines/default"
export DOCKER_MACHINE_NAME="default"
# Run this command to configure your shell:
# eval $(docker-machine env default)
注意最后一行,按提示复制 eval $(docker-machine env default),然后执行一下,bash终端就有docker的上下文环境,然后执行docker ps之类的,就不会报错了。
类似的,点击顶部工具栏上的EXEC,实际上等效于
bash -c "clear && DOCKER_HOST=tcp://192.168.99.100:2376 DOCKER_CERT_PATH=/Users/yjmyzz/.docker/machine/machines/default DOCKER_TLS_VERIFY=1 docker exec -it hello-world-nginx sh"
换行整理一下:
bash -c "
clear &&
DOCKER_HOST=tcp://192.168.99.100:2376
DOCKER_CERT_PATH=/Users/yjmyzz/.docker/machine/machines/default
DOCKER_TLS_VERIFY=1
docker exec -it hello-world-nginx sh"
只是多了最后一行,所以上面这一段相当于:
eval $(docker-machine env default)
docker exec -it hello-world-nginx sh
二、linux平台的安装(以centos为例)
注意:centos要求7以上版本,低版本的内核docker不支持。
curl -sSL https://get.daocloud.io/docker | sh
sudo chkconfig docker on
sudo systemctl start docker
3行代码就搞定了,其中第1行,是从国内daocloud公司下载的,如果你想从官网下载,可以改成 sudo yum install docker 或 curl -sSL https://get.docker.com/ | sh, 安装完成后,执行:
sudo systemctl status docker
查看docker deamon状态,如果有active(running)字样输出,表示docker运行正常.
参考文章:
https://docs.docker.com/engine/installation/centos/
docker学习(1) 安装的更多相关文章
- 一、docker学习笔记——安装docker
系统win10 企业版 1.下载docker CE 2.安装.注意,由于docker 与Oracle VM VirtualBox 冲突,在windows平台上二者不可共存.你只能2选1!! 3.如果d ...
- Docker学习日记-安装Docker
Docker是什么: 简单理解就是基于go语言开发的开源的应用容器引擎. 对进程进行封装隔离,属于操作系统层面的虚拟化技术. Docker的优势: 1.更高效的利用系统资源 2.更快速的启动时间 3. ...
- docker学习笔记-安装
安装docker Ubuntu Docker 安装 Docker 支持以下的 Ubuntu 版本: Ubuntu Precise 12.04 (LTS) Ubuntu Trusty 14.04 (LT ...
- Docker学习3-CentOS安装Docker
CentOS安装:Docker-ce ( Docker Community Edition ) 第一步:$ sudo yum install -y yum-utils device-mapper-pe ...
- docker学习总结--安装、卸载
参考:http://blog.csdn.net/u012562943/article/details/50463400 https://docs.docker.com/engine/getstarte ...
- docker学习4-docker安装mysql环境
前言 docker安装mysql环境非常方便,简单的几步操作就可以了 拉取mysql镜像 先拉取mysql的镜像,可以在docker的镜像仓库找到不同TAG标签的版本https://hub.docke ...
- Docker学习(2) 安装
1 在Ubanru中安装 简单安装: 2 windows安装docker 3 OS X 安装docker
- Docker学习之安装mysql
1.从Docker检索mysql镜像 指令: docker search mysql 2.镜像下载 指令: docker pull mysql:5.7.19 3.查看本地镜像列表 指令: docker ...
- 三、docker学习笔记——安装postgresql
1.docker pull postgres 2.docker run --name postgres -e POSTGRES_PASSWORD=123456 -p 5432:5432 -d post ...
随机推荐
- J2EE 邮件发送那些事儿
距离自己写的关于java邮件发送的第一篇博客已经有很长一段时间了,现在回过头看看.虽然代码质量方面有待提高,整体结构也不怎样,但是基本思路和过程还是比较纯的.现在有空写写J2EE中邮件发送的开发,实际 ...
- Rafy 框架 - 幽灵插件(假删除)
Rafy 框架又添新成员:幽灵插件.本文将解释该插件的场景.使用方法.原理. 场景 在开发各类数据库应用系统时,往往需要在删除数据时不是真正地删除数据,而只是把数据标识为'已删除'状态.这些数 ...
- .NET 同步与异步之封装成Task(五)
本随笔续接:.NET 实现并行的几种方式(四) 前篇随笔已经介绍了几种可以实现并发的方式,其中异步方法.是最简便的方式.而 异步方式是基于 Task 和 async修饰符和await运算符实现的. 换 ...
- shell编程
最吸引人的莫过于及时看到成果的努力,echo就是最好的初学者反馈函数,因为它的存在你可以及时的打印出结果. 1.分支 if[ ]:then elif ;then else fi 2.简单的循环,循环是 ...
- linux中~和/的区别
- R语言:常用统计检验
统计检验是将抽样结果和抽样分布相对照而作出判断的工作.主要分5个步骤: 建立假设 求抽样分布 选择显著性水平和否定域 计算检验统计量 判定 -- 百度百科 假设检验(hypothesis test)亦 ...
- 弹出iframe内嵌页面元素到父页面并全屏化
(注册博客好久了,一直没舍得添砖加瓦,主要是每次想写点东西的时候,随便搜一搜发现都比我总结的都要好,甚感尴尬,但是总是要开始的,所以这就是我的第一篇博客,也绝不会是最后一篇,废话不多说,直接入正题) ...
- 记处理线上记录垃圾日志 The view 'Error' or its master was not found
最近监控线上日志,网站是ASP.NET MVC 开发的,发现不少错误日志都记录同样的内容: The view 'Error' or its master was not found or no vie ...
- 使用WebRTC搭建前端视频聊天室——入门篇
http://segmentfault.com/a/1190000000436544 什么是WebRTC? 众所周知,浏览器本身不支持相互之间直接建立信道进行通信,都是通过服务器进行中转.比如现在有两 ...
- directx12中vetex buffer、index buffer和constant buffer绑定piple line的时机
类别 时机 函数 建Heap vetex buffer 在Draw函数中 ID3D12GraphicsCommandList::IASetVertexBuffer 否 index buffer 在Dr ...