美文网首页docker分布式测试
Docker总结:《Docker从入门到实战(黄靖钧)》

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

作者: 周少言 | 来源:发表于2018-06-12 08:00 被阅读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基础

    常用命令表

    • 操作 命令
      实例

    通用命令

    • 查看 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高阶实践

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/iuzkeftx.html