fswdnr 发表于 2015-10-13 07:16:37

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=truedocker 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=&quot;-b=bridge0&quot;' >> /etc/default/docker
$ sudo service docker start


启动 Docker 服务。 新建一个容器,可以看到它已经桥接到了 bridge0 上。

可以继续用 brctl show 命令查看桥接的信息。另外,在容器中可以使用 ip addr 和 ip route 命令来查看 IP 地址配置和路由信息。
  
  


  


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

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

Create a new image from a container's changes
-a, --author=&quot;&quot;   Author (e.g., &quot;John Hannibal Smith <hannibal@a-team.com>&quot;)
-m, --message=&quot;&quot;    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
  


  其余基本命令:
  移除镜像:
  

$ sudo docker rmi training/sinatra
Untagged: training/sinatra:latest
Deleted: 5bc342fa0b91cabf65246837015197eecfa24b2213ed6a51a8974ae250fedd8d
Deleted: ed0fffdcdae5eb2c3a55549857a8be7fc8bc4241fb19ad714364cbfd7a56b22f
Deleted: 5c58979d73ae448df5af1d8142436d81116187a7633082650549c52c3a2418f0
  
  



删除所有停止运行的容器:  

docker ps -a -q | xargs docker rm
  删除某个image:
  docker images查看后docker rmi
  


  外部访问容器:
  直接docker run 即可






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

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/


  
  


  



版权声明:本文为博主原创文章,未经博主允许不得转载。
页: [1]
查看完整版本: Linux下安装docker