详细介绍:关于容器Docker

一、Docker 是什么?

简单说,Docker 是一个 “容器化” 工具,能把应用程序和它需要的所有依赖(比如库、配置文件、运行环境)打包成一个 “容器”。这个容器能在任何安装了 Docker 的电脑上 “开箱即用”,不管是 Windows、Mac 还是 Linux,效果都一模一样。

举个生活例子:你想做一道菜(应用程序),需要特定的食材(依赖)和厨具(运行环境)。没有 Docker 时,你可能在自己家(开发环境)能做好,但到朋友家(测试环境)因为厨具不一样(比如没有烤箱)做失败了。而 Docker 相当于把 “菜 + 食材 + 迷你厨房” 全打包成一个密封盒子(容器),不管带到谁家(任何环境),打开盒子就能做出一模一样的菜。

二、Docker 核心概念

  1. 镜像(Image)镜像就是 “容器的模板”,是一个只读的文件包,包含了运行应用所需的所有东西(代码、依赖、配置等)。类比:就像操作系统的 ISO 镜像文件(比如 Windows 安装盘),本身不能直接用,但可以用它 “安装” 出一个可运行的系统。或者说软件安装包~

  2. 容器(Container)容器是镜像的 “运行实例”,是镜像被 “激活” 后形成的可操作环境。容器是独立的、隔离的,多个容器之间互不干扰。类比:用 ISO 镜像安装好的 Windows 系统,你可以在里面操作(运行程序、改配置),关闭后还能重新启动。

  3. 仓库(Repository)仓库是存放镜像的 “云仓库”,类似代码仓库(如 GitHub),你可以从仓库下载别人做好的镜像,也可以把自己的镜像传上去。最常用的公共仓库是 Docker Hub,里面有海量现成的镜像(比如 Nginx、MySQL、Python 等)。

三、Docker 为什么好用?

  1. 环境一致:解决 “我这能跑,你那跑不了” 的经典问题,开发、测试、生产环境完全统一。
  2. 轻量级容器共享宿主机的操作系统内核,不像虚拟机(VM)需要单独装系统,启动快(秒级)、占资源少。
  3. 隔离性:多个容器各自独立,比如一个容器里的 MySQL 崩溃了,不会影响另一个容器里的 Nginx。
  4. 可移植:一次打包,到处运行(本地电脑、服务器、云平台都支持)。

四、实战:用 Docker 跑一个 Nginx 网站

下面通过实际操作,体验 Docker 的核心流程:安装 Docker → 拉取镜像 → 运行容器 → 操作容器

4.1 步骤 1:安装 Docker

  • Windows/Mac:直接下载 Docker Desktop,安装后启动(会在状态栏显示图标)。
  • Linux(以 Ubuntu 为例)
    # 更新包管理器
    sudo apt update
    # 安装 Docker
    sudo apt install docker.io
    # 启动 Docker 服务
    sudo systemctl start docker
    # 设置开机自启
    sudo systemctl enable docker

安装完成后,打开终端输入 docker --version,能看到版本号就说明安装成功。

4.2 步骤 2:拉取 Nginx 镜像

Nginx 是一个常用的网页服务器,Docker Hub 上有官方镜像,我们直接 “拉取” 到本地:

docker pull nginx

Using default tag: latest

latest: Pulling from library/nginx

Digest: sha256:8adbdcb969e2676478ee2c7ad333956f0c8e0e4c5a7463f4611d7a2e7a7ff5dc

Status: Image is up to date for nginx:latest

docker.io/library/nginx:latest

这个命令会从 Docker Hub 下载最新的 Nginx 镜像。下载完成后,用 docker images 可以查看本地所有镜像:

docker images
# 输出类似:
# REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
# nginx        latest    abc123456789   2 days ago   142MB

REPOSITORY    TAG            IMAGE ID       CREATED         SIZE

redis         latest         acb90ced0bd7   6 weeks ago     222MB

nginx         latest         8adbdcb969e2   7 weeks ago     281MB

<none>        <none>         d5f28ef21aab   7 weeks ago     281MB

hello-world   latest         54e66cc1dd1f   7 weeks ago     16.9kB

rabbitmq      3-management   1d5d6a0f4af0   12 months ago   405MB

步骤 3:用镜像运行容器

镜像本身不能直接用,需要用它创建一个 “运行中的容器”。执行以下命令:

docker run -d -p 80:80 --name my-first-nginx nginx

7749a2b9d7026be9d263332d45b728da565f272b09d3ec3daa7fb802785505d3

命令解释:

  • -d:后台运行容器(不会占用终端)。
  • -p 80:80:端口映射,把容器内的 80 端口(Nginx 默认端口)映射到宿主机的 80 端口,这样才能通过本地电脑访问容器里的 Nginx。
  • --name my-first-nginx:给容器起个名字(方便后续操作)。
  • 最后一个 nginx:指定用哪个镜像创建容器。

步骤 4:访问 Nginx 服务

打开浏览器,输入 http://localhost(或 http://127.0.0.1),就能看到 Nginx 的默认欢迎页面,说明容器运行成功!

步骤 5:操作容器(常用命令)

  • 查看运行中的容器

    docker ps
    # 输出会显示容器 ID、名字(my-first-nginx)、状态等
  • CONTAINER ID   IMAGE     COMMAND              CREATED         STATUS         PORTS                                     NAMES

    7749a2b9d702   nginx     "/docker-entrypoint.…"   4 minutes ago   Up 4 minutes   0.0.0.0:80->80/tcp, [::]:80->80/tcp       my-first-nginx

    ea319c86ccf3   nginx     "/docker-entrypoint.…"   3 days ago      Up 9 minutes   0.0.0.0:8082->80/tcp, [::]:8082->80/tcp   my-nginx

  • 停止容器

    docker stop my-first-nginx  # 用名字停止
    # 或用容器 ID(比如前3位):docker stop abc
  • 启动已停止的容器

    docker start my-first-nginx
  • 删除容器(需先停止):

    docker rm my-first-nginx
  • 进入容器内部(比如查看 Nginx 配置):

    docker exec -it my-first-nginx /bin/bash
    # 执行后会进入容器的命令行,类似 SSH 登录
    # 退出容器:输入 exit

五、进阶:自定义一个应用镜像

如果官方镜像满足不了需求(比如需要运行自己的 Python 脚本),可以自己 “构建” 镜像。步骤如下:

  1. 准备文件:新建一个文件夹,里面放两个文件:

    • app.py(你的应用代码):
      print("Hello, Docker!")
    • Dockerfile(构建镜像的 “配方”):
      # 基于官方 Python 镜像(3.9版本)
      FROM python:3.9
      # 把当前目录的 app.py 复制到容器的 /app 目录
      COPY app.py /app/
      # 容器启动时执行的命令
      CMD ["python", "/app/app.py"]
  2. 构建镜像:在文件夹内打开终端,执行:

    docker build -t my-python-app:1.0 .
    • -t my-python-app:1.0:给镜像起名(my-python-app)和版本(1.0)。
    • .:表示 Dockerfile 在当前目录。
  3. 运行自定义镜像

    docker run my-python-app:1.0

    终端会输出 Hello, Docker!,说明自定义镜像运行成功。

Docker 核心价值是 “标准化打包,跨环境运行”,通过镜像、容器、仓库三个核心概念,解决了开发和部署中的环境一致性问题。

posted on 2025-10-21 10:08  slgkaifa  阅读(4)  评论(0)    收藏  举报

导航