Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上。Docker容器完全使用沙箱机制,相互之间不会有任何接口。
Docker的优势:
Docker生态系统包含几个相互关联的核心概念,它们共同构成了Docker的完整工作流程:
容器是Docker的核心概念,它是一个标准化的软件单元,包含了应用程序及其所有依赖项,确保应用程序在任何环境中都能以相同的方式运行。
特点:
Docker镜像是一个只读模板,用于创建Docker容器。镜像包含了运行应用程序所需的所有内容——代码、运行时、库、环境变量和配置文件。
特点:
Docker镜像由多个只读层组成,每层代表Dockerfile中的一条指令:
Dockerfile是一个文本文件,包含了构建Docker镜像所需的所有命令。Docker可以通过读取Dockerfile中的指令自动构建镜像。
常用指令:
FROM
: 指定基础镜像RUN
: 执行命令COPY
/ADD
: 复制文件ENV
: 设置环境变量EXPOSE
: 声明容器监听的端口VOLUME
: 创建挂载点WORKDIR
: 设置工作目录USER
: 指定运行容器时的用户CMD
/ENTRYPOINT
: 指定容器启动时运行的命令Docker仓库用于存储和分发Docker镜像。Docker Hub是最流行的公共仓库,企业通常也会建立私有仓库。
类型:
数据卷是Docker提供的一种持久化和共享数据的机制,用于解决容器中数据持久化的问题。
为什么需要数据卷?
Docker容器本身遵循"无状态"的设计理念,当容器被删除时,其中的所有数据也会丢失。这带来两个核心问题:
数据卷的核心特性:
数据卷与绑定挂载的区别:
特性 | 数据卷 | 绑定挂载 |
---|---|---|
存储位置 | 由Docker管理(/var/lib/docker/volumes/) | 由用户指定主机上的任意路径 |
迁移性 | 更好,不依赖主机目录结构 | 依赖主机特定路径 |
内容初始化 | 新卷会复制容器指定路径中的内容 | 覆盖容器中的目录,不复制内容 |
权限管理 | 可由容器内进程修改 | 依赖主机文件系统权限 |
适用场景 | 存储Docker应用数据 | 与主机系统共享配置文件或源代码 |
数据卷的使用场景:
数据卷的基本操作:
# 创建数据卷
docker volume create my_volume
# 查看所有数据卷
docker volume ls
# 查看数据卷详情
docker volume inspect my_volume
# 删除数据卷
docker volume rm my_volume
# 删除所有未使用的数据卷
docker volume prune
# 启动容器并挂载数据卷
docker run -v my_volume:/data nginx
# 使用只读模式挂载
docker run -v my_volume:/data:ro nginx
数据卷使用实例:
PostgreSQL数据库使用数据卷:
# 创建数据卷
docker volume create pgdata
# 运行PostgreSQL容器并挂载数据卷
docker run -d \
--name postgres \
-e POSTGRES_PASSWORD=mysecretpassword \
-v pgdata:/var/lib/postgresql/data \
postgres:13
当容器删除后,您的数据仍然保存在pgdata
数据卷中,可以被新容器挂载使用。
Docker网络允许容器相互通信:
Docker使用客户端-服务器(C/S)架构模式,Docker客户端与Docker守护进程通信,后者负责构建、运行和分发Docker容器。
组件:
# 更新apt包索引
sudo apt-get update
# 安装必要的包
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common lrzsz -y
# 指定使用阿里云镜像
sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# 设置稳定版仓库
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# 更新apt包索引
sudo apt-get update
# 安装最新版本的Docker CE
sudo apt-get install docker-ce -y
在国内使用 Docker 时,由于网络原因,从官方镜像源下载镜像的速度可能较慢。为了提高镜像下载速度,可以配置镜像加速器。这里以阿里云镜像加速器为例,其他常见的镜像加速器还有网易云镜像加速器、腾讯云镜像加速器等,配置方法类似。
创建或编辑 Docker 配置文件:在终端执行以下命令:
sudo mkdir -p /etc/docker
sudo vim /etc/docker/daemon.json
mkdir -p /etc/docker 命令用于创建 /etc/docker 目录,如果该目录已经存在则不会报错。vim /etc/docker/daemon.json 命令使用 vim 文本编辑器打开或创建 /etc/docker/daemon.json 文件,这个文件用于存储 Docker 守护进程的配置信息。
添加镜像加速器地址:在打开的 daemon.json 文件中添加或修改如下内容:
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://docker.imgdb.de",
"https://docker-0.unsee.tech",
"https://docker.hlmirror.com",
"https://docker.1ms.run",
"https://func.ink",
"https://lispy.org",
"https://docker.xiaogenban1993.com"
]
}
重启docker 生效
sudo systemctl daemon-reload
sudo systemctl enable docker
sudo systemctl restart docker
# 列出本地镜像
docker images
# 拉取镜像
docker pull [镜像名]:[标签]
# 构建镜像
docker build -t [镜像名]:[标签] [Dockerfile路径]
# 删除镜像
docker rmi [镜像ID]
# 创建并启动容器
docker run [选项] [镜像名] [命令]
# 列出运行中的容器
docker ps
# 列出所有容器
docker ps -a
# 启动/停止/重启容器
docker start/stop/restart [容器ID]
# 进入容器
docker exec -it [容器ID] bash
# 删除容器
docker rm [容器ID]
# 创建数据卷
docker volume create [数据卷名]
# 挂载数据卷
docker run -v [数据卷名]:[容器内路径] [镜像名]
# 挂载主机目录
docker run -v [主机路径]:[容器内路径] [镜像名]
# 创建网络
docker network create [网络名]
# 将容器连接到网络
docker network connect [网络名] [容器ID]
# 查看网络
docker network ls
用于定义和运行多容器Docker应用程序的工具。使用YAML文件配置应用程序的服务,然后使用单个命令创建和启动所有服务。
Docker的原生集群管理工具,将多个Docker主机转变为单个虚拟Docker主机。
开源容器编排平台,提供容器部署、扩展和管理的自动化。
latest
默认情况下,容器停止后数据仍然存在,但容器被删除后数据会丢失。要持久化数据,应使用Docker卷或绑定挂载。
可以在Dockerfile中使用ENV指令,或在运行容器时使用-e
或--env
标志。