docker分布式测试

Docker总结:《Docker从入门到实战(黄靖钧)》

2018-06-12  本文已影响155人  周少言

观其大纲

第一篇 容器技术与Docker概念
1认识容器技术
2 Docker基本概念
3 安装和测试Docker
第二篇 Docker基础知识
4 Docker基础
5 Docker镜像
6 Dockerfile文件
7 Docker仓库
8 Docker容器
9 数据卷
10 网络管理
第三篇 Docker进阶实战
11 操作系统
12 编排工具-compose
13 web服务器与应用
14 数据库
15 编程语言
16 Docker API
17 私有仓库
18 集群网络
19 容器安全
20 Docker网络生态

大纲细节

第1篇 容器技术与Docker概念
第1章 容器技术
1.1 什么是容器
1.2 容器技术的前世今生
1.3 容器的原理
1.4 容器云
1.5 容器与Docker
1.6 本章小结
第2章 Docker简介
2.1 什么是Docker
2.2 Docker的功能及优缺点
2.3 Docker和虚拟机
2.4 Docker与runC
2.5 Docker基本架构
2.6 本章小结
第3章 安装Docker
3.1 Linux系统
3.2 Windows与Mac OS系统
3.3 二进制安装
3.4 本章小结
第2篇 Docker基础知识
第4章 Docker基础
4.1 Docker基本操作
4.2 启动第一个Docker容器
4.3 构建第一个Docker镜像
4.4 本章小结
第5章 Docker镜像
5.1 认识镜像
5.2 创建镜像
5.3 导出和导入镜像
5.4 发布镜像
5.5 删除镜像
5.6 Docker镜像扩展
5.7 本章小结
第6章 Dockerfile文件
6.1 Dockerfile基本结构
6.2 Dockerfile指令
6.3 镜像构建实战
6.4 本章小结
第7章 Docker仓库
7.1 官方仓库Docker Hub
7.2 国内镜像仓库
7.3 私有仓库
7.4 Registry原理
7.5 本章小结
第8章 Docker容器
8.1 容器基本操作
8.2 进入容器内部
8.3 导出和导入容器
8.4 容器结构
8.5 本章小结
第9章 数据卷
9.1 数据卷是什么
9.2 为容器挂载数据卷
9.3 备份、恢复、迁移数据卷
9.4 容器数据卷扩展
9.5 本章小结
第10章 网络管理
10.1 Docker网络基础
10.2 Docker网络模式
10.3 Docker网络配置
10.4 本章小结
第3篇 Docker进阶实战
第11章 操作系统
11.1 Alpine发行版
11.2 Busybox发行版
11.3 Debian/Ubuntu发行版
11.4 CentOS/Fedora发行版
11.5 CoreOS发行版
11.6 RancherOS发行版
11.7 本章小结
第12章 编排工具Compose
12.1 安装Docker Compose
12.2 Compose命令基础
12.3 Compose配置文件
12.4 Compose实战
12.5 本章小结
第13章 Web服务器与应用
13.1 Apache服务器
13.2 Nginx服务器
13.3 Tomcat服务器
13.4 其他Web服务器
13.5 本章小结
第14章 数据库
14.1 MySQL数据库
14.2 PostgreSQL数据库
14.3 Redis数据库
14.4 MongoDB数据库
14.5 其他
14.6 本章小结
第15章 编程语言
15.1 C/C++语言
15.2 Golang语言
15.3 Java语言
15.4 JavaScript(Node.js)语言
15.5 PHP语言
15.6 Python语言
15.7 Swift语言
15.8 本章小结
第16章 Docker API介绍
16.1 认识Docker API
16.2 Docker Remote API介绍
16.3 其他API
16.4 本章小结
第17章 私有仓库
17.1 Docker Registry介绍
17.2 认证与前端
17.3 企业级私有仓库Harbor
17.4 私有仓库前端授权工具Portus
17.5 本章小结
第18章 集群网络
第19章 Docker安全




熟知概念

第1篇 容器技术与Docker概念
第1章 容器技术

  • 什么是容器
    容器映像是一个软件的轻量级独立可执行软件包,包含运行它所需的一切:代码,运行时,系统工具,系统库,设置。不管环境如何,集装箱化软件都可以运行相同的Linux和Windows应用程序。容器将软件与其周围环境隔离开来,例如开发环境和登台环境之间的差异,并有助于减少在同一基础架构上运行不同软件的团队之间的冲突。


    what is a container?

LXC
Linux Container容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源。

容器技术主要包括Cgroup和Namespace这两个内核特性。
Cgroup
Cgroup是control group,又称为控制组,它主要是做资源控制。原理是将一组进程放在放在一个控制组里,通过给这个控制组分配指定的可用资源,达到控制这一组进程可用资源的目的。
Namespace
Namespace又称为命名空间,它主要做访问隔离。其原理是针对一类资源进行抽象,并将其封装在一起提供给一个容器使用,对于这类资源,因为每个容器都有自己的抽象,而他们彼此之间是不可见的,所以就可以做到访问隔离。

对于Linux容器的最小组成,除了上面两个抽象的技术概念还不够,完整的容器可以用以下公示描述:

容器=Cgroup+Namespace+rootfs+容器引擎(用户态工具)。

其中各项功能分别为:
Cgroup:资源控制;
Namespace:访问隔离;
rootfs:文件系统隔离;
容器引擎:生命周期控制;

第2章 Docker简介
2.1 什么是Docker

Docker是一个用于开发、迁移、运行的开发平台。它使你能够将你的应用程序从基础架构中分离,从而可以快速交付。使用Docker,你可以以与管理应用程序相同的方式来管理这些基础架构。使用Docker的方法,进行快速开发,测试,并可以显著的减少编写代码和运行之间的时间延迟。
就像官网上说的:Build,Ship,and Run Any App, Anywhere

Docker基本架构
docker主要有以下几部分组成:

Docker Client 客户端
Docker daemon 守护进程
Docker Image 镜像
Docker Container 容器
Docker Registry 仓库

  • 客户端和守护进程:
    1 Docker是C/S(客户端client-服务器server)架构模式。
    docker通过客户端连接守护进程,通过命令向守护进程发出请求,守护进程通过一系列的操作返回结果。
    2 docker客户端可以连接本地或者远程的守护进程。
    3 docker客户端和服务器通过socket或RESTful API进行通信。


    docker架构

第3章 安装Docker

第2篇 Docker基础知识
第4章 Docker基础

常用命令表

  • 操作 命令
    实例

通用命令

容器操作命令

注意:命令中需要指定 container 时,既可使用其名称,也可使用其 id 。

镜像操作命令

注意:注意:image 中没有指定 tag 名称的话默认使用 latest 这个 tag 。然而 latest 的含义和 VCS 中的 head 不一样,不是代表最新一个镜像,仅仅是代表 tag 名称为 latest 的镜像。若不存在 tag 名称为 latest 的镜像则会报错。

小结:

docker 虽然是一个虚拟化技术,但使用上却更像是在管理系统软件或者代码。里面的一些 ps,top,rm 命令让使用 Linux 命令的人感到十分亲切(虽然它们的语义有点不一样。。。),start,stop,restart 让你感觉像是在控制 service ,而 push,pull,commit,tag 又让你觉得像是在使用 git 。因此程序员会感到很亲切且容易上手。

同时由于可以使用 Dockerfile 进行 image 的构建,且 docker hub 支持从 github 等地方自动根据 Dockerfile 进行构建,所以 docker 把运行环境也集成到 CI 中了。

美中不足的是由于 docker 目前仅支持 linux 上的容器技术,因此它要在非 Linux 系统下运行必须加多一个虚拟机层。这会造成一些在 Linux 上运行不会出现的问题(ip 地址、硬件资源、文件映射等),同时由于基于 linux ,一些 windows 的程序会水土不服,泛用性比虚拟机差一些。

但带来的好处是占用的系统资源低很多。一个只能开数个虚拟机的电脑一般能开数十个 container ,且 container 的启动时间一般在数秒内,比虚拟机快得多。另外,由于 docker 的 image 除了一些特殊的基础镜像外基本都是增量镜像,因此重复部分不会耗费额外的资源,所以几个看起来有数 g 的 image 如果里面使用的基础镜像有重复部分(大部分情况下都会有部分重复),那么它们实际占用空间将会小得多。

第5章 Docker镜像
5.1 认识镜像
镜像是Docker容器的基石,容器是镜像的运行实例,有了镜像才能启动容器。

Docker镜像中的base镜像理解
linux操作系统

rootfs

base镜像----提供了一个基本的操作系统环境,用户可以根据需要安装和配置软件
base镜像通常是各种Linux发行版的Docker镜像比如ubuntu、Debian、centos等。
base镜像只是在用户空间与发行版一致,kernel版本与发行版是不同的。比如说虚机系统是ubuntu14.04,运行一个容器是centos系统的,那么centos使用的其实就是本虚机的kernel。

5.2 创建镜像

当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。

  • 列出镜像列表
    我们可以使用 docker images 来列出本地主机上的镜像。
    我们如果要使用版本为15.10的ubuntu系统镜像来运行容器时,命令如下:
    docker run -t -i ubuntu:15.10 /bin/bash
  • 获取一个新的镜像
    当我们在本地主机上使用一个不存在的镜像时 Docker 就会自动下载这个镜像。如果我们想预先下载这个镜像,我们可以使用 docker pull 命令来下载它。
    docker pull ubuntu:13.10
  • 查找镜像
    我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/
    我们也可以使用 docker search 命令来搜索镜像。比如我们需要一个httpd的镜像来作为我们的web服务。我们可以通过 docker search 命令搜索 httpd 来寻找适合我们的镜像。
    docker search httpd
  • 创建镜像
    当我们从docker镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。
    1.从已经创建的容器中更新镜像,并且提交这个镜像
    2.使用 Dockerfile 指令来创建一个新的镜像
  • 更新镜像
    更新镜像之前,我们需要使用镜像来创建一个容器。
    docker run -t -i ubuntu:15.10 /bin/bash
    在运行的容器内使用命令进行更新:
    apt-get update
    在完成操作之后,输入 exit命令来退出这个容器。
    此时ID为e218edb10161的容器,是按我们的需求更改的容器。我们可以通过命令 docker commit来提交容器副本。
    docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2

各个参数说明:
-m:提交的描述信息
-a:指定镜像作者
e218edb10161:容器ID
runoob/ubuntu:v2:指定要创建的目标镜像名

  • 构建镜像
    我们使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。
runoob@runoob:~$ cat Dockerfile 
FROM    centos:6.7
MAINTAINER      Fisher "fisher@sudops.com"

RUN     /bin/echo 'root:123456' |chpasswd
RUN     useradd runoob
RUN     /bin/echo 'runoob:123456' |chpasswd
RUN     /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE  22
EXPOSE  80
CMD     /usr/sbin/sshd -D

每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
FROM,指定使用哪个镜像源
RUN 指令告诉docker 在镜像内执行命令,安装了什么。
然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。

docker build -t runoob/centos:6.7 .

-t 指定要创建的目标镜像名
. Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
使用docker images 查看创建的镜像

  • 设置镜像标签
    我们可以使用 docker tag 命令,为镜像添加一个新的标签。
    docker tag 860c279d2fec runoob/centos:dev

5.3 导出和导入镜像

5.4 发布镜像
5.5 删除镜像
5.6 Docker镜像扩展

第6章 Dockerfile文件
6.1 Dockerfile基本结构
DockerFile分为四部分组成:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。例如:

#第一行必须指定基于的基础镜像
From ubutu
#维护者信息
MAINTAINER docker_user  docker_user@mail.com
#镜像的操作指令
apt/sourcelist.list
RUN apt-get update && apt-get install -y ngnix 
RUN echo "\ndaemon off;">>/etc/ngnix/nignix.conf
#容器启动时执行指令
CMD /usr/sbin/ngnix

6.2 Dockerfile指令

exec命令用于调用并执行指令的命令。exec命令通常用在shell脚本程序中,可以调用其他的命令。如果在当前终端中使用命令,则当指定的命令执行完毕后会立即退出终端。
-c:在空环境中执行指定的命令。
例如:exec -c echo Linux C++

11、USER
格式为 USER daemon 。
指定运行容器时的用户名或UID,后续的 RUN 也会使用指定用户。
当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户,例如: RUN groupadd -r postgres && useradd -r -g postgres postgres 。要临时获取管理员权限可以使用 gosu ,而不推荐 sudo 。

[…] 
ONBUILD ADD . /app/src 
ONBUILD RUN /usr/local/bin/python-build –dir /app/src 
[…] 
#如果基于A创建新的镜像时,新的Dockerfile中使用 FROM image-A
 指定基础镜像时,会自动执行 ONBUILD 指令内容,
等价于在后面添加了两条指令。
FROM image-A
#Automatically run the following
ADD . /app/src
RUN /usr/local/bin/python-build --dir /app/src

使用 ONBUILD 指令的镜像,推荐在标签中注明,例如 ruby:1.9-onbuild 。

ENTRYPOINT  
An ENTRYPOINT allows you to configure a container that will run as an executable.它可以让你的容器功能表现得像一个可执行程序一样。

  • 例子一:
    使用下面的ENTRYPOINT构造镜像:
    ENTRYPOINT ["/bin/echo"]
    那么docker build出来的镜像以后的容器功能就像一个/bin/echo程序:
    比如我build出来的镜像名称叫imageecho,那么我可以这样用它:
    docker run -it imageecho “this is a test”
    这里就会输出”this is a test”这串字符,而这个imageecho镜像对应的容器表现出来的功能就像一个echo程序一样。 你添加的参数“this is a test”会添加到ENTRYPOINT后面,就成了这样 /bin/echo “this is a test” 。现在你应该明白进入点的意思了吧。
  • 例子二:
    ENTRYPOINT ["/bin/cat"]
    构造出来的镜像你可以这样运行(假设名为st):
    docker run -it st /etc/fstab
    这样相当: /bin/cat /etc/fstab 这个命令的作用。运行之后就输出/etc/fstab里的内容。

6.3 镜像构建实战

Docker实战-编写Dockerfile

[root@docker docker_demo]# cat Dockerfile 
# base image
FROM centos

# MAINTAINER
MAINTAINER json_hc@163.com

# put nginx-1.12.2.tar.gz into /usr/local/src and unpack nginx
ADD nginx-1.12.2.tar.gz /usr/local/src

# running required command
RUN yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel 
RUN yum install -y libxslt-devel -y gd gd-devel GeoIP \
 GeoIP-devel pcre pcre-devel
RUN useradd -M -s /sbin/nologin nginx

# mount a dir to container
ONBUILD VOLUME ["/data"]

# change dir to /usr/local/src/nginx-1.12.2
WORKDIR /usr/local/src/nginx-1.12.2

# execute command to compile nginx
RUN ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx \
--with-file-aio  --with-http_ssl_module  --with-http_realip_module    \
--with-http_addition_module    --with-http_xslt_module  \
 --with-http_image_filter_module    --with-http_geoip_module  \
--with-http_sub_module  --with-http_dav_module \
--with-http_flv_module    --with-http_mp4_module \
--with-http_gunzip_module  --with-http_gzip_static_module  \
--with-http_auth_request_module  --with-http_random_index_module  \
 --with-http_secure_link_module   --with-http_degradation_module  \
 --with-http_stub_status_module && make && make install

# setup PATH
ENV PATH /usr/local/nginx/sbin:$PATH

# EXPOSE
EXPOSE 80

# the command of entrypoint
ENTRYPOINT ["nginx"]

CMD ["-g"]

第7章 Docker仓库
7.1 官方仓库Docker Hub
7.2 国内镜像仓库
7.3 私有仓库
7.4 Registry原理
7.5 本章小结
第8章 Docker容器
8.1 容器基本操作
8.2 进入容器内部
8.3 导出和导入容器
8.4 容器结构
8.5 本章小结
第9章 数据卷
9.1 数据卷是什么
9.2 为容器挂载数据卷
9.3 备份、恢复、迁移数据卷
9.4 容器数据卷扩展
9.5 本章小结
第10章 网络管理
10.1 Docker网络基础
10.2 Docker网络模式
10.3 Docker网络配置
10.4 本章小结
第3篇 Docker进阶实战
第11章 操作系统
11.1 Alpine发行版
11.2 Busybox发行版
11.3 Debian/Ubuntu发行版
11.4 CentOS/Fedora发行版
11.5 CoreOS发行版
11.6 RancherOS发行版
11.7 本章小结
第12章 编排工具Compose
12.1 安装Docker Compose
12.2 Compose命令基础
12.3 Compose配置文件
12.4 Compose实战
12.5 本章小结
第13章 Web服务器与应用
13.1 Apache服务器
13.2 Nginx服务器
13.3 Tomcat服务器
13.4 其他Web服务器
13.5 本章小结
第14章 数据库
14.1 MySQL数据库
14.2 PostgreSQL数据库
14.3 Redis数据库
14.4 MongoDB数据库
14.5 其他
14.6 本章小结
第15章 编程语言
15.1 C/C++语言
15.2 Golang语言
15.3 Java语言
15.4 JavaScript(Node.js)语言
15.5 PHP语言
15.6 Python语言
15.7 Swift语言
15.8 本章小结
第16章 Docker API介绍
16.1 认识Docker API
16.2 Docker Remote API介绍
16.3 其他API
16.4 本章小结
第17章 私有仓库
17.1 Docker Registry介绍
17.2 认证与前端
17.3 企业级私有仓库Harbor
17.4 私有仓库前端授权工具Portus
17.5 本章小结
第18章 集群网络
第19章 Docker安全

Kubernetes入门与进阶实战培训


docker进阶与kubernetes基础 kubernetes进阶 Kubernetes高阶实践
上一篇下一篇

猜你喜欢

热点阅读