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

观其大纲

第一篇 容器技术与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基础

常用命令表

  • 操作 命令
    实例

通用命令

  • 查看 docker 版本 docker version
    docker version
  • 查看 docker 信息 docker info
    docker info
  • 查看某命令 help 信息 docker help [command]
    docker help attach
  • 查看 docker help 信息 docker --help
    docker --help

容器操作命令

  • 创建 container docker create
    docker create chenhengjie123/xwalkdriver
  • 创建并运行 container docker run
    docker run chenhengjie123/xwalkdriver /bin/bash
  • 创建并运行 container 后进入其 bash 控制台
    docker run -t -i image /bin/bash
    docker run -t -i ubuntu /bin/bash
  • 创建并运行 container 并让其在后台运行,并端口映射
    docker run -p [port in container]:[port in physical system] -d [image] [command]
    docker run -p 5000:5000 -d training/webapp python app.py
  • 查看正在运行的所有 container 信息 docker ps
    docker ps
  • 查看最后创建的 container docker ps -l
    docker ps -l
  • 查看所有 container ,包括正在运行和已经关闭的 docker ps -a
    docker ps -a
  • 输出指定 container 的 stdout 信息(用来看 log ,效果和 tail -f 类似,会实时输出。)
    docker logs -f [container]
    docker logs -f nostalgic_morse
    补充 docker logs -f -t --since="2017-05-01" --tail=10 edu_web_01
  • 获取 container 指定端口映射关系 docker port [container] [port]
    docker port nostalgic_morse 5000
  • 查看 container 进程列表 docker top [container]
    docker top nostalgic_morse
  • 查看 container 详细信息 docker inspect [container]
    docker inspect nostalgic_morse
  • 停止 continer docker stop [container]
    docker stop nostalgic_morse
  • 强制停止 container docker kill [container]
    docker kill nostalgic_morse
  • 启动一个已经停止的 container docker start [container]
    docker start nostalgic_morse
  • 重启 container (若 container 处于关闭状态,则直接启动)
    docker restart [container]
    docker restart nostalgic_morse
  • 删除 container docker rm [container]
    docker rm nostalgic_morse

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

镜像操作命令

  • 从 container 创建 image, docker commit [container] [imageName]
    docker commit nostalgic_morse ouruser/sinatra:v2
  • 从 Dockerfile 创建 image, docker build -t [imageName] [pathToFolder]
    docker build ouruser/sinatra:v3 .
  • 查看本地所有 image, docker images
    docker images
  • 显示镜像构建历史 docker history [OPTIONS] IMAGE
    docker history runoob/ubuntu:v3
  • 在 registry 中搜索镜像 docker search [query]
    docker search ubuntu
  • 从 registry 中获取镜像 (若无指定 tag 名称,则默认使用 latest 这个 tag)
    docker pull [imageName]
    docker pull ubuntu:14.04
    docker pull training/webapp
  • 给 image 打 tag, docker tag [imageId] [imageName]
    docker tag 5db5f8471261 ouruser/sinatra:devel
  • 把本地 image 上传到 registry 中 (此时会把所有 tag 都上传上去)
    docker push [imageName]
    docker push ouruser/sinatra
  • 删除本地 image, docker rmi [image]
    docker rmi training/sinatra

注意:注意: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镜像理解
  • base 镜像有两层含义:
    1 不依赖其他镜像,从 scratch 构建。
    2 其他镜像可以之为基础进行扩展。
    能称作 base 镜像的通常都是各种 Linux 发行版的 Docker 镜像,比如 Ubuntu, Debian, CentOS 等

  • base镜像内容:
    下载镜像:
    docker pull centos
    查看镜像信息:docker images centos # 大约200M
    Linux 操作系统由内核空间和用户空间组成。如下图所示:

linux操作系统

rootfs

  • 内核空间是 kernel,Linux 刚启动时会加载 bootfs 文件系统,之后 bootfs 会被卸载掉。
  • 用户空间的文件系统是 rootfs,包含我们熟悉的 /dev, /proc, /bin 等目录。对于 base 镜像来说,底层直接用 Host 的 kernel,自己只需要提供 rootfs 就行了。
  • 而对于一个精简的 OS,rootfs 可以很小,只需要包括最基本的命令、工具和程序库就可以了。相比其他 Linux 发行版,CentOS 的 rootfs 已经算臃肿的了,alpine 还不到 10MB。
  • 我们平时安装的 CentOS 除了 rootfs 还会选装很多软件、服务、图形桌面等,需要好几个 GB 就不足为奇了。
  • base 镜像提供的是最小安装的 Linux 发行版。

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 导出和导入镜像

  • 将镜像导出到文件
    docker export cbe3cb7799ed > update.tar
  • 基于导出的文件创建一个新静像(导入镜像)
    docker import - update < update.tar
    新镜像为update
  • 镜像的备份和恢复 save 和load
    docker save -o update1.tar update
    备份, -o 输出到文件
    docker rmi update
    docker load < update1.tar
    恢复

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指令

  • 1、From指令
    From 或者From :
    DockerFile第一条必须为From指令。如果同一个DockerFile创建多个镜像时,可使用多个From指令(每个镜像一次)
  • 2、MAINTAINER
    格式为maintainer ,指定维护者的信息
  • 3、RUN
    格式为Run 或者Run [“executable” ,”Param1”, “param2”]
    前者在shell终端上运行,即/bin/sh -C,后者使用exec运行。例如:RUN [“/bin/bash”, “-c”,”echo hello”]
    每条run指令在当前基础镜像执行,并且提交新镜像。当命令比较长时,可以使用“/”换行。

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

  • 4、CMD指令
    支持三种格式:
    CMD [“executable” ,”Param1”, “param2”]使用exec执行,推荐
    CMD command param1 param2,在/bin/sh上执行
    CMD [“Param1”, “param2”] 提供给ENTRYPOINT做默认参数。
    每个容器只能执行一条CMD命令,多个CMD命令时,只最后一条被执行。

  • 5、EXPOSE
    格式为 EXPOSE […] 。
    告诉Docker服务端容器暴露的端口号,供互联系统使用。在启动Docker时,可以通过-P,主机会自动分配一个端口号转发到指定的端口。使用-P,则可以具体指定哪个本地端口映射过来
    例如:
    EXPOSE 22 80 8443

  • 6、ENV
    格式为 ENV 。 指定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持。
    例如
    ENV PG_MAJOR 9.3
    ENV PG_VERSION 9.3.4
    RUN curl -SL http://example.com/postgres-$PG_VERSION.tar.xz | tar -xJC /usr/src/postgress && …
    ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATH

  • 7、ADD
    ADD命令有两个参数,源和目标。它的基本作用是从源系统的文件系统上复制文件到目标容器的文件系统。如果源是一个URL,那该URL的内容将被下载并复制到容器中。
    ADD [source directory or URL] [destination directory]
    ADD /my_app_folder /my_app_folder

  • 8、ENTRYPOINT
    两种格式:
    ENTRYPOINT [“executable”, “param1”, “param2”]
    ENTRYPOINT command param1 param2 (shell中执行)。
    配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。
    每个Dockerfile中只能有一个 ENTRYPOINT ,当指定多个时,只有最后一个起效。

  • 9、VOLUME
    格式为 VOLUME [“/data”] 。
    创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。

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

  • 11、WORKDIR
    格式为 WORKDIR /path/to/workdir 。
    为后续的 RUN 、 CMD 、 ENTRYPOINT 指令配置工作目录。
    可以使用多个 WORKDIR 指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径。例如
    WORKDIR /a
    WORKDIR b
    WORKDIR c
    RUN pwd
    则最终路径为 /a/b/c 。

  • 12、ONBUILD
    格式为 ONBUILD [INSTRUCTION] 。
    配置当所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令。
    例如,Dockerfile使用如下的内容创建了镜像 image-A 。

[…] 
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 。

  • 13 CMD和ENTRYPOINT 差异对比
    两个共同点:
    都可以指定shell或exec函数调用的方式执行命令;
    当存在多个CMD指令或ENTRYPOINT指令时,只有最后一个生效;
    差异:
    差异1:CMD指令指定的容器启动时命令可以被docker run指定的命令覆盖,而ENTRYPOINT指令指定的命令不能被覆盖,而是将docker run指定的参数当做ENTRYPOINT指定命令的参数。
    差异2:CMD指令可以为ENTRYPOINT指令设置默认参数,而且可以被docker run指定的参数覆盖;

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高阶实践
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容