前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

以下内容全文出自书目:《 Docker 进阶与实战 》

1. Docker 定义:一个开源的容器引擎,可以方便地对容器进行管理,不同容器可以共享底层的只读镜像。

2. Docker 是一个典型的 C/S 架构的应用。

3. Docker deamon 可以被理解成 Docker  Server ,也常常用 Docker  Engine 来描述它。

4. 容器以镜像为基础,同时又为镜像提供了一个标准和隔离的执行环境。镜像是这个运行环境的静态体现。

5. Registry 是存放镜像的仓库,通常被部署在服务器或者云端。支持镜像的分发和更新。

    仓库的名字通常由两部分组成,中间以斜线分开,前是用户名,后是镜像名。如:tom/ubuntu 。

    Docker 公司提供的官方 Registry 叫 Docker Hub 。鉴权认证保证了 Registry 访问的安全性。

    若要将镜像 push 到第三方 Registry , 那么镜像名中必须包含该 Registry 地址。

    其实 Registry 也是一个单独的开源项目。任何人都可以下载后部署一个自己的 Registry 。

 

6. Docker  的安装:

sudo ape-get install docker.io

7. Docker  Container : 内核容器技术。自动构建时当前机器的配置不会影响镜像的构建过程。

    Docker  容器与主机共享操作系统内核。

8. 容器虚拟化是一种操作系统虚拟化,属于轻量级的虚拟化。

9. Namespace : 命名空间 / 名字空间,主要作访问隔离。将内核的全部资源作封装,使得每个空间有一份独立资源,不同进程在各自空间内对同一种资源的使用不会相互干扰。

10. Cgroup  是 Control group 的简称,亦称为控制组,主要作资源控制。用于限制和隔离一组进程对系统资源的使用。

11. 容器组成公式:

容器 = cgroup + namespace + rootfs + 容器引擎(用户态工具)


Cgroup : 资源控制

Namespace : 访问隔离

rootfs :文件系统隔离

容器引擎 :生命周期控制

12. $$ 表示当前进程。

13. IPC 是 Inter - Process Communication 的简写:进程间通信。

14. Mount Namespace 用于隔离文件系统挂载点,删除方式:

ip netns delete new_ns 

15. host 的普通用户进程在容器里可以是 0 号用户,也就是 root 用户。

16. Docker  image 是用来启动容器的只读模板。

17. 导入镜像有 2 个可用命令:

docker import / docker load 。 docker load  一般只用于导入由 docker save 导出的镜像。

18.生成镜像方式:

docker commit :可增量的生成一个镜像。

docker build : 通过 dockerfile 文件生成镜像。

19. 列出容器:

docker ps 

20. 列出镜像:

docker images 

21. 查看容器和镜像详细信息:

docker inspect 

22. Docker images 包含数据必要的元数据。数据由一层层的 image layer 组成,元数据则是一些 JSON 文件。用来描述数据(image layer)之间的关系及容器的一些配置信息。

23. Docker  对镜像进行了完整性校验,其完整性的凭证是由镜像仓库提供的。

24. image ID 实际上只是最上层的 layer ID,所以 Docker  inspect 也适用于任何一层 layer 。

25. “ env ”  : 容器启动时会作为容器的环境变量。“ Cmd ” : 容器启动时的默认命令。

26. Docker  image 可使用写时复制,快并节省空间。

27. 若制作 image 时使用到了上些关键信息(账号、密码等),则需要在同层删除,不然这些信息会一直存在于 image 中。

28. 若下载镜像不带标签,会把 ubuntu 仓库下官方(默认 tag )镜像全部下载。

29. 沙盒:隔离的网络运行环境,保存了容器网络栈的配置,包括了对网络接口、路由表和 DNS 配置的管理。

30. docker create 、 docker run 可带参数:-v : 添加数据卷,并可多次指定来挂载多个数据卷。

      -v 会在容器的 /tmp/data 目录下创建一个新的数据卷。

      可用 docker Inspet 查看数据卷在主机中的位置。

      -v 也可将 Docker  daemon 所在主机上的文件或文件夹挂载到容器中。

      -v 参数的主机目录必须使用绝对路径,若指定路径不存在, Docker 会自动创建该目录。

       使用数据卷容器存储的数据不会轻易丢失,删除容器、甚至是初始化该数据卷的 dbdata ,该数据卷也不会被删除。

31. 在本机部署 Convoy 插件后可用 Convoy 创建一个卷: ( 见书 P103 )

sudo convoy create volume_name

删除:

sudo convoy delete volume_name

备份:

sudo convoy backup create snaplvoll --dest vfs:///opt/convoy/

32. Linux 的命令 ulimit 可对一些资源起限制作用,包括:

core dump 文件的大小、

进程数据段的大小、

可创建文件的大小、

常驻内存集的大小 、

打开文件的数量、

进程栈的大小、

CPU 时间 、

单个用户最大线程数、

进程最大虚拟内存

33. Docker 可设置容器的根文件系统为只读模式。

34. Dockerfile 由四部分组成:

基础镜像信息、维护者信息、镜像操作指令、容器启动命令

     其第一条有效信息必须是基础镜像信息: FROM 指令。用来指定要制作的镜像继承自哪个镜像。

     可以写多个  FROM 指令来构建复杂镜像。     

EXPOSE : 暴露端口

CMD :容器启动时执行的命令。
      每个 Dockerfile 只能有一条 CMD 命令,写了多条时只有最后一条会被执行。
      若用户启动容器时指定了运行命令,则会覆盖 CMD 指定命令。

VOLUME :创建一个可从本地主机或其它容器挂载的挂载点。
         常用来存放数据库或需要永久保存的数据。

ENV :指定一个环境变量。被后续 RUN 命令使用并在容器运行时保持。

35. Docker 制作镜像的顺序:

1. 解析 Dockerfile,找到基础镜像。

2. 以基础镜像为基础,创建一个容器。

3. 在容器中按顺序执行 Dockerfile 中的命令。

4. 若不是 RUN 命令,如 ENV 命令,记录下来以便启动时执行。

5. 把属性命令记录在 Image 的属性中。

6. 所有命令执行完后,commit 该容器为新的镜像。

36. Docker run 命令中用 -p 实现端口映射。

      80:8089  表示将主机上的 80 端口映射到容器中的 8089 端口。(对外端口:容器内端口)

37. Docker build 命令可跟参数 -f :指定 build 命令中的 “ dockerfile ”  选项来设置所需的 Dockerfile 。

38. docker-compose-yml 文件中:

1. “ ports ” 对应 docker run 中的 -p 参数。

2. “ volumes ” 对应 -v 选项。
 
3. “ links ” 对应 “ --links ” 选项。

39.搭建 Jenkins 环境有 2 种方式:

     1) 直接在主机中配置 Jenkins 环境 。

     2) 使用  Docker 镜像配置 Jenkins 环境:

1. 下载 Jenkins 镜像:  docker pull jenkins

2. 启动 Jenkins 容器: docker run -d -p 49001:8080 -t Jenkins

   -d : 后台运行; -p : 端口映射; -t :给容器命名。

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐