您的位置:首页 > 运维架构 > Docker

在物理机上部署 boot2docker 完全攻略

2016-05-26 21:05 519 查看
名称约定:

    部署 boot2docker 的电脑称为“服务端”。

    要链接到 docker 服务端的电脑称为“客户端”。

    home 目录,是当前用户目录。windows 下在 %USERPROFILE% 中,linux 或 OS X 为 ~

准备:

    boot2docker.iso 文件。本范例使用 1.11 版本,可以到 https://github.com/boot2docker/boot2docker/releases 上下载。

    U 盘一个,推荐闪迪酷豆,用于写入 boot2docker.iso,仅仅需要 30 多 MB 的空间,多了也是浪费。

    推荐:在 docker 客户端上准备支持 ssh 协议的软件,windows 下如 xshell 或者 git 等。

    无“分区”的电脑一台作为 docker 服务端(可以是虚机)。

注意:

    在物理机上部署 boot2docker 会清空(服务端)硬盘上的所有数据。请提前将有用数据备份到其他物理介质上。

步骤:

    将 boot2docker.iso 使用软件写入 U 盘,这里推荐 linux 或 OS X 下的 dd 命令。

    将服务端电脑设置成从 U 盘启动。

    推荐步骤:进入服务端操作系统后,使用 ifconfig 查看 ip 。然后在客户端电脑上使用 ssh 连接到服务端电脑上,方便复制黏贴下方 shell 命令。

    注意:

        此处必须保证服务端电脑硬盘的 MBR 是空的,boot2docker.iso 会进行检测。

        如果没有提前清理服务端硬盘数据,可以在服务端上执行 sudo dd if=/dev/zero of=/dev/sda bs=1k count=256 来删除 MBR。

    链接到服务端的 shell 上执行:

    

UNPARTITIONED_HD=`fdisk -l | grep "doesn't contain a valid partition table" | head -n 1 | sed 's/Disk \(.*\) doesn.*/\1/'`

DISK_VENDOR=$(cat /sys/class/block/$(basename $UNPARTITIONED_HD /dev/)/device/vendor /sys/class/block/$(basename $UNPARTITIONED_HD /dev/)/device/model | tr -d "\n")

sudo sed -i "s/VMware, VMware Virtual S/$DISK_VENDOR/g;s/1000M/`free -m | grep Mem | awk '{print $2}'`M/g;s/ext4 -L/ext4 -i 8192 -L/g" /etc/rc.d/automount

sudo sh /etc/rc.d/automount

sudo reboot

    

    最后一行会重启服务端电脑,此时硬盘已经准备好了。之后进行 docker 相关操作会保存在服务端硬盘上,而非内存之中。

变更 docker 用户的密码:

    提示:docker 用户的初始密码是 tcuser,在 github 官网上有纪录。 root 用户貌似没有密码,可以在 docker 下使用 sudo su - r
4000
oot 来切换到 root。

    在 shell 上执行:

    

MYPASS=新密码

printf %s "#!/bin/sh

echo 'docker:`echo $MYPASS | openssl passwd -1 -stdin`' | chpasswd -e

" | sudo tee /var/lib/boot2docker/bootlocal.sh

sudo chmod 755 /var/lib/boot2docker/bootlocal.sh

>.ash_history

    “新密码”要替换成你的密码。

    其中 /var/lib/boot2docker/bootlocal.sh 是 boot2docker 的开机启动配置脚本。可以将自己的自定义操作放入其中。

SSH 免密码登录:

    boot2docker.iso 会同时检测 ~/.ssh/authorized_keys 和 ~/.ssh/authorized_keys2。

    两个文件内容相同。

    但由于 ~ (home)目录是存在于内存中的,会在重启后恢复初始状态,

    boot2docker.iso 原本的解决方案是将 authorized_keys2 文件压缩包写入 MBR 中,会在系统启动时自动释放到 docker 的 home 路径下。

    

    此处使用 /var/lib/boot2docker/bootlocal.sh 来解决此问题。

    

    首先在 /var/lib/boot2docker 下建立 authorized_keys 文本文件,命令: sudo vi /var/lib/boot2docker/authorized_keys

    会切换到 vi 操作界面。

    将其客户端电脑的 ssh 公钥文本黏贴到此处,并保存。ssh 公钥文件在 home 文件夹下的 .ssh 文件夹里。文件名包含 pub 的就是。(此文件由 ssh 客户端软件生成)

    (黏贴后,用 ESC 键退出编辑状态,输入 :wq 保存并退出 vi 界面)

    将下面代码追加到 /var/lib/boot2docker/bootlocal.sh 中,操作同上。

su - docker -c "mkdir ~/.ssh && cat /var/lib/boot2docker/authorized_keys > ~/.ssh/authorized_keys && ln ~/.ssh/authorized_keys ~/.ssh/authorized_keys2"

    这样就能实现远端 ssh 面密码登录 docker 用户了。

    

在客户端电脑上执行 docker 命令:

    到 https://github.com/docker/docker/releases 下载 windows、linux、OS X 的 docker 可执行文件。

    windows 可以直接从 https://aka.ms/tp4/docker 下载 docker.exe 文件。

    然后将其放入客户端 path 环境变量中。

    在客户端 home 文件夹下建立 .docker 文件夹。所有操作均使用 mkdir 命令建立即可。使用资源管理器建立可能无法成功。

    将服务端 ~docker/.docker/ 目录下的 ca.pem cert.pem key.pem 文件复制到客户端的 .docker/ 目录中。

    这三个文件均为文本文件,如果不会复制,可以使用类似 cat ~docker/.docker/ca.pem 命令,分别显示这三个 pem 文件的内容,复制内容到客户端的对应文件中。

    在客户端的环境变量中加入:

DOCKER_HOST=tcp://127.0.0.1:2376

DOCKER_TLS_VERIFY=1

    其中 127.0.0.1 要替换成服务端的 ip 地址。

    此时就可以在客户端上执行 docker 命令来控制服务端的 docker 服务了。

部署 smb (网上邻居)服务:

    使用 docker 命令可以快速搭建 smb 服务,来让客户端方便的访问服务端中的内容。

    执行:

    

docker pull dperson/samba

    由于网络问题,如果不成功,请重复执行,直到成功为止。

    然后执行:

docker run -d --name samba -p 139:139 -p 445:445 -v /volume1:/mount dperson/samba -u "share;123456" -s "volume2;/mount;yes;no;no"

    其中 /volume1 是想要共享的服务端的路径,share 123456 分别为 smb 的账号密码,volume2 为 smb 路径。

    其他详细用法,参考 https://hub.docker.com/r/dperson/samba/ 中的说明。

    

    这时就可以通过 \\此处替换服务端ip地址\volume2 访问服务端的 /volume1 路径了。

    注意:

        boot2docker 将硬盘挂载到类似 /mnt/sda1 的路径之上,其他的路径都是在内存之中的。

        不要将文件放入其他路径。

参考资料:
http://yuanlixg.lofter.com/post/1d2add0a_7524070 http://ahui.us/post/zai_macos_huo_windows_shang_zhi_jie_shi_yong_boot2docker.iso.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: