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

docker 安装 搭建 使用

2016-12-06 18:46 726 查看
Docker类似虚拟机的概念,但是与虚拟化技术的不同点在于下面几点:

1.虚拟化技术依赖物理CPU和内存,是硬件级别的;而docker构建在操作系统上,利用操作系统的containerization技术,所以docker甚至可以在虚拟机上运行。

2.虚拟化系统一般都是指操作系统镜像,比较复杂,称为“系统”;而docker开源而且轻量,称为“容器”,单个容器适合部署少量应用,比如部署一个redis、一个memcached。

3.传统的虚拟化技术使用快照来保存状态;而docker在保存状态上不仅更为轻便和低成本,而且引入了类似源代码管理机制,将容器的快照历史版本一一记录,切换成本很低。

4.传统的虚拟化技术在构建系统的时候较为复杂,需要大量的人力;而docker可以通过Dockfile来构建整个容器,重启和构建速度很快。更重要的是Dockfile可以手动编写,这样应用程序开发人员可以通过发布Dockfile来指导系统环境和依赖,这样对于持续交付十分有利。

5.Dockerfile可以基于已经构建好的容器镜像,创建新容器。Dockerfile可以通过社区分享和下载,有利于该技术的推广。

Docker 会像一个可移植的容器引擎那样工作。它把应用程序及所有程序的依赖环境打包到一个虚拟容器中,这个虚拟容器可以运行在任何一种 Linux 服务器上。这大大地提高了程序运行的灵活性和可移植性,无论需不需要许可、是在公共云还是私密云、是不是裸机环境等等。

Docker也是一个云计算平台,它利用Linux的LXC、AUFU、Go语言、cgroup实现了资源的独立,可以很轻松的实现文件、资源、网络等隔离,其最终的目标是实现类似PaaS平台的应用隔离。

Docker 由下面这些组成:

1. Docker 服务器守护程序(server daemon),用于管理所有的容器。

2. Docker 命令行客户端,用于控制服务器守护程序。

3. Docker 镜像:查找和浏览 docker 容器镜像。

2 docker特性

文件系统隔离:每个进程容器运行在完全独立的根文件系统里。

资源隔离:可以使用cgroup为每个进程容器分配不同的系统资源,例如CPU和内存。

网络隔离:每个进程容器运行在自己的网络命名空间里,拥有自己的虚拟接口和IP地址。

写时复制:采用写时复制方式创建根文件系统,这让部署变得极其快捷,并且节省内存和硬盘空间。

日志记录:Docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索。

变更管理:容器文件系统的变更可以提交到新的映像中,并可重复使用以创建更多的容器。无需使用模板或手动配置。

交互式Shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互shell。

3 两个基础概念images与container

Container和Image 在Docker的世界里,Image是指一个只读的层(Layer),这里的层是AUFS里的概念,最直观的方式就是看一下docker官方给出的图:



Docker使用了一种叫AUFS的文件系统,这种文件系统可以让你一层一层地叠加修改你的文件,最底下的文件系统是只读的,如果需要修改文件,AUFS会增加一个可写的层(Layer),这样有很多好处,例如不同的Container可以共享底层的只读文件系统(同一个Kernel),使得你可以跑N多个Container而不至于你的硬盘被挤爆了!这个只读的层就是Image!而如你所看到的,一个可写的层就是Container。

那Image和Container的区别是什么?很简单,他们的区别仅仅是一个是只读的层,一个是可写的层,你可以使用docker commit 命令,将你的Container变成一个Image,也就是提交你所运行的Container的修改内容,变成一个新的只读的Image,这非常类似于git commit命令。

4 docker安装与启动

安装docker

[root@localhost /]# yum -y install docker-io

更改配置文件

[root@localhost /]# vi /etc/sysconfig/docker

other-args列更改为:other_args="--exec-driver=lxc --selinux-enabled"

启动docker服务

[root@localhost /]# service docker start

Starting cgconfig service: [ OK ]

Starting docker: [ OK ]

将docker加入开机启动

[root@localhost /]# chkconfig docker on

基本信息查看

docker version:查看docker的版本号,包括客户端、服务端、依赖的Go等

[root@localhost /]# docker version

Client version: 1.0.0

Client API version: 1.12

Go version (client): go1.2.2

Git commit (client): 63fe64c/1.0.0

Server version: 1.0.0

Server API version: 1.12

Go version (server): go1.2.2

Git commit (server): 63fe64c/1.0.0

docker info :查看系统(docker)层面信息,包括管理的images,
containers数等

[root@localhost /]# docker info

Containers: 16

Images: 40

Storage Driver: devicemapper

Pool Name: docker-253:0-1183580-pool

Data file: /var/lib/docker/devicemapper/devicemapper/data

Metadata file: /var/lib/docker/devicemapper/devicemapper/metadata

Data Space Used: 2180.4 Mb

Data Space Total: 102400.0 Mb

Metadata Space Used: 3.4 Mb

Metadata Space Total: 2048.0 Mb

Execution Driver: lxc-0.9.0

Kernel Version: 2.6.32-431.el6.x86_64

5 镜像的获取与容器的使用

镜像可以看作是包含有某些软件的容器系统,比如ubuntu就是一个官方的基础镜像,很多镜像都是基于这个镜像“衍生”,该镜像包含基本的ubuntu系统。再比如,hipache是一个官方的镜像容器,运行后可以支持http和websocket的代理服务,而这个镜像本身又基于ubuntu。

搜索镜像

docker search <image>:在docker index中搜索image

[root@localhost /]# docker search ubuntu12.10

NAME DESCRIPTION STARS OFFICIAL AUTOMATED

mirolin/ubuntu12.10 0

marcgibbons/ubuntu12.10 0

mirolin/ubuntu12.10_redis 0

chug/ubuntu12.10x32 Ubuntu Quantal Quetzal 12.10 32bit base i... 0

chug/ubuntu12.10x64 Ubuntu Quantal Quetzal 12.10 64bit base i... 0

下载镜像

docker pull <image> :从docker registry server 中下拉image

[root@localhost /]# docker pull chug/ubuntu12.10x64

查看镜像

docker images: 列出images

docker images -a :列出所有的images(包含历史)

docker images --tree :显示镜像的所有层(layer)

docker rmi <image ID>: 删除一个或多个image

[root@localhost /]# docker images

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

chug/ubuntu12.10x64 latest 0b96c14dafcd 4 months ago 270.3 MB

[root@localhost /]# docker images -a

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

chug/ubuntu12.10x64 latest 0b96c14dafcd 4 months ago 270.3 MB

<none> <none> 31edfed3bb88 4 months ago 175.8 MB

[root@localhost /]# docker images --tree

Warning: '--tree' is deprecated, it will be removed soon. See usage.

└─31edfed3bb88 Virtual Size: 175.8 MB

└─0b96c14dafcd Virtual Size: 270.3 MB Tags: chug/ubuntu12.10x64:latest

[root@localhost /]# docker rmi <image ID> ....

使用镜像创建容器

[root@localhost /]# docker run chug/ubuntu12.10x64 /bin/echo hello world

hello world

交互式运行

[root@localhost /]# docker run -i -t chug/ubuntu12.10x64 /bin/bash

root@2161509ff65e:/#

查看容器

docker ps :列出当前所有正在运行的container

docker ps -l :列出最近一次启动的container

docker ps -a :列出所有的container(包含历史,即运行过的container)

docker ps -q :列出最近一次运行的container ID

[root@localhost /]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

ccf3de663dc9 chug/ubuntu12.10x64:latest /bin/bash 22 hours ago Up 22 hours sharp_hypatia

[root@localhost /]# docker ps -l

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

f145f184647b chug/ubuntu12.10x64:latest /bin/bash 6 seconds ago Exited (0) 3 seconds ago compassionate_galileo

[root@localhost /]# docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

f145f184647b chug/ubuntu12.10x64:latest /bin/bash 30 seconds ago Exited (0) 26 seconds ago compassionate_galileo

f4624b42fe7e chug/ubuntu12.10x64:latest /bin/bash 2 minutes ago Exited (0) 2 minutes ago sharp_wilson

ccf3de663dc9 chug/ubuntu12.10x64:latest /bin/bash 22 hours ago Up 22 hours sharp_hypatia

9cbaa79b9703 chug/ubuntu12.10x64:latest /bin/bash 22 hours ago Exited (127) 36 minutes ago berserk_mcclintock

2161509ff65e chug/ubuntu12.10x64:latest /bin/bash 22 hours ago Exited (0) 22 hours ago backstabbing_mclean

[root@localhost /]# docker ps -q

ccf3de663dc9

再次启动容器

docker start/stop/restart <container> :开启/停止/重启container

docker start [container_id] :再次运行某个container (包括历史container)

docker attach [container_id] :连接一个正在运行的container实例(即实例必须为start状态,可以多个窗口同时attach 一个container实例)

docker start -i <container> :启动一个container并进入交互模式(相当于先start,在attach)

docker run -i -t <image> /bin/bash :使用image创建container并进入交互模式, login shell是/bin/bash

docker run -i -t -p <host_port:contain_port> :映射 HOST 端口到容器,方便外部访问容器内服务,host_port 可以省略,省略表示把 container_port 映射到一个动态端口。

注:使用start是启动已经创建过得container,使用run则通过image开启一个新的container。

删除容器

docker rm <container...> :删除一个或多个container

docker rm `docker ps -a -q` :删除所有的container

docker ps -a -q | xargs docker rm :同上, 删除所有的container

6 持久化容器与镜像

6.1 通过容器生成新的镜像

运行中的镜像称为容器。你可以修改容器(比如删除一个文件),但这些修改不会影响到镜像。不过,你使用docker commit <container-id> <image-name>命令可以把一个正在运行的容器变成一个新的镜像。

docker commit <container> [repo:tag] 将一个container固化为一个新的image,后面的repo:tag可选。

[root@localhost /]# docker images

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

chug/ubuntu12.10x64 latest 0b96c14dafcd 4 months ago 270.3 MB

[root@localhost /]# docker commit d0fd23b8d3ac chug/ubuntu12.10x64_2

daa11948e23d970c18ad89c9e5d8972157fb6f0733f4742db04219b9bb6d063b

[root@localhost /]# docker images

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

chug/ubuntu12.10x64_2 latest daa11948e23d 6 seconds ago 270.3 MB

chug/ubuntu12.10x64 latest 0b96c14dafcd 4 months ago 270.3 MB

6.2 持久化容器

export命令用于持久化容器

docker export <CONTAINER ID> > /tmp/export.tar



6.3 持久化镜像

Save命令用于持久化镜像

docker save 镜像ID > /tmp/save.tar



6.4 导入持久化container

删除container 2161509ff65e



导入export.tar文件

[root@localhost /]# cat /tmp/export.tar | docker import - export:latest

af19a55ff0745fb0a68655392d6d7653c29460d22d916814208bbb9626183aaa

[root@localhost /]# docker images

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

export latest af19a55ff074 34 seconds ago 270.3 MB

chug/ubuntu12.10x64_2 latest daa11948e23d 20 minutes ago 270.3 MB

chug/ubuntu12.10x64 latest 0b96c14dafcd 4 months ago 270.3 MB

6.5 导入持久化image

删除image daa11948e23d



导入save.tar文件

[root@localhost /]# docker load < /tmp/save.tar



对image打tag

[root@localhost /]# docker tag daa11948e23d load:tag



6.6 export-import与save-load的区别

导出后再导入(export-import)的镜像会丢失所有的历史,而保存后再加载(save-load)的镜像没有丢失历史和层(layer)。这意味着使用导出后再导入的方式,你将无法回滚到之前的层(layer),同时,使用保存后再加载的方式持久化整个镜像,就可以做到层回滚。(可以执行docker tag <LAYER ID> <IMAGE NAME>来回滚之前的层)。



6.7 一些其它命令

docker logs $CONTAINER_ID #查看docker实例运行日志,确保正常运行

docker inspect $CONTAINER_ID #docker inspect <image|container> 查看image或container的底层信息

docker build <path> 寻找path路径下名为的Dockerfile的配置文件,使用此配置生成新的image

docker build -t repo[:tag] 同上,可以指定repo和可选的tag

docker build - < <dockerfile> 使用指定的dockerfile配置文件,docker以stdin方式获取内容,使用此配置生成新的image

docker port <container> <container port> 查看本地哪个端口映射到container的指定端口,其实用docker ps 也可以看到

7 一些使用技巧

7.1 docker文件存放目录

Docker实际上把所有东西都放到/var/lib/docker路径下了。

[root@localhost docker]# ls -F

containers/ devicemapper/ execdriver/ graph/ init/ linkgraph.db repositories-devicemapper volumes/

containers目录当然就是存放容器(container)了,graph目录存放镜像,文件层(file system layer)存放在graph/imageid/layer路径下,这样我们就可以看看文件层里到底有哪些东西,利用这种层级结构可以清楚的看到文件层是如何一层一层叠加起来的。

7.2 查看root密码

docker容器启动时的root用户的密码是随机分配的。所以,通过这种方式就可以得到容器的root用户的密码了。

docker logs 5817938c3f6e 2>&1 | grep 'User: ' | tail -n1

docker的使用

1、docker安装

debian7安装docker

echo deb http://get.docker.io/ubuntu docker main | sudo

tee/etc/apt/sources.list.d/docker.list

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys

36A1D7869245C8950F966E92D8576A8BA88D21E9

sudo apt-get update

sudo apt-get install -y lxc-docker

#四行命令,Docker就安装好了。下面创建一个ubuntu虚拟系统:

docker pull ubuntu #此处是从官网拉取名为ubuntu的image,也可手动在
https://index.docker.io上搜索想要的镜像。
docker run -i -t ubuntu /bin/bash #创建一个容器,-t是临时终端。

ubuntu12.04、windows、macOS安装docker

参考docker中文文档http://www.widuu.com/docker/

2、docker使用过程实践

2.1 在测试机启动容器,安装ssh

docker run -i -t ubuntu /bin/bash #此方式运行的容器,退出后容器就会

关闭。

apt-get install openssh-server #安装ssh

#需要修改/etc/sshd/sshd_config文件中内容

PermitRootLogin yes

UsePAM no

2.2 启动ssh,容器以后台方式运行

docker run -d -p 50001:22 <容器id> /usr/sbin/sshd-D

#容器id可通过 docker ps-a查看,最上面的为最新的。

2.3 通过ssh连接到容器安装软件

ssh root@127.0.0.1-p 50001

#连上后想装什么就装什么,可使用exit退出容器,但后台还会运行。

2.4 服务安装完成后,停止容器。

docker stop <容器id> #停止运行的容器

2.5 把容器提交生成最新的镜像

docker commit <容器id> debian02 #把这个容器提交生成新的debian02镜像(

该镜像是原始镜像与容器的整合)

2.6 打包镜像

docker save debian02 >/root/debian02.tar #debian02镜像打包

2.7 在另外的机器上导入镜像

docker load < debian02.tar #导入镜像

docker images #查看存在的镜像

2.8 启动容器

docker run -h="redis-test" --name redis-test -d -p 51000:22 -

p51001:3306 -p 51003:6379 -p 51004:6381 -p 51005:80 -p 51006:8000 -p

51007:8888 debian02 /etc/rc.local

#此处是我测试机器启动命令,指定主机名与端口映射。

#启动后,后面又装了程序,开机自启动命令可放在/etc/rc.local文件中。

docker容器迁移简单方便,可以任意的拷贝部署,以后再也不怕新部署环境了

,一堆依赖装的想死有木有。

3、关于docker容器的端口映射

由于docker容器的IP地址每次启动都会变,所以不适用于手动添加端口映射(难道

每次重启都来查看容器的IP么?),所以需要每次启动容器时由docker程序自动添

加NAT规则,前期尽可能的把需要映射的端口在创建容器时配置好,如下:

docker run -h="activemq" --name activemq -d -p 51000:22 -p

51001:3306-p 51003:6379 -p 51004:6381 -p 51005:80-p 51006:8000 -p

51007:8888 debian/base/etc/rc.local

#此处我把mysql,redis,nginx,ssh都进行了映射。

后续对于docker容器的管理,记住容器的名称,如上述名称是activemq,则使用

docker stop,start来控制容器进程。

docker stop activemq

docker start activemq

当然,也可以不让docker每次启动容器修改容器的IP地址,参考如下:

docker网络配置:http://www.open-open.com/lib/view/open1404896485747.html

4、关于docker容器的多程序开机自动运行

docker容器每次启动时,开机自启动的命令都要在启动容器前指定。如 docker

run -I -t debian /bin/bash命令,只会运行/bin/bash程序,其它的程序都不会

运行,对于要跑多个程序的容器特别纠结。

多程序开机自动运行方法:

可把前面所说的启动命令换成dockerrun -I -t debian /etc/rc.local,在容器中

把所有需要开机自的启动命令放在/etc/rc.local中,就可以达到多程序开机自启

动了。

后台运行则是:docker run -d -p 50001:22 debian /etc/rc.local。注意:run

命令是创建一个新的容器,如果要启动一个曾经运行过的容器,则用命令docker

ps -a中找对应的容器ID,然后使用docker start <容器ID>即可。

5、关于docker容器和镜像的关系

无论容器里做什么操作,写文件,删文件。该容器的基本镜像都不会有任何改变。

这是因为Docker从父镜像建立增量镜像,只存储每个容器的更改。因此,如果你有

一个300MB的父镜像,如果你在容器中安装了50MB的额外应用或服务,你的容器只

有50MB,父镜像还是300MB。

但是可以使用Dockfile或commit命令来,把增量镜像和父镜像一起生成一个新的镜

像。

commit使用:

docker commit <容器id> <新镜像名称>

Dockfile使用:

root@yangrong:/data# cat Dockerfile

FROMubuntu/testa #这是基础镜像

CMD["/root/start.sh"] #这是启动命令

root@yangrong:/data# docker build -t <新镜像名> ./

关于Dockfile更多参数参考地址:
http://www.tuicool.com/articles/FRvAbe http://www.colorscode.net/2014/01/04/howto-build-image-with-automatic-
startup-ssh-service-from-dockerfile/

6、docker参数详解

docker

useage of docker

-D 默认false 允许调试模式(debugmode)

-H 默认是unix:///var/run/docker.sock tcp://[host[:port]]来绑定 或者

unix://[/path/to/socket]来使用(二进制文件的时候),当主机ip host=

[0.0.0.0],(端口)port=[4243] 或者 path=[/var/run/docker.sock]是缺省值,做

为默认值来使用

-api-enable-cors 默认flase 允许CORS header远程api

-b 默认是空,附加在已存在的网桥上,如果是用'none'参数,就禁用了容器

的网络

-bip 默认是空,使用提供的CIDR(ClasslessInter-Domain Routing-无类型

域间选路)标记地址动态创建网桥(dcoker0),和-b参数冲突

-d 默认false 允许进程模式(daemonmode)

-dns 默认是空,使docker使用指定的DNS服务器

-g 默认是"/var/lib/docker":作为docker使用的根路径

-icc 默认true,允许inter-container来通信

-ip 默认"0.0.0.0":绑定容器端口的默认Ip地址

-iptables 默认true 禁用docker添加iptables规则

-mtu 默认1500 : 设置容器网络传输的最大单元(mtu)

-p 默认是/var/run/docker.pid进程pid使用的文件路径

-r 默认是true 重启之前运行的容器

-s 默认是空 ,这个是docker运行是使用一个指定的存储驱动器

-v 默认false 打印版本信息和退出

7、docker run命令详解

Usage: docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]

Run a command in a new container

-a=map[]: 附加标准输入、输出或者错误输出

-c=0: 共享CPU格式(相对重要)

-cidfile="": 将容器的ID标识写入文件

-d=false: 分离模式,在后台运行容器,并且打印出容器ID

-e=[]:设置环境变量

-h="": 容器的主机名称

-i=false: 保持输入流开放即使没有附加输入流

-privileged=false: 给容器扩展的权限

-m="": 内存限制 (格式:<number><optional unit>, unit单位 = b, k, m or

g)

-n=true: 允许镜像使用网络

-p=[]: 匹配镜像内的网络端口号

-rm=false:当容器退出时自动删除容器 (不能跟 -d一起使用)

-t=false: 分配一个伪造的终端输入

-u="": 用户名或者ID

-dns=[]: 自定义容器的DNS服务器

-v=[]: 创建一个挂载绑定:[host-dir]:[container-dir]:[rw|ro].如果容器

目录丢失,docker会创建一个新的卷

-volumes-from="": 挂载容器所有的卷

-entrypoint="": 覆盖镜像设置默认的入口点

-w="": 工作目录内的容器

-lxc-conf=[]: 添加自定义-lxc-conf="lxc.cgroup.cpuset.cpus = 0,1"

-sig-proxy=true: 代理接收所有进程信号(even in non-tty mode)

-expose=[]: 让你主机没有开放的端口

-link="": 连接到另一个容器(name:alias)

-name="": 分配容器的名称,如果没有指定就会随机生成一个

-P=false: Publish all exposed ports to thehost interfaces 公布所有显

示的端口主机接口

8、docker常用命令总结

docker pull <镜像名:tag> #从官网拉取镜像

docker search <镜像名> #搜索在线可用镜像名

8.1查询容器、镜像、日志

docker top <container> #显示容器内运行的进程

docker images #查询所有的镜像,默认是最近创建的排在最上。

docker ps #查看正在运行的容器

docker ps -l #查看最后退出的容器的ID

docker ps -a #查看所有的容器,包括退出的。

docker logs {容器ID|容器名称} #查询某个容器的所有操作记录。

docker logs -f {容器ID|容器名称} #实时查看容易的操作记录。

8.2删除容器与镜像

docker rm$(docker ps -a -q) #删除所有容器

docker rm <容器名or ID> #删除单个容器

docker rmi <ID> #删除单个镜像

docker rmi$(docker images | grep none | awk '{print $3}' | sort -r)

#删除所有镜像

8.3启动停止容器

docker stop <容器名or ID> #停止某个容器

docker start <容器名or ID> #启动某个容器

docker kill <容器名or ID> #杀掉某个容器

8.4容器迁器

docker export <CONTAINER ID> > /home/export.tar #导出

cat /home/export.tar | sudo docker import - busybox-1-export:latest

# 导入export.tar文件

docker save debian> /home/save.tar #将debian容器打包

docker load< /home/save.tar #在另一台服务器上加载打包文件

save和export的对比参考地址:
http://www.fanli7.net/a/bianchengyuyan/C__/20140423/452256.html
8.5运行一个新容器

#运行一个新容器,同时为它命名、端口映射。以debian02镜像为例

docker run -h="redis-test" --name redis-test -d -p 51000:22 -

p51001:3306 -p 51003:6379 -p 51004:6381 -p 51005:80 -p 51006:8000 -p

51007:8888 debian02 /etc/rc.local

#从container中拷贝文件,当container已经关闭后,在里面的文件还可以拷

贝出来。

sudo docker cp 7bb0e258aefe:/etc/debian_version . #把容器中

的/etc/debian_version拷贝到当前目录下。

8.6 docker Dockfile镜像制作

root@yangrong:/data# cat Dockerfile

FROM ubuntu/testa #这是基础镜像

CMD ["/root/start.sh"] #这是启动命令

root@yangrong:/data# docker build -t <新镜像名> ./ #生成新的镜像

Docker网络详解

网络基础

Docker使用linux桥接,在主机虚拟一个docker0网络接口,在主机中运行命令查看:

# List host bridges

$ sudo brctl showbridge name bridge id STP enabled interfacesdocker0 8000.000000000000 no

# Show docker0 IP address

$ sudo ifconfig docker0docker0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx

inet addr:172.17.42.1 Bcast:0.0.0.0 Mask:255.255.0.0

docker启动一个container时会会根据docker0的网段划分container的IP,docker0是每个container的网关。
自定义网络范围

尽管docker在使用linux brigde会找最合适的。但是有时候我们还是需要自己规划。

使用-b=<bridgename>参数设置

# 先关闭docker

$ sudo service docker stop

# 关闭网桥docker0# 添加自己的网桥bridge0

$ sudo ifconfig docker0 down

$ sudo brctl addbr bridge0

$ sudo ifconfig bridge0 192.168.227.1 netmask 255.255.255.0

# 向Docker startup file中添加启动自定义网桥参数

$ echo "DOCKER_OPTS="-b=bridge0"" >> /etc/default/docker

# 启动Docker

$ sudo service docker start

# 查看自定义网桥是否启动成功,ip等配置是否正确

$ sudo ifconfig bridge0

bridge0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx

inet addr:192.168.227.1 Bcast:192.168.227.255 Mask:255.255.255.0

# 启动container

docker run -i -t base /bin/bash

# 可以看到Container IP 在网段192.168.227/24内

root@261c272cd7d5:/# ifconfig eth0

eth0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx

inet addr:192.168.227.5 Bcast:192.168.227.255 Mask:255.255.255.0

# bridge0 IP as the default gateway# 查看路由信息

root@261c272cd7d5:/# route -n

Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use Iface

0.0.0.0 192.168.227.1 0.0.0.0 UG 0 0 0 eth0

192.168.227.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0

# hits CTRL+P then CTRL+Q to detach

# 查看网桥信息

$ sudo brctl show

bridge name bridge id STP enabled interfaces

bridge0 8000.fe7c2e0faebd no vethAQI2QT

container互通

docker默认是允许container互通,通过-icc=false关闭互通。

一旦关闭了互通,只能通过-link name:alias命令连接指定container.

container互相隔离的情况下,假设我们有一个webapp container,一个redis contianer需要互通。

先启动redis container:

sudo docker run -d --name redis crosbymichael/redis

再启动webapp并联通到redis

#将redis取别名为dbsudo docker run -t -i --link redis:db --name webapp ubuntu bash

在webapp中可以看到db的网络信息:

$ root@4c01db0b339c:/# env

HOSTNAME=4c01db0b339c

DB_NAME=/webapp/db

TERM=xterm

DB_PORT=tcp://172.17.0.8:6379

DB_PORT_6379_TCP=tcp://172.17.0.8:6379

DB_PORT_6379_TCP_PROTO=tcp

DB_PORT_6379_TCP_ADDR=172.17.0.8

DB_PORT_6379_TCP_PORT=6379

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

PWD=/

SHLVL=1

HOME=/

container=lxc

_=/usr/bin/env

root@4c01db0b339c:/#

0.11版本以后,-- link redis:db的别名,会在/etc/hosts中生成对应的ip映射:

root@6541a75d44a0:/# cat /etc/hosts172.17.0.3 6541a75d44a0172.17.0.2 db

什么是vethxxxx

# 查看网桥信息

$ sudo brctl show

bridge name bridge id STP enabled interfaces

docker0 8000.fe7c2e0faebd no vethAQI2QT

vethxxx是主机与container内部eth0相连的管道。详见ip link和namespaces infrastructure

一,安装EPEL

关于EPEL:https://Fedoraproject.org/wiki/EPEL/zh-cn

>rpm -ivh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
>rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6

>yum -y install yum -priorities

二,安装Docker

>yum -y install docker-io

>service docker start

>chkconfig docker on

三,应用Docker

1,获取Centos镜像

>docker pull centos:latest

2,查看镜像运行情况

>docker images centos

3,在容器下运行 shell bash

>docker run -i -t centos /bin/bash

4,停止容器

>docker stop <CONTAINER ID>

5,查看容器日志

>docker logs -f <CONTAINER ID>

6,删除所有容器

>docker rm $(docker ps -a -q)

7,删除镜像

>docker rmi <image id/name>

8,提交容器更改到镜像仓库中

>docker run -i -t centos /bin/bash

>useradd myuser

>exit

>docker ps -a |more

>docker commit <CONTAINER ID> myuser/centos

9,创建并运行容器中的 hello.sh

>docker run -i -t myuser/centos /bin/bash

>touch /home/myuser/hello.sh

>echo "echo \"Hello,World!\"" > /home/myuser/hello.sh

>chmod +x /home/myuser/hello.sh

>exit

>docker commit <CONTAINER ID> myuser/centos

>docker run -i -t myuser/centos /bin/sh /home/myuser/hello.sh

10,在容器中运行Nginx

在容器中安装好Nginx,并提交到镜像中

>docker run -t -i -p 80:80 nginx/centos /bin/bash

启动Nginx

>/data/apps/nginx/sbin/nginx

(还不清楚如何在后台运行!!!)

在浏览器访问宿主机80端口。

11,映射容器端口

>docker run -d -p 192.168.9.11:2201:22 nginx/centos /usr/sbin/sshd -D

用ssh root@192.168.9.11 -p 2201 连接容器,提示:

Connection to 192.168.1.205 closed.(此问题还未解决!!!)

可能会遇到的问题:

##在容器里面修改用户密码的时候报错:

/usr/share/cracklib/pw_dict.pwd: No such file or directory

PWOpen: No such file or directory

解决:

yum -y reinstall cracklib-dicts

参考:
http://www.linuxidc.com/Linux/2014-07/104595.htm
Docker网络详解

网络基础

Docker使用linux桥接,在主机虚拟一个docker0网络接口,在主机中运行命令查看:

# List host bridges

$ sudo brctl showbridge name bridge id STP enabled interfacesdocker0 8000.000000000000 no

# Show docker0 IP address

$ sudo ifconfig docker0docker0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx

inet addr:172.17.42.1 Bcast:0.0.0.0 Mask:255.255.0.0

docker启动一个container时会会根据docker0的网段划分container的IP,docker0是每个container的网关。
自定义网络范围

尽管docker在使用linux brigde会找最合适的。但是有时候我们还是需要自己规划。

使用-b=<bridgename>参数设置

# 先关闭docker

$ sudo service docker stop

# 关闭网桥docker0# 添加自己的网桥bridge0

$ sudo ifconfig docker0 down

$ sudo brctl addbr bridge0

$ sudo ifconfig bridge0 192.168.227.1 netmask 255.255.255.0

# 向Docker startup file中添加启动自定义网桥参数

$ echo "DOCKER_OPTS="-b=bridge0"" >> /etc/default/docker

# 启动Docker

$ sudo service docker start

# 查看自定义网桥是否启动成功,ip等配置是否正确

$ sudo ifconfig bridge0

bridge0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx

inet addr:192.168.227.1 Bcast:192.168.227.255 Mask:255.255.255.0

# 启动container

docker run -i -t base /bin/bash

# 可以看到Container IP 在网段192.168.227/24内

root@261c272cd7d5:/# ifconfig eth0

eth0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx

inet addr:192.168.227.5 Bcast:192.168.227.255 Mask:255.255.255.0

# bridge0 IP as the default gateway# 查看路由信息

root@261c272cd7d5:/# route -n

Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use Iface

0.0.0.0 192.168.227.1 0.0.0.0 UG 0 0 0 eth0

192.168.227.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0

# hits CTRL+P then CTRL+Q to detach

# 查看网桥信息

$ sudo brctl show

bridge name bridge id STP enabled interfaces

bridge0 8000.fe7c2e0faebd no vethAQI2QT

container互通

docker默认是允许container互通,通过-icc=false关闭互通。

一旦关闭了互通,只能通过-link name:alias命令连接指定container.

container互相隔离的情况下,假设我们有一个webapp container,一个redis contianer需要互通。

先启动redis container:

sudo docker run -d --name redis crosbymichael/redis

再启动webapp并联通到redis

#将redis取别名为dbsudo docker run -t -i --link redis:db --name webapp ubuntu bash

在webapp中可以看到db的网络信息:

$ root@4c01db0b339c:/# env

HOSTNAME=4c01db0b339c

DB_NAME=/webapp/db

TERM=xterm

DB_PORT=tcp://172.17.0.8:6379

DB_PORT_6379_TCP=tcp://172.17.0.8:6379

DB_PORT_6379_TCP_PROTO=tcp

DB_PORT_6379_TCP_ADDR=172.17.0.8

DB_PORT_6379_TCP_PORT=6379

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

PWD=/

SHLVL=1

HOME=/

container=lxc

_=/usr/bin/env

root@4c01db0b339c:/#

0.11版本以后,-- link redis:db的别名,会在/etc/hosts中生成对应的ip映射:

root@6541a75d44a0:/# cat /etc/hosts172.17.0.3 6541a75d44a0172.17.0.2 db

什么是vethxxxx

# 查看网桥信息

$ sudo brctl show

bridge name bridge id STP enabled interfaces

docker0 8000.fe7c2e0faebd no vethAQI2QT

vethxxx是主机与container内部eth0相连的管道。详见ip link和namespaces infrastructure
http://www.server110.com/docker/201411/11104.html
Docker网络详解

网络基础

Docker使用linux桥接,在主机虚拟一个docker0网络接口,在主机中运行命令查看:

# List host bridges

$ sudo brctl showbridge name bridge id STP enabled interfacesdocker0 8000.000000000000 no

# Show docker0 IP address

$ sudo ifconfig docker0docker0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx

inet addr:172.17.42.1 Bcast:0.0.0.0 Mask:255.255.0.0

docker启动一个container时会会根据docker0的网段划分container的IP,docker0是每个container的网关。
自定义网络范围

尽管docker在使用linux brigde会找最合适的。但是有时候我们还是需要自己规划。

使用-b=<bridgename>参数设置

# 先关闭docker

$ sudo service docker stop

# 关闭网桥docker0# 添加自己的网桥bridge0

$ sudo ifconfig docker0 down

$ sudo brctl addbr bridge0

$ sudo ifconfig bridge0 192.168.227.1 netmask 255.255.255.0

# 向Docker startup file中添加启动自定义网桥参数

$ echo "DOCKER_OPTS="-b=bridge0"" >> /etc/default/docker

# 启动Docker

$ sudo service docker start

# 查看自定义网桥是否启动成功,ip等配置是否正确

$ sudo ifconfig bridge0

bridge0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx

inet addr:192.168.227.1 Bcast:192.168.227.255 Mask:255.255.255.0

# 启动container

docker run -i -t base /bin/bash

# 可以看到Container IP 在网段192.168.227/24内

root@261c272cd7d5:/# ifconfig eth0

eth0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx

inet addr:192.168.227.5 Bcast:192.168.227.255 Mask:255.255.255.0

# bridge0 IP as the default gateway# 查看路由信息

root@261c272cd7d5:/# route -n

Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use Iface

0.0.0.0 192.168.227.1 0.0.0.0 UG 0 0 0 eth0

192.168.227.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0

# hits CTRL+P then CTRL+Q to detach

# 查看网桥信息

$ sudo brctl show

bridge name bridge id STP enabled interfaces

bridge0 8000.fe7c2e0faebd no vethAQI2QT

container互通

docker默认是允许container互通,通过-icc=false关闭互通。

一旦关闭了互通,只能通过-link name:alias命令连接指定container.

container互相隔离的情况下,假设我们有一个webapp container,一个redis contianer需要互通。

先启动redis container:

sudo docker run -d --name redis crosbymichael/redis

再启动webapp并联通到redis

#将redis取别名为dbsudo docker run -t -i --link redis:db --name webapp ubuntu bash

在webapp中可以看到db的网络信息:

$ root@4c01db0b339c:/# env

HOSTNAME=4c01db0b339c

DB_NAME=/webapp/db

TERM=xterm

DB_PORT=tcp://172.17.0.8:6379

DB_PORT_6379_TCP=tcp://172.17.0.8:6379

DB_PORT_6379_TCP_PROTO=tcp

DB_PORT_6379_TCP_ADDR=172.17.0.8

DB_PORT_6379_TCP_PORT=6379

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

PWD=/

SHLVL=1

HOME=/

container=lxc

_=/usr/bin/env

root@4c01db0b339c:/#

0.11版本以后,-- link redis:db的别名,会在/etc/hosts中生成对应的ip映射:

root@6541a75d44a0:/# cat /etc/hosts172.17.0.3 6541a75d44a0172.17.0.2 db

什么是vethxxxx

# 查看网桥信息

$ sudo brctl show

bridge name bridge id STP enabled interfaces

docker0 8000.fe7c2e0faebd no vethAQI2QT

vethxxx是主机与container内部eth0相连的管道。详见ip link和namespaces infrastructure
http://www.server110.com/docker/201411/11104.html
Docker网络详解

网络基础

Docker使用linux桥接,在主机虚拟一个docker0网络接口,在主机中运行命令查看:

# List host bridges

$ sudo brctl showbridge name bridge id STP enabled interfacesdocker0 8000.000000000000 no

# Show docker0 IP address

$ sudo ifconfig docker0docker0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx

inet addr:172.17.42.1 Bcast:0.0.0.0 Mask:255.255.0.0

docker启动一个container时会会根据docker0的网段划分container的IP,docker0是每个container的网关。
自定义网络范围

尽管docker在使用linux brigde会找最合适的。但是有时候我们还是需要自己规划。

使用-b=<bridgename>参数设置

# 先关闭docker

$ sudo service docker stop

# 关闭网桥docker0# 添加自己的网桥bridge0

$ sudo ifconfig docker0 down

$ sudo brctl addbr bridge0

$ sudo ifconfig bridge0 192.168.227.1 netmask 255.255.255.0

# 向Docker startup file中添加启动自定义网桥参数

$ echo "DOCKER_OPTS="-b=bridge0"" >> /etc/default/docker

# 启动Docker

$ sudo service docker start

# 查看自定义网桥是否启动成功,ip等配置是否正确

$ sudo ifconfig bridge0

bridge0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx

inet addr:192.168.227.1 Bcast:192.168.227.255 Mask:255.255.255.0

# 启动container

docker run -i -t base /bin/bash

# 可以看到Container IP 在网段192.168.227/24内

root@261c272cd7d5:/# ifconfig eth0

eth0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx

inet addr:192.168.227.5 Bcast:192.168.227.255 Mask:255.255.255.0

# bridge0 IP as the default gateway# 查看路由信息

root@261c272cd7d5:/# route -n

Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use Iface

0.0.0.0 192.168.227.1 0.0.0.0 UG 0 0 0 eth0

192.168.227.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0

# hits CTRL+P then CTRL+Q to detach

# 查看网桥信息

$ sudo brctl show

bridge name bridge id STP enabled interfaces

bridge0 8000.fe7c2e0faebd no vethAQI2QT

container互通

docker默认是允许container互通,通过-icc=false关闭互通。

一旦关闭了互通,只能通过-link name:alias命令连接指定container.

container互相隔离的情况下,假设我们有一个webapp container,一个redis contianer需要互通。

先启动redis container:

sudo docker run -d --name redis crosbymichael/redis

再启动webapp并联通到redis

#将redis取别名为dbsudo docker run -t -i --link redis:db --name webapp ubuntu bash

在webapp中可以看到db的网络信息:

$ root@4c01db0b339c:/# env

HOSTNAME=4c01db0b339c

DB_NAME=/webapp/db

TERM=xterm

DB_PORT=tcp://172.17.0.8:6379

DB_PORT_6379_TCP=tcp://172.17.0.8:6379

DB_PORT_6379_TCP_PROTO=tcp

DB_PORT_6379_TCP_ADDR=172.17.0.8

DB_PORT_6379_TCP_PORT=6379

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

PWD=/

SHLVL=1

HOME=/

container=lxc

_=/usr/bin/env

root@4c01db0b339c:/#

0.11版本以后,-- link redis:db的别名,会在/etc/hosts中生成对应的ip映射:

root@6541a75d44a0:/# cat /etc/hosts172.17.0.3 6541a75d44a0172.17.0.2 db

什么是vethxxxx

# 查看网桥信息

$ sudo brctl show

bridge name bridge id STP enabled interfaces

docker0 8000.fe7c2e0faebd no vethAQI2QT

vethxxx是主机与container内部eth0相连的管道。详见ip link和namespaces infrastructure
http://www.server110.com/docker/201411/11104.html
Docker网络详解

网络基础

Docker使用linux桥接,在主机虚拟一个docker0网络接口,在主机中运行命令查看:

# List host bridges

$ sudo brctl showbridge name bridge id STP enabled interfacesdocker0 8000.000000000000 no

# Show docker0 IP address

$ sudo ifconfig docker0docker0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx

inet addr:172.17.42.1 Bcast:0.0.0.0 Mask:255.255.0.0

docker启动一个container时会会根据docker0的网段划分container的IP,docker0是每个container的网关。
自定义网络范围

尽管docker在使用linux brigde会找最合适的。但是有时候我们还是需要自己规划。

使用-b=<bridgename>参数设置

# 先关闭docker

$ sudo service docker stop

# 关闭网桥docker0# 添加自己的网桥bridge0

$ sudo ifconfig docker0 down

$ sudo brctl addbr bridge0

$ sudo ifconfig bridge0 192.168.227.1 netmask 255.255.255.0

# 向Docker startup file中添加启动自定义网桥参数

$ echo "DOCKER_OPTS="-b=bridge0"" >> /etc/default/docker

# 启动Docker

$ sudo service docker start

# 查看自定义网桥是否启动成功,ip等配置是否正确

$ sudo ifconfig bridge0

bridge0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx

inet addr:192.168.227.1 Bcast:192.168.227.255 Mask:255.255.255.0

# 启动container

docker run -i -t base /bin/bash

# 可以看到Container IP 在网段192.168.227/24内

root@261c272cd7d5:/# ifconfig eth0

eth0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx

inet addr:192.168.227.5 Bcast:192.168.227.255 Mask:255.255.255.0

# bridge0 IP as the default gateway# 查看路由信息

root@261c272cd7d5:/# route -n

Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use Iface

0.0.0.0 192.168.227.1 0.0.0.0 UG 0 0 0 eth0

192.168.227.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0

# hits CTRL+P then CTRL+Q to detach

# 查看网桥信息

$ sudo brctl show

bridge name bridge id STP enabled interfaces

bridge0 8000.fe7c2e0faebd no vethAQI2QT

container互通

docker默认是允许container互通,通过-icc=false关闭互通。

一旦关闭了互通,只能通过-link name:alias命令连接指定container.

container互相隔离的情况下,假设我们有一个webapp container,一个redis contianer需要互通。

先启动redis container:

sudo docker run -d --name redis crosbymichael/redis

再启动webapp并联通到redis

#将redis取别名为dbsudo docker run -t -i --link redis:db --name webapp ubuntu bash

在webapp中可以看到db的网络信息:

$ root@4c01db0b339c:/# env

HOSTNAME=4c01db0b339c

DB_NAME=/webapp/db

TERM=xterm

DB_PORT=tcp://172.17.0.8:6379

DB_PORT_6379_TCP=tcp://172.17.0.8:6379

DB_PORT_6379_TCP_PROTO=tcp

DB_PORT_6379_TCP_ADDR=172.17.0.8

DB_PORT_6379_TCP_PORT=6379

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

PWD=/

SHLVL=1

HOME=/

container=lxc

_=/usr/bin/env

root@4c01db0b339c:/#

0.11版本以后,-- link redis:db的别名,会在/etc/hosts中生成对应的ip映射:

root@6541a75d44a0:/# cat /etc/hosts172.17.0.3 6541a75d44a0172.17.0.2 db

什么是vethxxxx

# 查看网桥信息

$ sudo brctl show

bridge name bridge id STP enabled interfaces

docker0 8000.fe7c2e0faebd no vethAQI2QT

vethxxx是主机与container内部eth0相连的管道。详见ip link和namespaces infrastructure
http://www.server110.com/docker/201411/11104.html
Docker网络详解

网络基础

Docker使用linux桥接,在主机虚拟一个docker0网络接口,在主机中运行命令查看:

# List host bridges

$ sudo brctl showbridge name bridge id STP enabled interfacesdocker0 8000.000000000000 no

# Show docker0 IP address

$ sudo ifconfig docker0docker0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx

inet addr:172.17.42.1 Bcast:0.0.0.0 Mask:255.255.0.0

docker启动一个container时会会根据docker0的网段划分container的IP,docker0是每个container的网关。
自定义网络范围

尽管docker在使用linux brigde会找最合适的。但是有时候我们还是需要自己规划。

使用-b=<bridgename>参数设置

# 先关闭docker

$ sudo service docker stop

# 关闭网桥docker0# 添加自己的网桥bridge0

$ sudo ifconfig docker0 down

$ sudo brctl addbr bridge0

$ sudo ifconfig bridge0 192.168.227.1 netmask 255.255.255.0

# 向Docker startup file中添加启动自定义网桥参数

$ echo "DOCKER_OPTS="-b=bridge0"" >> /etc/default/docker

# 启动Docker

$ sudo service docker start

# 查看自定义网桥是否启动成功,ip等配置是否正确

$ sudo ifconfig bridge0

bridge0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx

inet addr:192.168.227.1 Bcast:192.168.227.255 Mask:255.255.255.0

# 启动container

docker run -i -t base /bin/bash

# 可以看到Container IP 在网段192.168.227/24内

root@261c272cd7d5:/# ifconfig eth0

eth0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx

inet addr:192.168.227.5 Bcast:192.168.227.255 Mask:255.255.255.0

# bridge0 IP as the default gateway# 查看路由信息

root@261c272cd7d5:/# route -n

Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use Iface

0.0.0.0 192.168.227.1 0.0.0.0 UG 0 0 0 eth0

192.168.227.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0

# hits CTRL+P then CTRL+Q to detach

# 查看网桥信息

$ sudo brctl show

bridge name bridge id STP enabled interfaces

bridge0 8000.fe7c2e0faebd no vethAQI2QT

container互通

docker默认是允许container互通,通过-icc=false关闭互通。

一旦关闭了互通,只能通过-link name:alias命令连接指定container.

container互相隔离的情况下,假设我们有一个webapp container,一个redis contianer需要互通。

先启动redis container:

sudo docker run -d --name redis crosbymichael/redis

再启动webapp并联通到redis

#将redis取别名为dbsudo docker run -t -i --link redis:db --name webapp ubuntu bash

在webapp中可以看到db的网络信息:

$ root@4c01db0b339c:/# env

HOSTNAME=4c01db0b339c

DB_NAME=/webapp/db

TERM=xterm

DB_PORT=tcp://172.17.0.8:6379

DB_PORT_6379_TCP=tcp://172.17.0.8:6379

DB_PORT_6379_TCP_PROTO=tcp

DB_PORT_6379_TCP_ADDR=172.17.0.8

DB_PORT_6379_TCP_PORT=6379

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

PWD=/

SHLVL=1

HOME=/

container=lxc

_=/usr/bin/env

root@4c01db0b339c:/#

0.11版本以后,-- link redis:db的别名,会在/etc/hosts中生成对应的ip映射:

root@6541a75d44a0:/# cat /etc/hosts172.17.0.3 6541a75d44a0172.17.0.2 db

什么是vethxxxx

# 查看网桥信息

$ sudo brctl show

bridge name bridge id STP enabled interfaces

docker0 8000.fe7c2e0faebd no vethAQI2QT

vethxxx是主机与container内部eth0相连的管道。详见ip link和namespaces infrastructure
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: