前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。
以下内容全文出自书目:《 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 jenkins2. 启动 Jenkins 容器: docker run -d -p 49001:8080 -t Jenkins-d : 后台运行; -p : 端口映射; -t :给容器命名。