码迷,mamicode.com
首页 > 其他好文 > 详细

Docker

时间:2018-04-24 22:24:52      阅读:305      评论:0      收藏:0      [点我收藏+]

标签:pipework   explore   需要   设备   UI   eth   共享数据   tcp   interface   

 

 

Docker简介[集装箱]

主要部件:1.Docker  2.Docker Hub(https://hub.docker.com/explore/)

使用客户端-服务器(C/S)架构模式。Docker客户端会与Docker守护进程进行通信。

它们之间通过socket或者RESTful API进行通信。

用户通过Docker客户端(docker的二进制程序)间接和Docker守护进程进行通信。

 

Docker内部

1.      仓库:用来保存镜像。分为公有(Docker Hub)和私有的。

2.      镜像:是Docker容器运行时的只读模板,每一个镜像都是由一系列的层组成(轻量的关键)。不用替换原先的镜像或者重新建立,只要一个新的层被添加或者升级,就无需重新发布整个镜像。

3.      容器:和文件夹类似,一个Docker容器包含了所有的某个应用运行所需要的环境。每一个Docker容器都是从Docker镜像创建的。是独立和安全的应用平台,是Docker的运行部分。可以运行 开始 停止 移动和删除。

 

免sudo使用docker命令

https://www.jianshu.com/p/95e397570896

 

命名空间

Pid namespace

Net namespace

Ipc namespace

Mnt namespace

Uts namespace

User namespace

有了以上6种namespace从进程 网络 IPC 文件系统 UTS和用户角度的隔离,一个container(容器)就可以对外展现出一个独立计算机的能力,并且不同container从OS层面实现了隔离。然而不同namespace之间资源还是相互竞争的,仍然需要类似ulimit来管理每个container所能使用的资源-cgroup。

 

资源配额[cgroups]

http://tiewei.github.io/devops/howto-use-cgroup/

 

Docker安装

http://blog.csdn.net/qq_36892341/article/details/73918672

 

Docker基础用法

https://www.jianshu.com/p/922705fa1a1f  简书-学习笔记1

 

Dockerfile

Docker可以通过Dockerfile的内容来自动构建镜像。Dockerfile 是一个包含创建镜像所有命令的文本文件,通过 docker build 命令可以根据 Dockerfile 的内容构建镜像,在介绍如何构建之前先介绍下 Dockerfile 的基本语法结构。

Dockerfile指令选项(略)

Dockerfile最佳实践(略)

 

Docker端口映射

https://www.jianshu.com/p/e601bbf12572 简书-学习笔记3

# 通过容器 id 获取 ip

sudo docker inspect <container_id> | grep IPAddress | cut -d ’"’ -f 4

无论如何,这些ip是基于本地系统的并且容器的端口非本地主机是访问不到的。此外,除了端口只能本地访问外,对于容器的另外一个问题是这些ip在容器每次启动的时候都会改变。

Docker通过端口绑定主机系统的接口,允许非本地客户端访问容器内部运行的服务。==》解决了上面的容器两个问题

4.      自动映射端口

-p 使用时需要指定 --expose选项,指定需要对外提供服务的端口

sudo docker run -t -P --expose 22 --name server  ubuntu:14.04

使用docker run -p 自动绑定所有对外提供服务的容器端口,映射的端口将会从没有使用的端口池中(49000..49900)自动选择,可以通过docker ps 、docker inspect <container_id> 或者 docker port <container_id> <port> 来确定具体的绑定信息。

5.      绑定端口到指定接口

基本语法

sudo docker run -p [([<host_interface>:[host_port]])|(<host_port>):]<container_port>[/udp] <image> <cmd>

默认不指定绑定ip则监听所有网络接口

绑定TCP端口(略)

绑定UDP端口(略)

 

Docker网络配置:

技术分享图片

 

Docker通过使用Linux桥接提供容器之间的通信,docker0 桥接接口的目的就是方便Docker管理。

当Dcoker daemon(守护进程)启动时需要做以下操作:

技术分享图片

Docker四种网络模式

docker run 创建Docker容器时,可以用 -net 选项指定容器的网络模式,Docker有以下4种网络模式:

技术分享图片

host模式

如果启动容器的时候使用 host 模式,那么这个容器将不会获得一个独立的 Network Namespace,而是和宿主机共用一个 Network Namespace。容器将不会虚拟出自己的网卡,配置自己的 IP 等,而是使用宿主机的 IP 和端口。

container模式

这个模式指定新创建的容器和已经存在的一个容器共享一个 Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过 lo 网卡设备通信。

none模式

这个模式和前两个不同。在这种模式下,Docker 容器拥有自己的 Network Namespace,但是,并不为 Docker容器进行任何网络配置。也就是说,这个 Docker 容器没有网卡、IP、路由等信息。需要我们自己为 Docker 容器添加网卡、配置 IP 等。

bridge 模式

技术分享图片

bridge 模式是Docker默认的网络设置,此模式会为每一个容器分配Network Namespace 设置IP等,并将一个主机上的Docker容器连接到一个虚拟网桥上。当Docker server启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。接下来就是为容器分配IP了,一般Docker会使用172.17.0.0/16这个网段,并将172.17.42.1/16分配给docker0网桥(在主机上使用ifconfig命令可以看到docker0,可以认为他是网桥的管理接口,在宿主机作为一块虚拟网卡使用)。

7.      列出当前主机网桥

sudo brctl show  # brctl 工具依赖 bridge-utils 软件包

8.      查看当前docker0 ip

 sudo ifconfig docker0

在容器运行时,每个容器都会分配一个特定的虚拟机口并桥接到docker0。每个容器都会配置同docker0 ip相同网段的专用ip地址,docker0的IP被用于所有容器的默认网关。

9.      运行一个容器

sudo docker run -t -i -d ubuntu /bin/bash

sudo brctl show

bridge name bridge id STP enabled interfaces

docker0 8000.fef213db5a66 no vethQCDY1N

以上, docker0 扮演着 52f811c5d3d6 container 这个容器的虚拟接口 vethQCDY1N interface 桥接的角色。

使用特定范围的IP:

Docker允许用户管理docker0桥接或者通过-b 选项自定义桥接网卡,需要安装bridge-utils软件包。

技术分享图片

# 停止Docker并移除docker0。

sudo service docker stop

sudo ip link set dev docker0 down

sudo brctl delbr docker0

# 创建自己的桥

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并重新启动。 (on Ubuntu)

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

$ sudo service docker start

10.   不同主机间容器通信

可以借助于pipework这个工具:

git clone https://github.com/jpetazzo/pipework.git

sudo cp -rp pipework/pipework /usr/local/bin/

安装依赖软件

sudo apt-get install iputils-arping bridge-utils -y

桥接网络(略)

 

容器数据管理

https://www.jianshu.com/p/a43b39dfffa4  简书-学习笔记2

Docker管理数据的方式有两种:

11.   数据卷

数据卷是一个或多个容器专门指定绕过 Union File System 的目录,为持续性或共享数据提供一些有用的功能:

数据卷可以在容器间共享和重用

数据卷数据改变是直接修改的

数据卷数据改变不会被包括在容器中

数据卷是持续性的,直到没有容器使用它们

12.   数据卷容器

如果你有一些持久性的数据并且想在容器间共享,或者想用在非持久性的容器上,最好的方法是创建一个数据卷容器,然后从此容器上挂载数据。

 

链接容器

docker 允许把多个容器连接在一起,相互交互信息。docker 链接会创建一种容器父子级别的关系,其中父容器可以看到其子容器提供的信息。

 

构建私有库(略)

 

https://www.jianshu.com/p/784bdffcc469 简书-学习笔记4

https://www.jianshu.com/p/54b1b0a098c3 简书-学习笔记5

 

http://www.ruanyifeng.com/blog/2018/02/docker-tutorial.html 阮一峰入门

Docker

标签:pipework   explore   需要   设备   UI   eth   共享数据   tcp   interface   

原文地址:https://www.cnblogs.com/kz2017/p/8934074.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!