Docker

一、Docker 基本概念

  • 容器(Container):一个轻量、可移植的、隔离的执行环境,通常用来运行应用程序。
  • 镜像(Image):容器的模板,包含了应用程序及其运行环境。
  • Docker 引擎(Docker Engine):运行和管理 Docker 容器的服务。
  • Docker Hub:一个公共的容器镜像仓库,用来分享和下载容器镜像。
  • Dockerfile:一种定义镜像的文本文件,里面包含了从哪个基础镜像开始、如何安装依赖、如何运行应用等指令。

二、安装 Docker

三、Dokcer 基础命令

  • docker --version:查看 Docker 版本。
  • docker pull <image>:从 Docker Hub 下载镜像。
  • docker build -t <image_name> .:构建 Docker 镜像。
  • docker run <image>:运行一个容器。
  • docker ps:查看正在运行的容器。
  • docker stop <container_id>:停止一个容器。
  • docker rm <container_id>:删除一个容器。
  • docker images:查看本地镜像。
  • docker rmi <image_id>:删除一个镜像。

四、创建 Dockerfile 并构建镜像

# FROM 指定基础镜像。这是构建 Docker 镜像的起始点,用于指定基础镜像。
# 基础镜像是整个镜像构建的基石,后续的所有操作都是在这个基础镜像之上进行的。
# 它就像是盖房子的地基,决定了镜像的基本操作系统环境和一些初始配置。
FROM ubuntu:20.04

# 用于为镜像添加元数据(标签)。
# 这些标签可以是关于镜像的各种信息,如作者、版本、项目名称、许可证信息等。
LABEL maintainer="your-email@example.com"

# RUN:在镜像构建过程中执行命令。这些命令可以用于安装软件包、更新系统、配置环境等操作。
# 每一个RUN指令都会在当前镜像层之上创建一个新的层,这使得镜像的构建过程是分层的,便于管理和复用。
RUN apt-get update && apt-get install -y python3 python3-pip

# COPY:用于将本地文件系统(构建上下文)中的文件或目录复制到镜像中的指定位置。
# 这是将应用程序代码、配置文件等内容添加到镜像中的常用方法,确保容器在运行时能够获取到所需的文件。
# COPY . /app,这表示将当前目录(构建上下文)下的所有文件和目录复制到镜像中的/app目录下。
# 例如,如果当前目录包含一个 Python 应用程序的代码文件,那么这些文件就会被复制到镜像的/app目录中,以便在容器中运行该应用程序。
COPY . /app

# ADD和COPY指令类似,也是用于将文件或目录添加到镜像中。
# 不过,ADD指令有一些额外的功能,它可以自动解压一些压缩文件(如.tar、.gz等格式),并且可以从 URL 中获取文件并添加到镜像中。
# 但在大多数情况下,如果只是简单地复制文件,建议使用COPY指令,因为COPY的行为更直观、更容易理解。
#ADD http://example.com/myapp.tar.gz /app 这行指令会从指定的 URL 下载一个压缩文件,并将其添加到镜像中的/app目录下,并且如果是支持的压缩格式,会自动解压。

# 设置工作目录。
# 用于设置工作目录,也就是容器启动后默认的当前工作目录。之后的RUN、COPY、ADD等指令如果使用相对路径,就是相对于这个工作目录而言的。
# 它就像是在容器中设定了一个工作空间,方便后续操作的路径定位。
WORKDIR /app

# 用于指定容器在运行时监听的端口号。这主要是为了让容器外部的用户或其他容器知道该容器内部的服务正在监听哪个端口,方便进行网络通信和服务访问。
# 不过,EXPOSE指令只是一种声明,实际上并没有将端口发布到宿主机上,还需要在运行容器时使用-p或-P等参数来实现端口发布。
EXPOSE 80

# 执行
RUN pip3 install -r requirements.txt

# 用于指定容器启动时要执行的命令。一个 Dockerfile 只能有一个CMD指令,如果有多个,只有最后一个会生效。
它和RUN指令不同,RUN是在构建镜像过程中执行的命令,而CMD是在容器启动时执行的命令,用于启动容器内的主要应用程序或服务。
CMD ["python3", "app.py"]

# ENTRYPOINT指令和CMD指令类似,也是用于指定容器启动时要执行的命令,但ENTRYPOINT的优先级更高,并且具有不可覆盖的特性。
# 它可以用于设置容器启动后的默认行为,并且可以通过在容器启动时传入参数来改变命令的执行方式。ENTRYPOINT ["python"],CMD ["app.py"],这样设置后,容器启动时会执行python app.py。
# 如果在启动容器时传入其他 Python 脚本作为参数,如docker run - -entrypoint python my - docker - image another - app.py,就会执行python another - app.py,而不是python app.py。

五、Docker Compose 管理多个容器

        Docker Compose 是一个用于定义和运行多个 Docker 容器的工具,它使用一个 YAML 文件来定义应用的服务、网络和卷等配置。通过 Docker Compose,你可以一键启动、停止和管理多个容器,简化了多容器应用的部署和管理过程。

1.安装 Docker Compose

        Docker Compose 一般会随 Docker 一起安装。

// 如果没有,可以通过以下命令单独安装 Docker Compose:
// 安装 Docker Compose(Linux)
sudo curl -L "https://github.com/docker/compose/releases/download/$(curl -s https://api.github.com/repos/docker/compose/releases/latest | jq -r .tag_name)/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

        安装完成后,可以通过 docker-compose --version 来验证是否安装成功。 

2. Docker Compose 文件(docker-compose.yml)

        docker-compose.yml 文件用于定义和配置多容器应用。在这个文件中,你可以定义不同的服务,每个服务对应一个容器。

// 如果你的应用程序包含多个服务,你可以使用 Docker Compose 来方便地管理多个容器。
// 比如一个数据库和一个 Web 服务,创建一个 docker-compose.yml 文件来定义服务:
// version: '3'这一行指定了 docker-compose 文件所使用的配置版本格式。
// 版本 3 是一种常用的格式,它具有一系列特定的语法规则和特性,用于定义多容器应用程序的配置,不同版本在功能支持和语法要求等方面会有差异。
version: '3'

// services 这是一个顶级的关键字,用于开始定义一组服务(容器)。
// 在 docker-compose 中,可以在这里配置多个相互关联或者独立的容器服务,后续缩进的内容都是用来具体描述各个服务的相关配置信息。
services:

// 这是定义的第一个服务的名称(自定义的,可以根据实际情况取名),在这里取名为 web,它代表了基于后续配置将要创建的一个容器服务实例,通常会对应某种特定功能的应用。
  web:

// 基于这个镜像来创建
    image: my_web_app
    ports:
      - "5000:5000"
  db:
    image: postgres

// 这是一个配置项关键字,用于设置容器内的环境变量。
// 通过在这里配置环境变量,可以为容器内运行的应用(比如这里的 MySQL 数据库)传递一些必要的配置参数、密码等信息,使其能够按照预期的要求启动和运行。
    environment:
      POSTGRES_PASSWORD: example
// 

六、Docker 的高级特性

  • 网络:Docker 提供了多种网络模式,帮助容器之间的通信。
  • (Volume):用于持久化容器的数据。
  • 日志管理:如何查看和管理容器的日志。
  • 安全:如何管理 Docker 容器的权限和安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我的三只猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值