Linux下安装docker

今天,daimajia推荐使用docker,其实一直都听过docker,但没用过,今天参考几篇文档把docker搞定了。果然起的速度比一般虚拟机快

这个总结主要是整理工作,大部分内容都在文章最后的文档里已经有说明。


我的电脑是ubuntu14.04 安装的话用包源进行安装

$ sudo apt-get install apt-transport-https
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
$ sudo bash -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"
$ sudo apt-get update
$ sudo apt-get install lxc-docker

然后根据文章末尾给定的文章搞的。



我一开始下的fedora21,问题好多,比如yum源的问题,命令缺少的问题,搞到最后还是换成了ubuntu。ubuntu命令比较齐全,route,ifconfig等一些基本命令都已经有了。

接下来碰到一个问题:没有iptables,我安装完之后报错:

root@fc9caf09dbaa:/# iptables -nL
iptables v1.4.21: can't initialize iptables table `filter': Permission denied (you must be root)
Perhaps iptables or your kernel needs to be upgraded.

解决方案就是在启动docker的时候添加下面这个参数:

--privileged=true
docker run --privileged=true -t -i ubuntu_2 /bin/bash

因为有些功能被禁用了。。。一开始我还以为需要重新编译内核,看来不需要。



下面这个是docker的网络拓扑图:



多台虚拟机都是连接在docker0这个虚拟交换机上,再通过port(这个名词好像应该叫interface)连接在宿主机上。这个拓扑不复杂。登录两台虚报机相互ping一下,检查是否连通。实践证明一切OK。

再检查是否可以连通外网,事实证明也可以,看来docker已经帮我们设置好数据包NAT转发了。

其实docker的拓扑可以修改,添加网桥,划分网络等一些二层的功能,但不具备三层添加路由器的功能。

比如,重新新建网桥并删除原网桥:

除了默认的 docker0 网桥,用户也可以指定网桥来连接各个容器。
在启动 Docker 服务的时候,使用 -b BRIDGE或--bridge=BRIDGE 来指定使用的网桥。
如果服务已经运行,那需要先停止服务,并删除旧的网桥。

$ sudo service docker stop
$ sudo ip link set dev docker0 down
$ sudo brctl delbr docker0

然后创建一个网桥 bridge0。

$ sudo brctl addbr bridge0
$ sudo ip addr add 192.168.5.1/24 dev bridge0
$ sudo ip link set dev bridge0 up

查看确认网桥创建并启动。

$ ip addr show bridge0
4: bridge0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state UP group default
link/ether 66:38:d0:0d:76:18 brd ff:ff:ff:ff:ff:ff
inet 192.168.5.1/24 scope global bridge0
valid_lft forever preferred_lft forever
配置 Docker 服务,默认桥接到创建的网桥上。
$ echo 'DOCKER_OPTS="-b=bridge0"' >> /etc/default/docker
$ sudo service docker start

启动 Docker 服务。 新建一个容器,可以看到它已经桥接到了 bridge0 上。
可以继续用 brctl show 命令查看桥接的信息。另外,在容器中可以使用 ip addr 和 ip route 命令来查看 IP 地址配置和路由信息。



有一个比较恶心的就是,每次用完虚拟机如果更新过资源,记得退出时候把虚拟机commit一下,否则虚拟机不会保存下来。

命令:

$ sudo docker commit -m "Changed some resource" -a "myUsrname" 0b2616b0e5a8 newVirt
其中各个参数含义如下:

Create a new image from a container's changes

  -a, --author=""     Author (e.g., "John Hannibal Smith <[email protected]>")
  -m, --message=""    Commit message
  -p, --pause=true    Pause container during commit
0b2616b0e5a8为刚退出container ID,可以通过docker ps -l -q获取

这些命令和git有些类似。




还有一个小问题就是每次输入都要sudo权限,神烦,可以通过添加用户组来解决:

# 添加docker用户组
$ sudo groupadd docker
# 把自己加到docker用户组中
$ sudo gpasswd -a myusername docker
# 重启docker后台服务
$ sudo service docker restart
# 注销,然后再登陆
$ exit


再还有别的问题可以参考文档。以下为本文参考文档:

http://yeasy.gitbooks.io/docker_practice/content/image/create.html
https://docker.cn/p/docker-15-tips/
http://ikarishinjieva.github.io/tachikoma-blog/post/2014-07-10-docker-some-error/




郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。