Docker学习笔记

docker是什么

  • Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

docker的安装和卸载

  1. 配置源
  1. 查看docker-ce可用版本
  • yum list docker-ce
  1. 安装指定版本
  • yum -y install docker-ce-18.06.0.ce-3.el7
  1. 启用docker服务
  • systemctl status docker
  • systemctl start docker
  • docker version
  1. 设置开机启动docker
  • systemctl enable docker
  1. 卸载docker
  • yum remove docker-ce
  1. 删除镜像、容器、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套接字或者网络接口。

  1. dokcer deamon(dockerd)
    监听Docker API请求并管理Docekr对象,如镜像、容器、网络和volume。
  2. docker client(docker)
    用户与docker交互的主要方式,与dockerd通信。
  3. docker registry
    存储Docker镜像。Docker Hub是一个公共注册中心,也可以建立自己的私人registry。

docker核心技术

  • Docker使用Go语言编写,它利用了Linux内核的一系列特性来实现其功能。
  1. Namespaces

Docker使用namespaces技术实现隔离的工作空间,称之为容器。每运行一个容器,Docker都为其创建了一组的命名空间。
| 名称 | 内容 | 作用 |
| - | :-: | :- |
| pid namespace | 进程id | 进程隔离 |
| net namespace | 网络 | 管理网络接口 |
| ipc namespace | 进程间通信 | 管理访问IPC资源 |
| mnt namespace | mount挂载 | 管理文件系统挂载点 |
| uts namespace | unix分时系统 | 隔离内核和版本标识符 |

  1. Control groups

cgroup给应用限制一组指定的资源集。cgroups允许Docker Engine共享可用硬件资源给容器。

  1. 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=:] <源路径>... <目标路径>,COPY [--chown=:] ["<源路径1>",... "<目标路径>"] 会保留文件元数据
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 ,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 <其它指令>

docker使用的常见误区

十大误区

posted @ 2019-03-06 10:58  wongds  阅读(106)  评论(0)    收藏  举报