beizhu
type
Post
status
Published
date
Dec 1, 2022
slug
summary
docker 使应用部署更加轻量,可移植,可扩展,更好的环境隔离也更大程度地避免了生产环境与测试环境不一致的巨大尴尬。
tags
Docker
category
部署
icon
password
docker 指南
docker 使应用部署更加轻量,可移植,可扩展,更好的环境隔离也更大程度地避免了生产环境与测试环境不一致的巨大尴尬。由于
docker 轻便可移植的特点也极大促进了 CI/CD 的发展。
docker client: 命令行工具
Docker host: 宿主机, Docker Daemon的运行环境服务器
docker dameon: docker 的守护进程,docker client通过命令行与docker daemon交互
image: 镜像,可以理解为一个容器的模板,通过一个镜像可以创建多个容器
container: 最小型的一个操作系统环境,可以对各种服务以及应用容器化,是镜像的运行实例
registry: 镜像仓库,存储大量镜像,可以从镜像仓库拉取和推送镜像


底层原理
docker 底层使用了一些 linux 内核的特性,大概有 namespace,cgroups 和 ufs。Namespace
docker 使用 linux namespace 构建隔离的环境,它由一下的
namespace组成- pid : 隔离进程
- net : 隔离网络
- Ipc :隔离ipc
- mnt :隔离文件系统挂载
- uts :隔离hostname
- user:隔离uid/gid
Control groups
也叫
cgroups,限制资源配额,比如某个容器只能使用 100M 内存Union file systems
UnionFS 是一种分层、轻量级并且高性能的文件系统,支持对文件系统的修改作为一次提交来一层层的叠加。docker 的镜像与容器就是分层存储,可用的存储引擎有 aufs,overlay 等。镜像
镜像是一份用来创造容器的配置文件,而容器可以视作最小型的一个操作系统。
docker 的镜像和容器都使用了 unionFS 做分层存储,镜像作为只读层是共享的,而容器在镜像之上附加了一层可写层,最大程度地减少了空间的浪费镜像仓库与拉取
大部分时候,我们不需要自己构建镜像,我们可以在官方镜像仓库 Docker Hub (opens new window)拉取镜像。
可以简单使用命令
docker pull 拉取镜像。拉取镜像后可以使用
docker inspect 查看镜像信息,如配置及环境变量等。构建镜像与发布
但并不是所有的镜像都可以在镜像仓库中找到,另外我们也需要为我们自己的业务应用去构建镜像。
使用
docker build 构建镜像,docker build 会使用当前目录的 Dockerfile 构建镜像。当构建镜像成功后可以使用
docker push 推送到镜像仓库。Dockerfile命令简述
FROM
基于一个旧有的基础镜像,格式如下。
而以上所述的 node 与 nginx 基础镜像可在Docker Hub (opens new window)中找到。
需要了解常用的
alpine、node、nginx 基础镜像。ADD
把宿主机的文件或目录加入到镜像的文件系统中。
RUN
在镜像中执行命令,由于
ufs 的文件系统,它会在当前镜像的顶层新增一层。CMD
指定容器如何启动。
一个
Dockerfile 中只允许有一个 CMD容器
镜像与容器的关系,类似于代码与进程的关系。
docker run创建容器
docker stop停止容器
docker rm删除容器
创建容器
基于
nginx 镜像创建一个最简单的容器:启动一个最简单的 http 服务使用
docker run 来启动容器,docker ps 查看容器启动状态-rm:当停止容器时自动清楚容器
it:可交互式、赋予 tty 的方式
-name:为容器指定名称
p host-port:container-port:宿主机与容器端口映射,方便容器对外提供服务
nginx:alpine:基于该基础镜像创建容器
容器管理
docker ps 列出所有容器docker port 查看容器端口映射docker stats 查看容器资源占用