undefined

pod

Pod 是 kubernetes 中你可以创建和部署的最小也是最简的单位。Pod 代表着集群中运行的进程。
Pod 中可以共享两种资源:网络和存储。

当 Pod 被创建后(不论是由你直接创建还是被其他 Controller),都会被 Kubernetes 调度到集群的 Node 上。
直到 Pod 的进程终止、被删掉、因为缺少资源而被驱逐、或者 Node 故障之前这个 Pod 都会一直保持在那个 Node 上。
注意:重启 Pod 中的容器跟重启 Pod 不是一回事。Pod 只提供容器的运行环境并保持容器的运行状态,重启容器不会造成 Pod 重启。

Pod 不会自愈。如果 Pod 运行的 Node 故障,或者是调度器本身故障,这个 Pod 就会被删除。
同样的,如果 Pod 所在 Node 缺少资源或者 Pod 处于维护状态,Pod 也会被驱逐。
Kubernetes 使用更高级的称为 Controller 的抽象层,来管理 Pod 实例。虽然可以直接使用 Pod,但是在 Kubernetes 中通常是使用 Controller 来管理 Pod 的。

  • Pod 和 Controller
    Controller 可以创建和管理多个 Pod,提供副本管理、滚动升级和集群级别的自愈能力。例如,如果一个 Node 故障,Controller 就能自动将该节点上的 Pod 调度到其他健康的 Node 上。
    包含一个或者多个 Pod 的 Controller 示例:
查看更多

undefined

初识Dockerfile

Dockerfile 就是用来构建 docker 镜像的构建文件,命令脚本

1
2
3
4
5
6
7
8
9
# 创建一个dockerfile 文件,名字可以随机,建议:Dockerfile
# 文件中的内容 指令都是大写,如下:

FROM centos

VOLUME ["volume01", "volume02"]

CMD echo "--end----"
CMD /bin/bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
root@9-134-239-95:dockerfile# docker build -f dockerfile1 -t noahyzhang/centos .
Sending build context to Docker daemon 2.048kB
Step 1/4 : FROM centos
latest: Pulling from library/centos
a1d0c7532777: Pull complete
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Downloaded newer image for centos:latest
---> 5d0da3dc9764
Step 2/4 : VOLUME ["volume01", "volume02"]
---> Running in 9d0cf0f49e0a
Removing intermediate container 9d0cf0f49e0a
---> ee700b968468
Step 3/4 : CMD echo "--end----"
---> Running in e45a1abfa3e4
Removing intermediate container e45a1abfa3e4
---> 2f89182b0d08
Step 4/4 : CMD /bin/bash
---> Running in 63d3e5e1099b
Removing intermediate container 63d3e5e1099b
---> 63149cb60de2
Successfully built 63149cb60de2
Successfully tagged noahyzhang/centos:latest

查看更多

undefined

Docker的常用命令

一、镜像命令

帮助命令

1
2
3
docker version  # 显示docker 版本信息
docker info # 显示docker 的系统信息,包括镜像和容器的数量
docker 命令 --help # 帮助命令

镜像命令

docker images 查看所有本地的主机上的镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
root@9-134-239-95:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 7 weeks ago 13.3kB

# 解释
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的ID
CREATED 镜像的创建时间
SIZE 镜像的大小

# 可选选项
-a, --all # 列出所有镜像
-q, --quiet # 只列出镜像的 IMAGE ID

查看更多

undefined

docker

简单使用容器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1. 进行交互式的容器
docker run -i -t ubuntu:15.10 /bin/bash
-t:在新容器内指定一个伪终端或终端
-i:允许对容器内的标准输入(STDIN)进行交互
2. 启动容器(后台模式)
docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
输出:2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63
输出的长字符串是容器ID,
3. 容器运行
docker ps
container id: 容器ID
image:使用的镜像
command:启动容器时运行的命令
created:容器的创建时间
status:容器状态(created、restarting、running或up、removing、paused、exited、dead)
ports:容器的端口信息和使用的连接类型(tcp/udp)
names:自动分配的容器名称
4. 停止容器
docker stop container_id

容器操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2. 启动容器
docker run -it -d -P ubuntu /bin/bash
-d: 后台运行 docker 服务

端口 PORTS 对应关系:前面是主机IP+端口,后面容器端口
-P: 将容器内部使用的网络端口"随机"映射到我们使用的主机上
-p: 容器内部端口绑定到“指定”的主机网络地址+端口,ex:127.0.0.1:5000:5000
默认绑定 tcp 端口,如果要绑定 UDP 端口,可以在端口后加上 /udp. ex: 127.0.0.1:5000:5000/udp

启动一个已停止的容器: docker start container_id
重启一个容器: docker restart container_id
3. 进入容器
在使用 -d 参数时,容器启动后进行后台。此时想要进入容器,可以:
docker attach: 如果从这个容器退出,会导致容器的停止
docker exec: 推荐使用,因为退出容器终端,不会导致容器的停止 ex: docker exec -it container_id /bin/bash
4. 导出和导入容器
导出容器: docker export container_id > ubuntu.tar
导入容器: cat docker/ubantu.tar | docker import - test/ubuntu:v1
导入容器(指定url或目录): docker import http://example.com/exampleimage.tgz example/imagerepo
5. 删除容器
docker rm -f container_id
6. 查看端口的绑定情况
docker port container_id [port]

镜像操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1. 获取镜像
docker pull ubuntu
2. 列出镜像列表
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 14.04 90d5884b1ee0 5 days ago 188 MB
REPOSITORY: 表示镜像的仓库源
TAG: 镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
3. 获取一个新的镜像
docker pull ubuntu:13.10
4. 查找镜像
docker search httpd
5. 删除镜像
docker rmi image_name
6. 创建镜像
构建镜像:需要一个 Dockerfile 文件,然后使用 docker build -t image_name .
其中 -t 指定要创建的目标镜像名
. 是 dockerfile 文件所在目录,可以指定 dockerfile 的绝对路径
7. 设置镜像标签
docker tag image_id image_name:tag_name

查看更多

undefined

Docker概述

Docker 为什么出现

很多项目跑起来需要环境的支持,配置较麻烦,不同的环境可能会出现不同的现象

Docker 通过隔离机制,可以将服务器利用到极致

虚拟机和Docker 都是虚拟化技术。docker 的镜像只是(最核心的环境 4M )十分的小巧

关于Docker

Docker 基于 Go 语言开源项目

比较Docker 和虚拟机技术的不同:

查看更多

undefined

Docker网络

理解 Docker0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
root@9-134-239-95:tomcat# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 52:54:00:d2:e6:38 brd ff:ff:ff:ff:ff:ff
inet 9.134.239.95/21 brd 9.134.239.255 scope global eth1
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:7e:31:2e:67 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.1/24 brd 192.168.10.255 scope global docker0
valid_lft forever preferred_lft forever

# 注意 docker0 的地址为 192.168.10.1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
docker run -d -P --name centos01 centos:7

# 查看容器内部的网络地址 ip addr, 发现容器启动的时候会得到一个 eth0 的容器内部ip地址,dokcer分配的
docker exec -it centos01 ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
134: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:c0:a8:0a:03 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.3/24 brd 192.168.10.255 scope global eth0
valid_lft forever preferred_lft forever

# linux 宿主机下可以ping 同docker 容器的ip 地址
1
2
再到 宿主机下执行 ip addr 
便可以发现又出现和容器互连的网卡

查看更多