Docker

Docker的简单入门

Docker标志性的鲸鱼
如图可见Docker的标志是一个装有集装箱的鲸鱼,这个标志也间接说明的它是做什么的;

一、Docker的作用

1.简单介绍Docker

在进入Docker入门前先说一个在开发中经常会遇到的问题:

  • 在软件开发工作中,我们总会遇到经典的“世界名画”:为什么在你的本地能正常运行,在我 的本地就不行?
    Docker,正是为了解决这个经典痛点而生的。
    它的核心能力,是对软件及其完整运行环境进行标准化封装。

接下来就详细介绍一下Docker是怎么实现这个操作的,让你可以我不可以变为,你可以我也可以;

2.Docker的核心重点

Docker的整个体系,围绕两个核心概念展开:镜像(Image) 与 容器(Container)。

  • 镜像,是一个只读的、标准化的应用运行模板。它完整定义了应用运行所需的所有环境、文件与配置,就像蛋糕的模具、建筑的施工图纸,是固定不变的“蓝本”。我们无需手动配置任何环境,只需把镜像从仓库拉取到本地,就拥有了应用运行的全部基础。
  • 容器,是镜像的运行实例,也就是基于这个模板启动的、可运行的“成品”。基于同一个镜像,你可以在任意多台机器上启动任意多个容器,每个容器都是独立、隔离的运行环境,且行为完全一致,从根本上解决了“本地能跑、线上不行”的问题。

镜像与容器之间的关系
如图所示,镜像就像精确到克的蛋糕配方 + 所有原材料的预打包套装,容器就像按照配方烤好的、可以直接食用的蛋糕;
镜像中拥有很多很多的东西,它需要一个可以将它运行启动的在载体,这个载体就是容器。

3.镜像仓库

如果把容器镜像比作软件的 “安装包”,那么镜像仓库就相当于专门托管这些 “安装包” 的 GitHub—— 它不仅提供存储服务,还支持镜像的版本管理、标签标记和权限控制。Docker 官方运营的 Docker Hub 是全球最大、最主流的公共镜像仓库,我们既可以从上面拉取官方维护的基础镜像(如 Ubuntu、Nginx、MySQL),也可以上传和分发自己打包的自定义镜像。

二、Docker的入门

1.Docker的下载安装

不管是任何工具都需要下载,Docker也不例外也是需要下载;

可以在Docker的官网上进行下载对应的版本:

https://www.docker.com/

这是Docker的官方网站,由于是国外的软件网站进入会比较慢;进入网站后会显示如图所示的界面;
Docker网站首页
根据自己的电脑选择对应的版本进行安装即可,win版一般选择AMD64即可,Mac根据自己电脑的芯片选择对应的版本即可:
安装Docker

2.Linux上Docker的安装

这里单独介绍一下Linux上关于Docker的安装,Linux安装为命令行格式,可以在

get.docker.com

地址中获取安装命令行:

curl -fsSL https://get.docker.com -o install-docker.sh

这就是安装指令,

  • 第一次执行curl命令可能会出现curl未安装的错误,解决办法是:
    sudo apt install curl -y,-y代表后续会允许安装操作,可以不需要输入Y进行允许操作。

  • 还有一个问题就是Linux安装使用国外路径可能会出现网络异常,连接被对方重置的问题:
    安装出现问题
    解决办法就是用国内的镜像源进行安装:

  • 下载阿里云 Docker 安装脚本

curl -fsSL https://get.docker.alibaba-inc.com -o install-docker.sh
  • 执行安装
sudo sh install-docker.sh

sudo代表为管理员身份执行命令,如果Linux中不是root用户就需要使用sudo执行,这就需要看你创建的虚拟机是否创建管理员身份了,要是创建了管理员身份就不需要使用sudo。

3.Win或Mac安装

  • Win系统或Mac系统就需要根本自己电脑下载对应的安装包进行安装,只需要无脑下一步即可,这里就不多介绍了;

  • Windows安装就需要打开本机的启用或关闭Windows功能打开Virtual Machine Platform(虚拟机平台),适用于Linux的Windows子系统,如果Win系统安装完成后打开DockerDesktop出现starting状态无法进入可以看Docker处于starting状态如何解决解决starting问题。

三、Docker的命令

1.Docker命令介绍

Docker的命令
Docker的命令包括四个部分:docker.io为docker仓库的注册表地址(可以省略),公共仓库
library为命名空间(作者名),如果为官方空间可以省略,如图中的library为官方空间
:latest为镜像版本号(可以指定版本进行下载),如果不写为获取最新的版本号,这段指令可以简写为:

docker pull nginx

Docker的运行原理
测试用例:

docker run hello-world

执行后Docker会自动拉取hello-world镜像,并输出欢迎信息,就说明Docker环境已经安装成功了。

2.容器生命周期命令

命令 作用 说明
docker create [参数] 镜像名 创建容器 仅生成容器实例,处于停止状态
docker start 容器ID/容器名 启动已创建的容器 启动处于停止状态的容器
docker run [参数] 镜像名 创建并启动容器 最常用命令,等价于 create + start
docker stop 容器ID/容器名 停止运行中的容器 优雅停止容器,等待进程退出
docker restart 容器ID/容器名 重启容器 先 stop 再 start
docker rm 容器ID/容器名 删除已停止的容器 加 -f 参数可强制删除运行中的容器
docker exec [参数] 容器ID/容器名 命令 在运行中的容器内执行命令 加 -it 参数可进入容器交互式终端
docker ps 查看运行中的容器 加 -a 参数查看所有容器(包括停止的)
docker inspect 容器ID/容器名 查看容器 / 镜像 / 网络 / 卷的详细信息 可获取容器 IP、挂载路径、环境变量等

3.Docker常用指令

指令 作用
docker pull <镜像名>:<标签>(可省略) 从仓库拉取镜像
docker images 查看本地所有镜像
docker rmi <镜像ID/名> 删除本地镜像
docker build -t <镜像名>:<标签>(可省略) 基于 Dockerfile 构建镜像
docker save -o <文件名>.tar <镜像名> 导出镜像为 tar 文件
docker load -i <文件名>.tar 从 tar 文件导入镜像
docker ps 查看运行中的容器
docker ps -a 查看所有容器(包括停止的)
docker logs -f <容器ID/名> 实时查看容器日志
docker exec -it <容器ID/名> /bin/bash 进入容器内部
docker rm <容器ID/名> 删除停止的容器
docker cp <本地路径> <容器ID/名>:<容器路径> 在主机和容器间拷贝文件

四、关于国内拉取镜像比较慢

由于国内网络环境问题,直接拉取 Docker Hub 镜像速度较慢,建议配置国内镜像加速源可以缓解拉取镜像慢;

1.创建国内镜像加速

  • 创建Docker 守护进程配置文件
sudo vi /etc/docker/daemon.json
  • 写入以下JSON内容(JSON内容对格式要求比较严格,格式错误会导致 Docker 无法启动)
{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://docker.1panel.live",
    "https://hub.rat.dev"
  ]
}
  • 重启 Docker 服务使配置生效
# 重启Docker服务
sudo systemctl restart docker
# 兼容旧版 service 命令
sudo service docker restart
  • 验证配置是否生效
docker info
# 查看输出末尾 Registry Mirrors 下有上述地址即配置成功

五、Dockerfile 与 Docker Compose

1.关于Dockerfile

Dockerfile 是一个文本文件,通过一系列指令详细描述了如何从基础镜像构建出自定义镜像,是实现镜像标准化、自动化构建的核心。

举个通俗易懂的例子就是:

  • Dockerfile 就是一份写在纯文本里的标准化菜谱。
    它会精确告诉你:先拿什么基础食材(基础镜像),然后依次加什么调料、切什么菜、用什么火候、煮多长时间……Docker 照着这份菜谱,就能每次都做出味道、分量完全一致的菜(自定义镜像)。它解决了 “换个人做味道就变” 的问题,还能一键自动完成整个烹饪过程。

2.关于Docker Compose

Docker Compose 用于定义和运行多容器应用,通过一个 YAML 文件配置应用所需的所有服务,然后一键启动所有容器。Docker Compose 会自动为应用创建独立的自定义网络,实现服务间的相互通信。

同样举一个例子:

  • 如果说 Dockerfile 是单道菜的详细菜谱,那 Docker Compose 就是一整桌宴席的总菜单。
    单道菜 = 单个 Docker 容器
    一桌宴席 = 你的多容器应用(比如一桌包含凉菜、热菜、汤、主食的完整宴席)
    YAML 配置文件 = 宴席清单,写清楚要做哪几道菜、每道菜用什么菜谱、什么时候上、怎么摆盘
    一键启动 = 厨房照着清单一次性把所有菜都做好、按顺序端上桌
    自动创建独立网络 = 给这桌宴席安排一个独立的包间,只有这桌的客人能互相交流,不会和其他桌混在一起
    它解决了 “每次请客都要自己一道道菜做、还要安排座位和上菜顺序” 的麻烦,让你一键就能摆出一桌标准统一的宴席。

3.Docker Compose的指令

指令 作用
docker compose up -d 启动所有服务(前台运行,加 -d 后台运行)
docker compose down 停止并删除所有服务容器、网络
docker compose stop 仅停止服务,不删除容器和网络
docker compose start 启动已停止的服务

六、推荐快速学习Docker的教程

这是我学习Docker推荐快速学习的一个教程它只有40分钟左右可以快速入门了解Docker。
快速入门Docker指南

总结

这篇 Docker 入门教程就告一段落了。从 “为什么我的代码在你电脑上跑不起来” 这个困扰无数开发者的经典痛点出发,我们一起认识了 Docker 这个容器化时代的核心工具,拆解了镜像、容器、仓库这三个最核心的概念,走完了从跨平台安装、基础命令使用到国内环境优化的完整流程,最后还初步了解了 Dockerfile 和 Docker Compose 这两个实现自动化构建和多容器编排的利器;最后感兴趣的兄弟们强烈建议自己在Linux中尝试使用一下Docker,多多使用这些指令你会熟记于心。

最后,希望这篇教程能帮你快速进入容器化世界的大门,从此告别环境不一致的烦恼,让开发和部署变得更加高效和轻松。如果在实践过程中遇到问题,不妨回头再翻翻这篇教程,有各种想法都可以在评论区留言交流。祝你们的开发道路上越来越顺利!

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐