Docker
2021-04-07 23:24:49 70 举报
AI智能生成
Docker思维导图
作者其他创作
大纲/内容
简介
概念
使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 OverlayFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于 LXC,从 0.7 版本以后开始去除 LXC,转而使用自行开发的 libcontainer,从 1.11 版本开始,则进一步演进为使用 runC 和 containerd。
docker架构
优点
更高效的利用系统资源
更快速的启动时间
一致的运行环境
持续交付和部署
更轻松的迁移
更轻松的维护和扩展
基础概念
镜像
Docker 镜像 是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像 不包含 任何动态数据,其内容在构建之后也不会被改变。
容器
容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等
仓库
一个 Docker Registry 中可以包含多个 仓库(Repository);每个仓库可以包含多个 标签(Tag);每个标签对应一个镜像
安装
windows Pro
Docker Desktop for Windows
CentOS
添加 Docker 安装源
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
直接安装最新版本的 Docker
sudo yum install docker-ce docker-ce-cli containerd.io
启动 Docker
sudo systemctl start docker
使用镜像
获取镜像
获取
$ docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
运行
docker run
列出镜像
列出镜像
docker image ls
镜像体积
docker system df
虚悬镜像(dangling image)
docker image ls -f dangling=true
docker image prune
过滤
docker image ls -f since=mongo:3.2
docker image ls -f label=com.example.version=0.1
以特定格式显示
docker image ls -q
docker image ls --format "{{.ID}}: {{.Repository}}"
删除本地镜像
docker image rm [选项] <镜像1> [<镜像2> ...]
可以用镜像的完整 ID,也称为 长 ID,来删除镜像,也可以用短ID
利用 commit 理解镜像构成
使用 Dockerfile 定制镜像
FROM 指定基础镜像
空白的镜像FROM scratch
RUN 执行命令
镜像构建上下文
直接用 Git repo 进行构建
docker build -t hello-world https://github.com/docker-library/hello-world.git#master:amd64/hello-world
用给定的 tar 压缩包构建
docker build http://server/context.tar.gz
从标准输入中读取 Dockerfile 进行构建
docker build - < Dockerfile
cat Dockerfile | docker build -
从标准输入中读取上下文压缩包进行构建
docker build - < context.tar.gz
Dockerfile 指令详解
COPY 复制文件
COPY [--chown=<user>:<group>] <源路径>... <目标路径>
COPY [--chown=<user>:<group>] ["<源路径1>",... "<目标路径>"]
ADD 更高级的复制文件
Docker 引擎会试图去下载这个链接的文件放到 <目标路径> 去。下载后的文件权限自动设置为 600
CMD 容器启动命令
CMD ["nginx", "-g", "daemon off;"]
CMD [ "sh", "-c", "echo $HOME" ]
ENTRYPOINT 入口点
<ENTRYPOINT> "<CMD>"
场景一:让镜像变成像命令一样使用
场景二:应用运行前的准备工作
ENV 设置环境变量
ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>...
ARG 构建参数
ARG <参数名>[=<默认值>]
VOLUME 定义匿名卷
EXPOSE 暴露端口
WORKDIR 指定工作目录
WORKDIR <工作目录路径>
USER 指定当前用户
USER <用户名>[:<用户组>]
HEALTHCHECK 健康检查
HEALTHCHECK [选项] CMD <命令>
HEALTHCHECK NONE
ONBUILD 为他人作嫁衣裳
ONBUILD <其它指令>
在当前镜像构建时并不会被执行。只有当以当前镜像为基础镜像,去构建下一级镜像的时候才会被执行
LABEL 为镜像添加元数据
LABEL <key>=<value> <key>=<value> <key>=<value> ...
SHELL 指令
SHELL ["executable", "parameters"]
参考文档
https://docs.docker.com/develop/develop-images/dockerfile_best-practices/
https://docs.docker.com/engine/reference/builder/
https://github.com/docker-library/docs
Dockerfile 多阶段构建
构建多种系统架构支持的 Docker 镜像
操作容器
启动
新建并启动
docker run ubuntu:18.04 /bin/echo 'Hello world'
启动已终止容器
docker container start 命令
守护态运行
Docker 在后台运行而不是直接把执行命令的结果输出在当前宿主机下。此时,可以通过添加 -d 参数来实现
终止
docker container stop
Docker 容器中指定的应用终结时,容器也自动终止
进入容器
attach 命令
docker attach
exec 命令
当 -i -t 参数一起使用时,则可以看到我们熟悉的 Linux 命令提示符。
导出和导入
docker export导出本地某个容器
docker import 从容器快照文件中再导入为镜像
删除
删除容器
docker container rm
清理所有处于终止状态的容器
docker container prune
访问仓库
数据管理
数据卷
创建一个数据卷
docker volume create my-vol
启动一个挂载数据卷的容器
查看数据卷的具体信息
删除数据卷
挂载主机目录
Kubernetes
Kubernetes
自由主题
0 条评论
下一页