Docker 是轻量化的虚拟机程序,云计算的基础就是 Docker 容器。
0 配置安装
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
容器访问宿主机 | 使用 host.docker.internal 替换 localhost 即可 |
---|---|
容器之间访问 | 通过IP、组网来实现 |
创建网络 | 创建一个网络用于容器之间连接 |
docker 不是通过替换源代码来实现容器名-IP访问 | docker 通过类似NAT路由器转发一样的操作来实现 |
Multi-Container Apps
Docker compose
docker compose 适合管理在一个主机上的多个容器。
三容器应用通过docker compose管理 | |
---|---|
启动 docker-compose | 启动容器编排的一些选项 |
关闭 docker-compose | 停止运行并自动删除,保留volume |
compose.yaml 配置容器 | 配置构建路径,Volumes,环境变量等 |
Utility Containers | 在宿主机不装 node 的情况下使用 npm |
LaravelPHP+Nginx+MySQL部署实例 |