前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《 Docker 进阶与实战 》 读书笔记

《 Docker 进阶与实战 》 读书笔记

作者头像
微风-- 轻许--
发布2019-05-26 20:43:37
5320
发布2019-05-26 20:43:37
举报
文章被收录于专栏:java 微风java 微风

版权声明:这可是本菇凉辛辛苦苦原创的,转载请一定带上我家地址,不要忘记了哈 . https://cloud.tencent.com/developer/article/1436093

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

  1. Docker 定义:一个开源的容器引擎,可以方便地对容器进行管理,不同容器可以共享底层的只读镜像。
  2. Docker 是一个典型的 C/S 架构的应用。
  3. Docker deamon 可以被理解成 Docker Server ,也常常用 Docker Engine 来描述它。
  4. 容器以镜像为基础,同时又为镜像提供了一个标准和隔离的执行环境。镜像是这个运行环境的静态体现。
  5. Registry 是存放镜像的仓库,通常被部署在服务器或者云端。支持镜像的分发和更新。
代码语言:txt
复制
仓库的名字通常由两部分组成,中间以斜线分开,前是用户名,后是镜像名。如:tom/ubuntu 。
代码语言:txt
复制
Docker 公司提供的官方 Registry 叫 Docker Hub 。鉴权认证保证了 Registry 访问的安全性。
代码语言:txt
复制
若要将镜像 push 到第三方 Registry , 那么镜像名中必须包含该 Registry 地址。
代码语言:txt
复制
其实 Registry 也是一个单独的开源项目。任何人都可以下载后部署一个自己的 Registry 。
  1. Docker 的安装:
代码语言:javascript
复制
sudo ape-get install docker.io
  1. Docker Container : 内核容器技术。自动构建时当前机器的配置不会影响镜像的构建过程。
代码语言:txt
复制
Docker  容器与主机共享操作系统内核。
  1. 容器虚拟化是一种操作系统虚拟化,属于轻量级的虚拟化。
  2. Namespace : 命名空间 / 名字空间,主要作访问隔离。将内核的全部资源作封装,使得每个空间有一份独立资源,不同进程在各自空间内对同一种资源的使用不会相互干扰。
  3. Cgroup 是 Control group 的简称,亦称为控制组,主要作资源控制。用于限制和隔离一组进程对系统资源的使用。
  4. 容器组成公式:
代码语言:javascript
复制
容器 = cgroup + namespace + rootfs + 容器引擎(用户态工具)


Cgroup : 资源控制

Namespace : 访问隔离

rootfs :文件系统隔离

容器引擎 :生命周期控制
  1. $$ 表示当前进程。
  2. IPC 是 Inter - Process Communication 的简写:进程间通信。
  3. Mount Namespace 用于隔离文件系统挂载点,删除方式:
代码语言:javascript
复制
ip netns delete new_ns 
  1. host 的普通用户进程在容器里可以是 0 号用户,也就是 root 用户。
  2. Docker image 是用来启动容器的只读模板。
  3. 导入镜像有 2 个可用命令:

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

18.生成镜像方式:

代码语言:javascript
复制
docker commit :可增量的生成一个镜像。

docker build : 通过 dockerfile 文件生成镜像。
  1. 列出容器:
代码语言:javascript
复制
docker ps 
  1. 列出镜像:
代码语言:javascript
复制
docker images 
  1. 查看容器和镜像详细信息:
代码语言:javascript
复制
docker inspect 
  1. Docker images 包含数据必要的元数据。数据由一层层的 image layer 组成,元数据则是一些 JSON 文件。用来描述数据(image layer)之间的关系及容器的一些配置信息。
  2. Docker 对镜像进行了完整性校验,其完整性的凭证是由镜像仓库提供的。
  3. image ID 实际上只是最上层的 layer ID,所以 Docker inspect 也适用于任何一层 layer 。
  4. “ env ” : 容器启动时会作为容器的环境变量。“ Cmd ” : 容器启动时的默认命令。
  5. Docker image 可使用写时复制,快并节省空间。
  6. 若制作 image 时使用到了上些关键信息(账号、密码等),则需要在同层删除,不然这些信息会一直存在于 image 中。
  7. 若下载镜像不带标签,会把 ubuntu 仓库下官方(默认 tag )镜像全部下载。
  8. 沙盒:隔离的网络运行环境,保存了容器网络栈的配置,包括了对网络接口、路由表和 DNS 配置的管理。
  9. docker create 、 docker run 可带参数:-v : 添加数据卷,并可多次指定来挂载多个数据卷。
代码语言:txt
复制
  -v 会在容器的 /tmp/data 目录下创建一个新的数据卷。
代码语言:txt
复制
  可用 docker Inspet 查看数据卷在主机中的位置。
代码语言:txt
复制
  -v 也可将 Docker  daemon 所在主机上的文件或文件夹挂载到容器中。
代码语言:txt
复制
  -v 参数的主机目录必须使用绝对路径,若指定路径不存在, Docker 会自动创建该目录。
代码语言:txt
复制
   使用数据卷容器存储的数据不会轻易丢失,删除容器、甚至是初始化该数据卷的 dbdata ,该数据卷也不会被删除。
  1. 在本机部署 Convoy 插件后可用 Convoy 创建一个卷: ( 见书 P103 )
代码语言:javascript
复制
sudo convoy create volume_name

删除:

代码语言:javascript
复制
sudo convoy delete volume_name

备份:

代码语言:javascript
复制
sudo convoy backup create snaplvoll --dest vfs:///opt/convoy/
  1. Linux 的命令 ulimit 可对一些资源起限制作用,包括:
代码语言:javascript
复制
core dump 文件的大小、

进程数据段的大小、

可创建文件的大小、

常驻内存集的大小 、

打开文件的数量、

进程栈的大小、

CPU 时间 、

单个用户最大线程数、

进程最大虚拟内存
  1. Docker 可设置容器的根文件系统为只读模式。
  2. Dockerfile 由四部分组成:
代码语言:javascript
复制
基础镜像信息、维护者信息、镜像操作指令、容器启动命令
代码语言:txt
复制
 其第一条有效信息必须是基础镜像信息: FROM 指令。用来指定要制作的镜像继承自哪个镜像。
代码语言:txt
复制
 可以写多个  FROM 指令来构建复杂镜像。     
代码语言:javascript
复制
EXPOSE : 暴露端口

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

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

ENV :指定一个环境变量。被后续 RUN 命令使用并在容器运行时保持。
  1. Docker 制作镜像的顺序:
代码语言:javascript
复制
1. 解析 Dockerfile,找到基础镜像。

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

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

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

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

6. 所有命令执行完后,commit 该容器为新的镜像。
  1. Docker run 命令中用 -p 实现端口映射。
代码语言:txt
复制
  80:8089  表示将主机上的 80 端口映射到容器中的 8089 端口。(对外端口:容器内端口)
  1. Docker build 命令可跟参数 -f :指定 build 命令中的 “ dockerfile ” 选项来设置所需的 Dockerfile 。
  2. docker-compose-yml 文件中:
代码语言:javascript
复制
1. “ ports ” 对应 docker run 中的 -p 参数。

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

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

代码语言:txt
复制
 1) 直接在主机中配置 Jenkins 环境 。
代码语言:txt
复制
 2) 使用  Docker 镜像配置 Jenkins 环境:
代码语言:javascript
复制
1. 下载 Jenkins 镜像:  docker pull jenkins

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年02月23日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档