======================
为什么要使用Docker?
======================= 

容器真是个好东西, (1)容器能提供隔离性; (2)容器能打包环境, 简化部署难度; (3)容器具有很好的迁移性, 开发在不同环境中部署. (4) 容器是轻量级.

详细讲解如下:
1. docker能为应用系统提供一个很好的沙箱
比如要部署两套Python Web系统, 一套是基于Python 2.7的, 一套是Python 3, 使用Docker可以很好地隔离两套Python运行环境, 避免相互干扰.
2. docker 简化了环境准备的复杂性.
比如我们需要搭建Oracle/rabbitmq/Redis/Cassandra 开发环境, 每个软件都有自己的依赖lib, 而且不同版本的Linux, 依赖lib的版本很可能不一样, 安装过程都很复杂. 一旦使用 docker, 事情就简单多了.
3. Docker 可以提供一致的运行环境
系统开发过程中经常碰到开发/测试/生产环境不一致的问题, 导致了很多问题. docker 镜像提供除内核之外完整的运行时环境, 这就可以确保各个环境都有一致的运行环境.
4. Docker快速启动更适合于按需扩容场景.

对于企业内部应用开发, Docker 将会改变系统交付形态. 比如我们用Python 开发了一个Web应用. 未使用Docker之前, 上线会很复杂, 需要考虑生产服务器的Python版本是否OK, 是否有必须的依赖包, 最终web应用文件的应该存在哪个路径下. 使用 Docker 之后, 我们可以将Python解析器和依赖包, 连同我们开发的Web应用打包到一个docker镜像中, 简化了系统部署过程, 这点和 Spring Boot的executableJar 打包形式类似, 比Execuable jar 更进一步, docker 可以讲JDK打包进去. 

 

=======================
CentOS 7 安装 Docker
=======================
#安装Docker
sudo yum install docker
#启动Docker服务
sudo service docker start
#随系统自动加载
sudo chkconfig docker on

 

=======================
Docker Toolbox 下载和安装
=======================
Windows 下三个docker安装包:
1. Docker for windows: 适合于window 10高级版, 使用Windows 原生的 Hyper-V 技术.
2. Docker Toolbox on Windows: 适合于Windows7和Windows10版本,使用VirtualBox VM.
3. Docker2Boot: [不推荐] 建议使用Docker Toolbox on Windows或Docker for windows.

我的工作机器是Windows 7, 所以只能使用 Docker Toolbox on Windows, Docker Toolbox 包含下面几个组件:
1. Docker Client for Windows
2. Docker toobox 的管理工具
3. VirtualBox(版本是5)
4. git MSYS-git 命令行工具

Docker Toolbox 可以在官网下载, 或者到aliyun镜像站点下载: https://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/

最新版本的Docker Toolbox 会打包安装 VirtualBox5, 注意我们需要使用管理员权限安装, 在docker toolbox 安装后, 可通过快捷方式 "Docker Quickstart Terminal" 命令行工具启动, 该程序启动过程中, 会自动创建VirtualBox的虚拟机(名称为 default, 镜像是 Boot2Docker.iso), 并通过 VirtualBox headless 工具启动该虚拟机, 该虚拟机Linux已经准备好 docker 的运行环境.

如果Docker Quickstart Terminal运行失败, 很可能是因为 VirtualBox5 的问题造成的. 验证的方法是, 手动使用 VirtualBox5 GUI 打开这个 default 虚拟机, 如果报"不能为虚拟电脑 default 打开一个新任务"等错误, 基本可以确定是 VirtualBox5 的问题, 该问题很难解决, 最有效的方式是安装VirtualBox 4.3.12版本, 访问VirtualBox官网 <https://www.virtualbox.org/wiki/Downloads> 下载, 安装目录要和VirtualBox5一样, 以便 Docker Quickstart Terminal 能找到新装的 VirtualBox 4.3.12.

手动安装 VirtualBox-4.3.12的命令行为(以管理员权限运行):
D:\softwares\VirtualBox-4.3.12-93733-Win.exe -msiparams NETWORKTYPE=NDIS6

=======================
Docker Toolbox 几个命令
=======================
Docker toobox提供三个最主要的工具:
1. docker-machine 工具负责目标机器进行操作, 机器的创建/启停/ssh登陆等, 虽然docker-machine工具可以ssh到受控机上, 但我还是更喜欢使用putty.
2. docker 工具负责容器级的操作, 比如pull镜像/运行容器等.
3. docker-compose 是docker的编排工具, 可以代替 docker run shell 命令.

=======================
docker-machine 命令
=======================
1. docker-machine create 命令, 创建一个新的machine.



docker-machine create --driver virtualbox dev



创建一个基于 virtualbox 的机器, 名为 dev. 除了 virtualbox 类, 还可以是 generic 或 vmwarevsphere/AWS/Azure 等很多候选.  



docker-machine create --driver virtualbox --engine-storage-driver overlay2 test2



创建一个基于overlay2 存储的virtualbox 机器, 名为 test2, boot2docker缺省的存储driver为 aufs

 

2. docker-machine ls 命令: 列出所有的 machine.



docker-machine ls



如果在create 后手工修改了vm的ip后, 将会导致认证不合法, 这样就不能通过 docker-machine ssh 连接到该虚机, 这时候需要做的是, 重新生成证书文件. 

docker hub 映像版本空白 docker hub 镜像站点_Docker

生成证书文件的命令为: docker-machine.exe  regenerate-certs  虚拟机名

3. docker-machine ssh 命令: 通过ssh方式 Login 到machine 或远程执行某个命令. 



docker-machine ssh default 
docker-machine ssh default pwd



4. docker-machine env 命令, 显示machine的环境设置



docker-machine env default
该命令的输出将以Windows 的批处理文件语法呈现指定虚拟机的环境配置, 可以将这些输出在 cmd.exe 执行, 执行后, 就可以直接在 cmd.exe 中执行 docker 命令. 
如果在cmd.exe 中直接执行 docker 操作, 需要先在windows上设置一下环境变量, 这些具体方法是, 
C:\Program Files\Docker Toolbox>docker-machine env default
SET DOCKER_TLS_VERIFY=1
SET DOCKER_HOST=tcp://192.168.99.100:2376
SET DOCKER_CERT_PATH=C:\Users\Administrator\.docker\machine\machines\default
SET DOCKER_MACHINE_NAME=default
SET COMPOSE_CONVERT_WINDOWS_PATHS=true
REM Run this command to configure your shell:
REM @FOR /f "tokens=*" %i IN ('docker-machine env default') DO @%i



 

=======================
进一步了解 boot2docker 虚拟机
=======================
boot2docker 是 Tiny Core Linux 发行版, 专为 Docker 准备, 完全运行在内存中, 大小只有几十M.
boot2docker 虚拟机默认的用户名和密码是: docker/tcuser
boot2docker 虚拟机的IP, 可以使用 docker-machine env 命令获取
命令 sudo -i # 可免密码切换到root 账号.

Boot2Docker VM中多数文件比较特别, 我们即使是修改了, 重启VM后这些文件都还原为原样了. 但下面两个目录例外, 可以持久化保存.
/var/lib/boot2docker 目录, 该目录主要用来定制化VM的一些设置, 比如设置 docker 账号的profile等.
/var/lib/docker 目录, 该目录主要用来保存docker 镜像和容器.

/var/lib/boot2docker/profile 文件中设置网络代理:



export HTTP_PROXY=http://ip:port
export HTTPS_PROXY=http://ip:port
mkdir -p /home/docker/data



 

 

=======================
设置Docker Hub Mirror地址
=======================
可以在pull image的时候指定docker mirror源, 也可以在docker环境中设置mirror源.

# 在pull image时设定国内mirror的方法.  
docker pull registry.docker-cn.com/star7th/showdoc

 绝大多数国内的镜像服务商都需要注册账号, 推荐中科大的Mirror源 https://docker.mirrors.ustc.edu.cn.  下面是在docker 环境中设置mirror源的步骤. 

1. Docker客户端版本1.12或以上, 设置Mirror地址的方法:
Linux下编辑文件 /etc/docker/daemon.json
Windows下编辑文件 %programdata%\docker\config\daemon.json
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

2. 针对Docker客户的版本1.11版或以下 的设置方法, 可以修改 /etc/default/docker 文件, 加入如下参数:
DOCKER_OPTS="--registry-mirror=https://docker.mirrors.ustc.edu.cn"

3. 针对 boot2docker iso, 需要修改 /var/lib/boot2docker/profile 文件, EXTRA_ARGS 参数增加 --registry-mirror 设置.
sudo -i # 免密码切换到root 账号
vi /var/lib/boot2docker/profile
增加 registry-mirror 的设置, 格式如下:

EXTRA_ARGS=" 
--registry-mirror=https://docker.mirrors.ustc.edu.cn
"

4. 使用 docker info 命令查看Mirror站点是否生效.

=======================
参考
=======================
https://linux.cn/article-5586-1.html