Docker入门指南:快速学习Docker的基本操作

为什么需要Docker

有时我们在本地开发好程序并成功运行之后,却在服务器上运行不起来,通过观察日志通常会发现,哦原来是这个库没安装,于是我们就需要先安装需要用到的库,然后再启动服务你可能还会发现用到的数据库信息或者 API 密钥缺失,于是你需要添加配置文件,最后启动服务又发现安装的库版本不行,于是你又开始升本或者降本.....诸如此类的繁琐的操作可能还会因为服务器的OS不同而差生其他错误。想想就头疼🤕。于是便产生了诸如Docker这样的技术。

什么是Docker

Docker 是一个开源的平台,用于开发、部署和运行应用程序。它通过使用容器技术来实现应用程序的隔离和打包,使得应用程序可以在任何环境中一致地运行。Docker 容器包含了应用程序及其所有依赖项(如库、配置文件等),从而确保应用程序在不同环境中的行为一致。

Docker的基本操作

如果你还没有安装 Docker,请参照官方文档进行安装: docs.docker.com/desk...

你可以在命令行中运行 docker info 或者 docker version 来验证自己是否安装成功。

在正式开始之前,我们先来了解一下 Docker的相关概念:

  • Docker 镜像(Image)是一个只读的模板,用于创建 Docker 容器。它包含了应用程序及其运行所需的所有依赖项(如代码、库、环境变量、配置文件等)。镜像是不可变的,这意味着一旦创建,就不能被修改。
  • Docker 容器(Container)是从 Docker 镜像(Image)创建的一个运行实例。容器是一个轻量级、独立的可执行软件包,它包含了应用程序及其所有依赖项(如库、配置文件等),从而确保应用程序在任何环境中都能一致地运行。
  • Dockerfile:Dockerfile 是一个文本文件,里面记录着创建 Image 的详细步骤。它包含了一系列的指令,告诉 Docker 如何从头开始构建镜像。

举个简单的例子帮助你理解上述的概念:

在我们建造房屋的时候,通常需要先知道所需的材料、步骤和设计图纸构造出一副房屋的蓝图(Dockerfile)。然后根据建筑蓝图(Dockerfile),你可以预先制造出房屋的各个模块(如墙壁、屋顶、地板等)。这些模块是静态的、不可变的,一旦制造完成,就不能再修改,这就是镜像。最后Docker 容器就像是根据预制模块(镜像)建成的房屋。你可以根据预制的房屋模块(镜像)在不同的地点(主机)快速搭建出一栋完整的房屋(容器)。

镜像相关

列出镜像列表

docker images

  • **REPOSITORY:**表示镜像的仓库源

  • **TAG:**镜像标签

  • **IMAGE ID:**镜像ID

  • **CREATED:**镜像创建时间

  • **SIZE:**镜像大小

获取镜像

当我们在本地主机上使用一个不存在的镜像时 Docker 就会自动下载这个镜像。如果我们想预先下载这个镜像,我们可以使用 docker pull 命令来下载它。

在获取之前可以先通过docker search 来查找所需要的具体镜像,或者在https://hub.docker.com/中查找后再拉取。

拉取

使用Dockerfile构建镜像

在实际的开发当中我们往往需要构建出自己项目的镜像,这时就需要用到Dockerfile文件了。

Dockerfile文件应位于项目的根目录下,文件的内容就是镜像构建的过程。

python 复制代码
# 使用官方的 Python 基础镜像
FROM python:3.8-slim
# 设置工作目录
WORKDIR /app
# 复制当前目录下的所有文件到工作目录
COPY . /app
# 安装依赖项
RUN pip install --no-cache-dir -r requirements.txt
# 设置环境变量
ENV PYTHONUNBUFFERED=1
# 暴露应用程序运行的端口
EXPOSE 5000
# 运行应用程序
CMD ["python", "app.py"]

详细解释:

  • FROM:指定基础镜像,所有 Dockerfile 必须 FROM 指令开始
  • WORKDIR: 设置工作目录。之后的指令(如 RUN、CMD等)都会在这个目录下执行。
  • COPY:将文件或目录从本机复制到容器中的指定路径。COPY 的第一个参数表示源路径,是一个相对于 Dockerfile 所在位置的路径。第二个参数是相对于工作目录的路径(当然也可以是绝对路径)
  • RUN:在镜像中运行指定的命令。通常用于安装软件包或者依赖。
  • ENV: 设置环境变量。
  • EXPOSE: 声明容器运行时监听的端口
  • CMD:指定容器启动时要运行的命令。每个 Dockerfile 只能有一个 CMD,如果指定了多个,只有最后一个生效。

更多指令可以参考官方文档

构建镜像:docker build -t 镜像名:标签 Dockerfile所在路径

删除镜像

docker rmi 镜像

可以用来删除指定镜像

容器相关

有了镜像之后就可以通过镜像启动容器。

启动容器

或者你可以以后台的方式启动,并为容器指定一个名字

成功的话你会看到类似上面的输出,这是容器的唯一id

查看容器

查看所有容器,包括运行中和停止的容器

docker ps -a

docker ps查看运行中的容器,我这里没有正在运行的。

  1. CONTAINER ID:容器唯一标识符(ID)。是一个简短的哈希值,用于唯一标识每个容器。

  2. IMAGE :容器所使用的镜像名称。例如,python:3.8-slim

  3. COMMAND:容器启动时执行的命令,可以在启动容器时覆盖。一般在Dockerfile末尾

  4. CREATED :容器创建的时间。例如,2 minutes ago3 days ago

  5. STATUS:容器的当前状态。可能的状态包括:

    • Restarting:容器正在重启。
    • Paused:容器已暂停。
    • Exited:容器已停止,后面通常跟着退出代码和停止时间。
    • Up:容器正在运行。
  6. PORTS :容器的端口映射信息。显示主机端口和容器端口之间的映射关系。例如,0.0.0.0:80->80/tcp 表示主机的 80 端口映射到容器的 80 端口。

  7. NAMES :容器的名称。可以在启动容器时通过 --name 选项指定。如果没有指定,Docker 会自动生成一个随机名称。

停止容器

docker stop 容器ID(上述的CONTAINERID字段)

删除容器

docker rm -f 容器ID

后台运行容器&进入后台运行的容器

在使用-d选项后台运行容器之后可以通过使用docker attach 或者 docker exec进入容器。

查看正在运行的容器

进入后台运行的容器docker exec

docker exec 命令会在一个正在运行的容器中启动一个新的进程,并附加到这个新进程上。这个新进程的标准输出和标准错误输出是独立的,不会显示容器主进程的输出。因此,当你使用 docker exec -it 进入容器时,你看不到主进程的输出。

docker attach

查看容器的执行日志

通过docker exec进入容器并不能查看到容器的标准输出,所以我们可以通过查看容器的日志来查看

docker log -f 容器ID或名字

Docker构建镜像的原理

todo

相关推荐
守护者17012 分钟前
JAVA学习-练习试用Java实现“实现一个Hadoop程序,使用Hive进行复杂查询和数据筛查”
java·学习
程序员 小柴18 分钟前
docker的与使用
java·docker·eureka
ghostwritten34 分钟前
Docker Registry Clean
运维·docker·容器
吴梓穆42 分钟前
UE5学习笔记 FPS游戏制作35 使用.csv配置文件
笔记·学习·ue5
虾球xz1 小时前
游戏引擎学习第199天
学习·游戏引擎
宋冠巡1 小时前
Windows安装Docker(Docker Desktop)
windows·docker·容器
A林玖2 小时前
【计算机相关学习】R语言
开发语言·学习·r语言
浪淘沙jkp2 小时前
大模型学习三:DeepSeek R1蒸馏模型组ollama调用流程
学习·ollama·deepseek
码熔burning2 小时前
【Spring Cloud Alibaba】:Nacos 入门讲解
分布式·spring cloud·微服务
nuo5342022 小时前
黑马 C++ 学习笔记
c语言·c++·笔记·学习