当前位置: 首页 > article >正文

Docker基本概念汇总(更全面了解Docker)

Docker是一种开源的平台,用于开发、部署和运行应用程序。它通过“容器”技术实现了轻量级虚拟化,使应用程序和其依赖项能够一起打包、部署并运行。以下是Docker基本概念的详细解释。

图片

图片来源网络

1. Docker 容器(Container)

容器是Docker的核心概念之一。容器是镜像的运行实例容器包含应用程序及其运行所需的所有依赖(例如代码库、配置文件、系统库等),容器可以启动、开始、停止、移动和删除,并且每个容器都是相互隔离的。

容器特点:

  • 轻量级:与传统的虚拟机相比,Docker容器不需要完整的操作系统来运行,依赖于宿主机的内核,因此启动和运行非常迅速。

  • 隔离性:容器之间是相互独立的,每个容器都有独立的文件系统、网络栈和进程。 

常用命令:

# 列出所有运行中的容器
docker ps

# 列出所有容器(包括已停止的)
docker ps -a

# 启动一个新的容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

# 停止容器
docker stop [CONTAINER_ID]

2. Docker 镜像(Image)

镜像是一个只读模板,其中包含了容器运行所需的文件系统和依赖环境。镜像可以看作是容器的蓝图或快照,是Docker创建容器的基础。

镜像特点:

  • 分层结构:Docker镜像采用分层结构,通过Union File System将不同的层叠加在一起,节省了磁盘空间并提高了构建速度。

  • 可重用性:同一个镜像可以被多个容器使用,Docker镜像可以通过Docker Hub等平台共享。

常用命令:

# 从Docker Hub上拉取镜像
docker pull [IMAGE_NAME]

# 列出本地所有镜像
docker images

# 删除本地镜像
docker rmi [IMAGE_ID]

# 构建镜像
docker build -t [IMAGE_NAME] .

3. Dockerfile

Dockerfile是一个包含了一系列命令的文本文件,这些命令可以用于自动化地创建一个Docker镜像。通过编写Dockerfile,可以将环境配置、应用程序代码、依赖关系等打包成一个镜像,便于快速创建容器。

指令:常用的Dockerfile指令包括FROM(指定基础镜像)、RUN(执行命令)、COPY(复制文件)、CMD(指定容器启动命令)等。

自动化:使用Dockerfile,能够实现自动化的环境搭建和应用部署。

编写一个基础的Dockerfile文件

# 使用官方的Ubuntu镜像作为基础镜像
FROM ubuntu:latest

# 更新包管理工具并安装Python
RUN apt-get update && apt-get install -y python3

# 复制当前目录下的文件到容器内的 /app 目录
COPY . /app

# 设置工作目录
WORKDIR /app

# 运行Python程序
CMD ["python3", "app.py"]
构建镜像:

构建镜像

docker build -t my-python-app .

这里先了解一个基础的,后续文章会详细介绍Dockerfile的相关指令和操作

4. Docker 仓库(Registry)

仓库(Registry)是Docker镜像的存储和分发平台。Docker的官方仓库是Docker Hub,用户可以上传和下载镜像。

公开和私有:Docker Hub是公开仓库,可以免费使用。用户也可以创建自己的私有仓库,比如Harbor,用于内部镜像的存储。

镜像管理:可以通过仓库管理不同版本的镜像,便于部署和更新。

常用命令:

# 登录Docker仓库
docker login

# 推送本地镜像到Docker Hub
docker push [USERNAME/IMAGE_NAME]

# 从Docker Hub上拉取镜像
docker pull [IMAGE_NAME]

5. Docker 网络(Networking)

Docker提供了多种网络模式来管理容器之间的通信:

Bridge网络:默认网络模式,适用于独立运行的容器,通过创建的虚拟网桥进行通信。 

Host网络:容器直接使用宿主机的网络栈。适合网络性能要求高的应用。

Overlay网络:用于跨主机的容器通信,适合于Swarm或Kubernetes等集群环境。

自定义网络:可以通过docker network命令创建自定义网络,使得容器在同一个网络中能通过容器名称直接通信。 

常用命令:

# 列出所有网络
docker network ls

# 创建自定义网络
docker network create [NETWORK_NAME]

# 将容器连接到指定网络
docker network connect [NETWORK_NAME] [CONTAINER_ID]
 

6. Docker 存储(Volumes)

Volumes是Docker推荐的持久化数据存储方式,用于将数据保存到宿主机中,而不会随容器删除而丢失数据。

独立于容器:即使删除了容器,数据卷仍然存在,可以用于其他容器。

高性能:数据卷的访问速度更快,是Docker持久化数据的主要方式。

常用命令:

# 列出所有卷
docker volume ls

# 创建一个新卷
docker volume create [VOLUME_NAME]

# 以数据卷的方式挂载卷
docker run -v [VOLUME_NAME]:/app/data [IMAGE_NAME]

7. Docker Compose

Docker Compose 是一个用于定义和运行多容器应用的工具。可以通过一个docker-compose.yml文件定义一组关联的容器,然后用一个命令启动所有容器。适合开发和测试多容器应用程序,如微服务架构。

Docker Compose特点:

  • 编排:Docker Compose可以编排多个容器的启动顺序、依赖关系和网络连接。

  • 简化操作:将复杂的多容器启动流程简化为一条命令,方便本地开发和调试。

示例docker-compose.yml:

version: '3'
services:
  web:
    image: nginx
    ports:
      - "80:80"
  db:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: example

启动服务:

docker-compose up

8. Docker Swarm

Docker Swarm是Docker提供的容器集群管理工具,使得多个Docker主机能够作为一个集群来管理和调度容器。Swarm支持多节点集群、服务自动扩展和负载均衡等功能。

集群管理:能够将多台主机加入到一个Swarm集群中进行管理。服务编排:Swarm会自动处理容器的负载均衡,并在节点故障时自动调度新容器。 

常用命令:

# 初始化Swarm
docker swarm init

# 加入Swarm
docker swarm join --token [TOKEN] [MANAGER_IP:PORT]

# 部署服务
docker service create --name web --replicas 3 -p 80:80 nginx

Docker Swarm在实际生产环境很少使用,目前基本都是Kubernetes来进行编排容器。

总结

Docker的基本概念包括容器、镜像、Dockerfile、仓库、网络、存储、Docker Compose、Docker Swarm等。这些概念相互协作,使Docker成为应用部署的高效工具。理解这些基础概念并掌握常用命令,可以帮助我们高效地管理应用,并显著简化开发和运维的工作流程。


http://www.kler.cn/a/379245.html

相关文章:

  • 嵌入式开发之文件I/O
  • Fooocus图像生成软件本地部署教程:在Windows上快速上手AI创作
  • 再探“构造函数”(2)友元and内部类
  • Qt6 CMake 中引入 Qt Linguist 翻译功能
  • MFC工控项目实例二十八模拟量信号每秒采集100次
  • 通过history查看每个用户操作日志
  • 15. 文件操作
  • Netty 常见组件介绍
  • 鸿蒙生态认识
  • Marvelous Designer导出纹理没有合并
  • leetcode-有效的字母异位词
  • PHP如何规避从URL的语义进行攻击
  • CSP 2024 入门级第二轮 CSP-J 2024 复赛 第二题 地图探险
  • 李彦宏《应用来了》主题演讲海报官宣,百度世界或带来多个新发布
  • 网络编程及回显服务器
  • flutter 专题四 Flutter渲染流程
  • [云] 大数据分析栈(Big Data Analytics Stack)+ Apache Hadoop分布式文件系统(HDFS)+Apache Spark
  • CSS综合练习(学校官网静态网页)
  • java HashMap
  • Go-单元测试
  • 前端Election
  • 如何用Python同时抓取多个网页:深入ThreadPoolExecutor
  • Django ORM详解:外键使用(外键逻辑关联)与查询优化
  • excel指定单元格输入相同的值,比如给D1~D10000输入现在的值
  • 硅谷甄选(七)属性管理模块
  • Oracle视频基础1.4.3练习