目录
1、什么是Docker
Docker 是一个开源的应用容器引擎,它允许开发者打包他们的应用以及应用的运行环境到一个可移植的容器中,然后可以在任何支持Docker的机器上运行这个容器。Docker 使用 Linux 容器(LXC)技术,但是它提供了比传统容器更加易用的工作流和用户界面。
2、Docker的特点
- 容器化:Docker 可以将应用及其依赖环境封装在一个轻量级、可移植的容器中,与宿主机系统隔离。
- 可移植性:容器可以在任何安装了Docker的机器上运行,无论是开发、测试还是生产环境。
- 自动化部署:Docker 可以自动化部署应用,简化配置和管理过程。
- 版本控制和组件重用:Docker 支持使用Dockerfile来定义容器内容,可以进行版本控制,并且可以重用已有的容器镜像。
- 微服务架构:Docker 适合构建微服务架构,每个服务可以独立部署和扩展
3、Docker基础命令
docker pull | 拉取镜像 |
docker push | 推送镜像到DockerRegistry |
docker images | 查看本地镜像 |
docker rmi | 删除本地镜像 |
docker run | 创建并运行容器(不能重复创建) |
docker stop | 停止指定容器 |
docker start | 启动指定容器 |
docker restart | 重新启动容器 |
docker rm | 删除指定容器 |
docker ps | 查看容器 |
docker logs | 查看容器运行日志 |
docker exec | 进入容器 |
docker save | 保存镜像到本地压缩文件 |
docker load | 加载本地压缩文件到镜像 |
docker inspect | 查看容器详细信息 |
4、Docker组件
4.1、Docker组件------------镜像
镜像(Image):镜像是只读模板,定义了容器的运行环境和应用。镜像可以包含操作系统、应用代码、库、环境变量等。镜像可以被复制和分发到任何支持 Docker 的系统上。
拉取镜像
docker pull 镜像名 例如mysql的镜像 docker pull mysql
4.2、Docker组件---------容器
容器(Container):容器是 Docker 的基本运行单元,它们是轻量级的、可移植的、自给自足的软件运行环境。每个容器都包含应用及其所有依赖项,确保应用在不同环境中的一致性。
创建docker容器
示例:mysql 容器
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
mysql
docker run:创建docker容器
-d:后台运行
--name:给容器起名字
-e TZ:设置容器的参数,时区
-e mysql 设置密码
最下面一行是镜像名称 ,不指认版本,默认是最新版本
4.3、Docker容器-----------数据卷
4.3.1、什么是数据卷
数据卷(Volumes)是 Docker 的一个重要组件,用于管理容器数据的持久化和共享。数据卷提供了一种机制,允许你将数据独立于容器的生命周期进行存储和管理,这样即使容器被删除,数据也不会丢失。数据卷(volume)是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁。
4.3.2、数据卷相关命令
docker volume create | 创建数据卷 |
docker volume ls | 查看所有数据卷 |
docker volume rm | 删除指定数据卷 |
docker volume inspect | 查看某个数据卷的详情 |
docker volume prune | 清除数据卷 |
4.3.3、数据卷的作用
- 数据持久化:确保容器中的数据在容器生命周期结束后仍然可以保留,避免数据丢失。
- 数据共享:允许多个容器访问和操作相同的数据,这对于需要多个服务访问同一数据集的应用至关重要。
- 性能优化:数据卷可以提供比容器内文件系统更好的性能,因为它们通常直接存储在宿主机的文件系统中。
- 数据隔离:数据卷提供了一种机制,使得容器内的数据可以与容器的生命周期分离,有助于实现数据的隔离和安全性。
- 生命周期管理:数据卷的生命周期独立于容器,可以独立于容器进行创建、删除和维护。
4.3.4 、挂载本地目录或文件
数据卷的目录结构较深,如果我们去操作数据卷目录会不太方便。在很多情况下,我们会直接将容器目录与宿主机指定目录挂载。挂载语法与数据卷类似:
# 挂载本地目录 -v 本地目录:容器内目录 # 挂载本地文件 -v 本地文件:容器内文件
注意:本地目录或文件必须以 /
或 ./
开头,如果直接以名字开头,会被识别为数据卷名而非本地目录名。
MySQL容器目录挂载演示
创建并运行新mysql容器,挂载本地目录
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
-v ./mysql/data:/var/lib/mysql \
-v ./mysql/conf:/etc/mysql/conf.d \
-v ./mysql/init:/docker-entrypoint-initdb.d \
mysql
总结:数据卷是容器目录和本地目录的一个映射,在本地更改会影响到容器里的相对应的目录内容
避免了在容器内部的隔离环境对文件的修改
注意:每一个不同的镜像,将来创建容器后内部有哪些目录可以挂载,可以参考DockerHub对应的页面
4.4、Docker组件-----Network网络
4.4.1、什么是Docker网络
Docker 网络是 Docker 容器平台中用于管理容器之间以及容器与外部世界通信的网络基础设施。Docker 提供了多种网络类型,每种类型都有其特定的用途和配置方式,以满足不同的网络需求
4.4.2、Network相关命令
docker network create | 创建一个网络 |
docker network ls | 查看所有网络 |
docker network rm | 删除指定网络 |
docker network prune | 清除未使用的网络 |
docker network connect | 使指定容器连接加入某网络 |
docker network disconnect | 使指定容器连接离开某网络 |
docker network inspect | 查看网络详细信息 |
4.4.3、Network的作用
容器间通信:允许同一网络中的容器互相发现和通信,实现服务之间的协同工作。
网络隔离:通过不同的网络模式,如桥接网络、自定义网络等,实现容器间或容器与外部网络的隔离,增强安全性。
端口映射:允许将容器内部端口映射到宿主机端口,使得外部可以访问容器中运行的服务。
跨主机通信:在 Docker Swarm 模式下,支持容器跨多个主机的网络通信,实现集群化部署。
网络安全:提供网络安全特性,如防火墙规则和访问控制,以保护容器之间的通信。