Docker 是轻量化的虚拟机程序,云计算的基础就是 Docker 容器。

0 配置安装

配置镜像解决 Docker Pull 国内无法正常使用的问题,或者直接配置本地代理

1 Foundenmental

Images & Contains

Container 概念容器是最终要运行的东西,包含运行所需的环境、代码等。镜像是容器的模板或者蓝图,包含代码以及必要的运行时工具。
Image 概念镜像是容器的蓝图,由代码和环境组成
交互式运行容器如 node.js 这种有交互的容器可以增加 -it 参数来当前终端进行交互
创建node.js简单服务器镜像样例通过基于现有 Image 来创建新的镜像,进而自定义一些自己的东西
layer build cache对于一个镜像的构建会存储一个cache以加速下次构建
创建python控制台交互镜像样例封装一个控制台程序为docker镜像,虽然没啥用
打包镜像发给别人不需要走服务器

Image CLI

查看所有镜像docker images 列出镜像列表
查看镜像内容docker image insepct 查看镜像内容
删除镜像docker rmi 删除不需要的镜像
命名镜像docker image tag 命名名称和版本号
创建镜像docker build

Container ClI

查看运行中的容器docker ps 会列出容器列表
重新运行某个容器docker start 会启动停止运行的容器
查看容器输出相比于 attach,退出也不会影响容器运行
删除已停止的容器清理你的 docker ps 列表
新建某个容器并在停止时自动删除适合像服务器程序一样,只会运行一次,哪怕要修改也会创个新的
复制文件到容器也可以复制文件出来,适合临时交换一些日志,或者服务器配置

Data & Volumes

Volume 可以实现本机目录与docker容器内的目录双向绑定,当本机修改时会实时推送到容器内,容器内更改时也会修改本机的内容。

列出 Volumes列出本地现有的 volumes
添加匿名 Volumes在运行容器时添加一个匿名容器
添加命名 Volumes在运行容器时添加一个有名容器
设置 bind mounts在运行容器时绑定本机目录与容器目录实时同步
用匿名Volume保存依赖避免在 bindmounts 后丢失原本构建的依赖文件
产生临时数据和存储永久数据的js服务器样例
为什么不能用bindmount代替COPY

ENV & ARG

ENVironment 环境变量设置容器内的 ENV,用于提供灵活的启动配置而不用重建镜像
ARGument 构建时变量设置在 build 镜像时的灵活配置项,便于

Containers & Networking

Networking

样例:nodejs抓取api内容并存储数据库

容器访问宿主机使用 host.docker.internal 替换 localhost 即可
容器之间访问通过IP、组网来实现
创建网络创建一个网络用于容器之间连接
docker 不是通过替换源代码来实现容器名-IP访问docker 通过类似NAT路由器转发一样的操作来实现

Multi-Container Apps

样例:前后端分离带数据库的三容器应用

Docker compose

docker compose 适合管理在一个主机上的多个容器。

Compose file reference

三容器应用通过docker compose管理
启动 docker-compose启动容器编排的一些选项
关闭 docker-compose停止运行并自动删除,保留volume
compose.yaml 配置容器配置构建路径,Volumes,环境变量等
Utility Containers在宿主机不装 node 的情况下使用 npm
LaravelPHP+Nginx+MySQL部署实例

2 远程 Deploy

3 Kubernetes

应用样例

Mysql安装并配置 mysql
Redis安装并配置 Redis