Docker学习笔记
docker是什么
- Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
docker的安装和卸载
- 配置源
- 查看docker-ce可用版本
- yum list docker-ce
- 安装指定版本
- yum -y install docker-ce-18.06.0.ce-3.el7
- 启用docker服务
- systemctl status docker
- systemctl start docker
- docker version
- 设置开机启动docker
- systemctl enable docker
- 卸载docker
- yum remove docker-ce
- 删除镜像、容器、volumes
- sudo rm -rf /var/lib/docker
docker常用命令
| 功能划分 | 命令 | 功能 |
|---|---|---|
| 相关信息 | info | 查看docker信息,包括container、imaget统计以及driver信息 |
| version | 查看docker版本 | |
| systemctl cat docker | 查看配置文件位置和信息 | |
| 系统运维 | attach | attach到一个正在运行的容器 |
| build | 通过Dockerfile创建一个镜像 | |
| commit | 将运行的容器提交为一个镜像 | |
| cp | 主机与container之间复制文件 | |
| create | 创建一个容器 | |
| exec | 在一个运行的容器中执行一条命令 | |
| export | 将一个运行的容器导出为一个tar包 | |
| import | 将一个tar包导入成一个镜像(对应export) | |
| save | 将一个镜像导出为一个tar包 | |
| load | 将一个tar包导入为一个镜像(对应save) | |
| top | 查看容器的进程信息 | |
| inspect | 查看容器或镜像的详细信息 | |
| run | 启动容器 | |
| kill | 杀死容器 | |
| pause/unpause | 暂停/恢复容器 | |
| port | 查看容器port信息 | |
| ps | 列出所有容器 | |
| start/restart/stop | 启动/重启/终止容器 | |
| rm/rmi | 删除容器/镜像 | |
| rename | 重命名容器 | |
| tag | 给镜像打标记(仓库归属或版本号) | |
| update | 更新容器配置 | |
| volume | 管理docker数据卷 | |
| network | 管理docker网络 | |
| 日志信息 | history | 查看docker镜像历史信息 |
| logs | 查看容器日志 | |
| events | 查看服务器实时事件 | |
| stats | 查看容器性能数据CPU、Memory、Net、Disk等 | |
| Docker Hub | login/logout | 登入/登出 |
| pull/push | 镜像拉取/推送 | |
| search | 镜像搜索 | |
| 其他 | diff | 查看容器存储层改变 |
volume数据卷相关命令
| 名称 | 内容 | 示例 |
|---|---|---|
| create | 创建数据卷 | docker volume create my-vol |
| ls | 显示所有数据卷 | docker volume ls |
| inspect | 查看详细信息 | docker volume inspect my-vol |
| --mount | 启动容器时挂载数据卷(两种写法) | docker run -d -P --name web # -v my-vol:/wepapp --mount source=my-vol,target=/webapp training/webapp python app.py如果是挂载本地主机目录--mount需要加 type=bind, |
| rm | 删除数据卷 | docker volume rm my-vol或者删除容器时docker rm -v或者删除无主数据卷docker volume prune |
docker架构
- docker使用客户端-服务器架构
Client负责与Docker daemon通信,后者负责构建、运行、分发Docker容器。两者可以在同一个系统上运行也可以远程连接。使用REST API,通过UNIX套接字或者网络接口。
- dokcer deamon(dockerd)
监听Docker API请求并管理Docekr对象,如镜像、容器、网络和volume。- docker client(docker)
用户与docker交互的主要方式,与dockerd通信。- docker registry
存储Docker镜像。Docker Hub是一个公共注册中心,也可以建立自己的私人registry。
docker核心技术
- Docker使用Go语言编写,它利用了Linux内核的一系列特性来实现其功能。
- Namespaces
Docker使用namespaces技术实现隔离的工作空间,称之为容器。每运行一个容器,Docker都为其创建了一组的命名空间。
| 名称 | 内容 | 作用 |
| - | :-: | :- |
| pid namespace | 进程id | 进程隔离 |
| net namespace | 网络 | 管理网络接口 |
| ipc namespace | 进程间通信 | 管理访问IPC资源 |
| mnt namespace | mount挂载 | 管理文件系统挂载点 |
| uts namespace | unix分时系统 | 隔离内核和版本标识符 |
- Control groups
cgroup给应用限制一组指定的资源集。cgroups允许Docker Engine共享可用硬件资源给容器。
- union file systems
联合文件系统(UnionFS)是通过创建层来操作的文件系统,这使得其非常轻量和快速。Docker Engine使用UnionFS给容器提供构建空间。Docker Engine支持多种联合文件系统的变体,如AUFS\btrfs\vfs\DeviceMapper
Dockerfile指令详解
| 指令 | 作用 | 格式 | 备注 |
|---|---|---|---|
| FROM | 指定基础镜像 | FROM scratch | |
| RUN | 执行命令 | RUN echo '一些东西' > /index.html,RUN ["可执行文件", "参数1", "参数2"] | |
| COPY | 复制文件 | COPY [--chown= |
会保留文件元数据 |
| ADD | 更高级的复制 | ADD --chown=55:mygroup files* /mydir/ | 常用于能自动解压缩场景gzip,bzip2,xz |
| CMD | 容器启动命令 | CMD <命令>,CMD ["可执行文件", "参数1", "参数2"...],CMD ["参数1", "参数2"...] | 最后一种在指定了 ENTRYPOINT 指令后,用 CMD 指定具体的参数。CMD可以被运行时指定命令覆盖。容器中的应用都应该前台执行,daemon off前台执行 |
| ENTRYPOINT | 入口点 | ENTRYPOINT [ "curl", "-s", "https://ip.cn" ] | 运行时命令能作为参数传递给ENTRYPOINT |
| ENV | 设置环境变量 | ENV |
|
| ARG | 构建参数 | ARG <参数名>[=<默认值>] | 容器运行时不存在 |
| VOLUME | 定义匿名卷 | VOLUME ["<路径1>", "<路径2>"...],VOLUME <路径> | 将动态文件所保存目录挂载为卷,防止向容器存储层写入大量数据 |
| EXPOSE | 声明端口 | VOLUME <路径> | 仅仅是声明并不会直接映射,运行时随机映射的时候会使用这个端口 |
| WORKDIR | 指定工作目录 | WORKDIR <工作目录路径> | 注意dockerfile中的两行是不同路径,并不能用来切换目录,因此需要WORKDIR |
| USER | 制定当前用户 | USER <用户名>[:<用户组>] | |
| HEALTHCHECK | 健康检查 | HEALTHCHECK [选项] CMD <命令>,HEALTHCHECK NONE | CMD,ENTRYPOINT,HEALTHCHECK只能出现一次,docker inspect进程查看 |
| ONBUILD | 额外构建指令 | ONBUILD <其它指令> |

浙公网安备 33010602011771号