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

相关推荐
高 朗1 小时前
【从0开始搭建微服务并进行部署】SpringBoot+dubbo+zookeeper
spring boot·微服务·dubbo·java-zookeeper
jsnjs4 小时前
MapReduce学习与理解
大数据·学习·mapreduce
地球空间-技术小鱼4 小时前
学习单片机编程和硬件设计步骤
单片机·嵌入式硬件·学习
蓝瑟柳絮4 小时前
学习之什么是生成器
android·java·学习
乐事layz4 小时前
对比学习训练是如何进行的
深度学习·学习·机器学习
楠了个难4 小时前
GPIO之EMIO按键控制LED——ZYNQ学习笔记3
笔记·学习
霍格沃兹测试开发学社测试人社区5 小时前
软件测试学习笔记丨Pytest 学习指南
软件测试·笔记·测试开发·学习·pytest
kkai人工智能6 小时前
用ChatGPT工作提效,这些方法太实用了!
人工智能·学习·ai·chatgpt·媒体