Docker
0x01 概述
- 用于构建、运行、传送应用程序的平台
- 将操作系统、运行时环境、第三方软件库和依赖包、应用程序、环境变量、配置文件、启动命令一起打包
- 特点
- 应用隔离
- 环境配置
- 安装部署
- 持续集成
- 持续发布
- DevOps
0x02 基本原理和概念
- 镜像(images):一个只读模板,可以用来创建容器
- 容器(containers):一个运行实例,提供一个独立的可移植环境,可以在其中运行应用程序
- 仓库(registry):用来存储镜像的地方,最常用的仓库是 DockerHub
- Docker 的体系结构采用 C/S 模式
- 客户端(Client):
docker run
、docker build
、docker pull
- Docker Client 负责向 Docker daemon 发送请求并接收返回的结果
- 服务端(Docker Host):Docker daemon、images、containers
- Docker daemon:服务端的守护进程,负责管理 Docker 的各种资源
- 仓库(Registry):images、Extensions、Plugins
- 客户端(Client):
- Docker Client 和 Docker Daemon 之间采用 Socket 或 RESTful API 进行通信
0x03 安装
Linux 中使用命令
sudo apt install docker.io
方法即可安装
- 在官网下载 Docker
- 启动 Docker 即可使用
0x04 容器化和 Dockerfile
(1)容器化
-
容器化(Containerzation):将应用程序打包成容器,之后在容器中运行应用程序的过程
-
容器化过程
-
创建一个 Dockerfile
告诉 Docker 构建应用程序镜像所需的步骤和配置
-
使用 Dockerfile 构建镜像
-
使用镜像创建和运行容器
-
(2)Dockerfile
-
Dockerfile 是一个文本文件,包含 Docker 如何构建镜像的指令
- 该镜像包含应用程序执行的所有命令,一般包括以下内容
- 精简版的操作系统
- 应用程序运行时的环境
- 应用程序
- 第三方依赖库或包
- 应用程序的配置文件
- 环境变量
- ……
- 该镜像包含应用程序执行的所有命令,一般包括以下内容
-
一般在项目的根目录下创建名为 Dockerfile 的文件,在其中写入构建镜像的指令
-
举例
-
新建目录 HelloDocker,在其中新建 index.j s 文件,并写入以下内容
console.log("output");
-
在终端中进入该目录,使用命令
node index.js
运行 -
创建名为 Dockerfile 的文件
FROM node:18-alpine COPY index.js /index.js CMD [ "node", "/index.js"]
- 首先指定一个基础镜像,用于配置运行环境
- 镜像是按层次结构来构建的,每一层都基于上一层
- 18 表示 Node.js 的版本,alpine 表示构建镜像的操作系统
- 复制应用程序到镜像中
- 命令模板:
COPY source dest
,其中,source 是相对于 Dockerfile 的源路径,dest 是相对于 Dockerfile 的目标路径
- 命令模板:
- 运行应用程序
- 命令模板:
CMD ["executable", "parameter", ...]
,其中,第一个参数 executable 表示可执行程序的名字,第二个参数 parameter 以及之后的参数表示可执行程序接收到的参数
- 命令模板:
- 首先指定一个基础镜像,用于配置运行环境
-
使用命令
docker build -t hello-docker
. 构建镜像- 可以使用命令
docker images
或docker image ls
查看所有镜像
- 可以使用命令
-
使用命令
docker run hello-docker
运行镜像- 在线 Docker 环境:Play with Docker
-
可以使用
docker pull
相关命令下载镜像
-
0x05 Docker Desktop
- Docker Desktop 封装了容器日常使用和管理的各种常用功能
- 逻辑卷(Volumes)可以把容器中的目录或指定路径映射到宿主机的某一个目录或位置上,从而将数据保存到宿主机的磁盘上,实现数据的持久化
0x06 Docker Compose
-
用于定义和运行多容器 Docker 应用程序的工具
-
使用 YAML 文件来配置应用程序的服务
-
docker-compose.yml
redis: image: redis db: image: mysql frontend: image: vue-app ports: - 3000:3000 links: - redis backend: image: springbot-app ......
-
-
使用一条命令即可创建并启动所有服务
docker compose up
-End-