当前位置: 首页 > news >正文

零基础玩转Docker:从安装到实战

1. Docker到底是什么?能解决什么问题?

第一次听说Docker时,我也被各种术语搞得一头雾水。直到有一次在团队项目里,同事的代码在我电脑上死活跑不起来,才发现问题出在环境配置上——他用的Python 3.8,而我本地是3.6,依赖库版本也各不相同。这时候我才真正理解Docker的价值。

简单来说,Docker就像个标准化集装箱。想象你要搬家,把所有家具、电器打包装箱,搬到新房子后开箱即用,完全不用考虑墙上的插座型号、地板材质这些细节。Docker做的就是把你的应用和它需要的环境(比如特定版本的Python、MySQL数据库、配置文件)打包成一个"集装箱"(专业术语叫镜像),在任何支持Docker的机器上都能原样运行。

和传统虚拟机相比,Docker轻量得多。虚拟机相当于在电脑里模拟整套硬件和操作系统,而Docker只是给进程加了个"隔离罩"。实测在我16G内存的笔记本上,开个Ubuntu虚拟机至少要占用2G内存,而启动一个Docker容器只需要几十MB。这也是为什么很多互联网公司都用Docker来做微服务架构——一台服务器能同时跑几十个容器服务。

2. 手把手安装Docker

2.1 Windows/Mac用户必看

如果你是Windows 10专业版或Mac用户,直接安装Docker Desktop是最省事的选择。下载地址在官网(docker.com/get-started),安装过程就像装QQ一样简单。不过有两点要注意:

  1. 安装时会要求开启Hyper-V(Windows)或HyperKit(Mac),这相当于给你的系统加了个虚拟化驱动
  2. 第一次启动时可能会卡在"Docker starting...",这时候去任务管理器把所有的"vmmem"进程结束掉再重启就好了

实测发现,国内用户最好在安装前先把安装包下载链接复制到迅雷,速度会比浏览器直接下载快很多。安装完成后,在右下角系统托盘区会出现小鲸鱼图标,右键菜单里能快速启停服务。

2.2 Linux用户的安装指南

以Ubuntu 20.04为例,打开终端依次执行以下命令:

# 先卸载可能存在的旧版本 sudo apt-get remove docker docker-engine docker.io containerd runc # 安装必要工具包 sudo apt-get update sudo apt-get install ca-certificates curl gnupg lsb-release # 添加Docker官方GPG密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg # 设置稳定版仓库 echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # 安装Docker引擎 sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io

安装完成后,建议立即执行以下配置:

# 避免每次都要输sudo sudo usermod -aG docker $USER newgrp docker # 测试安装是否成功 docker run hello-world

如果看到"Hello from Docker!"的欢迎信息,说明安装成功。我在阿里云服务器上实测完整安装过程不超过5分钟。

3. 配置加速器解决拉取镜像慢的问题

刚装好Docker时,最让人崩溃的就是拉取镜像的速度。默认的Docker Hub服务器在国外,下载经常只有几十KB/s。这时候就需要配置镜像加速器,国内常用的有:

  1. 阿里云加速器(需要注册账号获取专属地址)
  2. 中科大镜像https://docker.mirrors.ustc.edu.cn
  3. 网易云https://hub-mirror.c.163.com

配置方法很简单,创建或修改/etc/docker/daemon.json文件:

{ "registry-mirrors": [ "https://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn" ] }

然后重启服务:

sudo systemctl daemon-reload sudo systemctl restart docker

我做过对比测试,没配加速器时拉取Ubuntu镜像要20分钟,配置后只要1分半钟。建议同时添加两个镜像地址,当一个不可用时会自动切换到另一个。

4. 第一个Docker容器实战

4.1 运行Hello World

让我们用经典案例开始:

docker pull hello-world docker run hello-world

这短短两行命令背后发生了很多事情:

  1. pull从仓库下载镜像到本地
  2. run创建容器并执行
  3. 容器输出欢迎信息后自动退出

可以用docker ps -a查看所有容器记录,包括已退出的。你会发现虽然容器停止了,但它的"尸体"还留着——这是Docker的特性,方便你查看历史记录。

4.2 玩转Nginx服务器

来个实用点的例子,启动一个Nginx web服务器:

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

参数解释:

  • -d后台运行
  • -p 8080:80把容器的80端口映射到主机的8080
  • --name给容器起个名字
  • nginx镜像名称

现在访问http://localhost:8080就能看到Nginx欢迎页。想修改网站内容?可以这样:

# 进入容器bash环境 docker exec -it my-nginx bash # 或者更简单的,直接替换默认页面 echo "<h1>Hello Docker!</h1>" > index.html docker cp index.html my-nginx:/usr/share/nginx/html/

4.3 数据持久化的正确姿势

容器重启后,里面的文件修改会丢失。想要持久化存储,需要用-v参数挂载主机目录:

# 创建网站目录 mkdir ~/my-website # 启动容器并挂载目录 docker run -d -p 8080:80 -v ~/my-website:/usr/share/nginx/html --name web nginx

现在你在~/my-website放任何HTML文件,都会实时反映到网站。我在实际项目中常用这种方式挂载配置文件,比如:

docker run -v /path/on/host:/etc/nginx/conf.d nginx

5. 镜像管理核心技巧

5.1 查看和清理镜像

随着使用时间增长,镜像会占用大量磁盘空间。常用管理命令:

# 列出镜像 docker images # 删除指定镜像 docker rmi 镜像ID # 删除所有未被容器引用的镜像 docker image prune # 清理所有无用数据(包括停止的容器) docker system prune

有个实用技巧:给镜像打标签。比如给ubuntu镜像打上版本标签:

docker tag ubuntu:latest ubuntu:20.04

5.2 自己构建镜像

Dockerfile是构建镜像的配方文件,举个Python应用的例子:

# 基于Python官方镜像 FROM python:3.8-slim # 设置工作目录 WORKDIR /app # 先复制依赖文件 COPY requirements.txt . # 安装依赖 RUN pip install -r requirements.txt # 再复制全部代码(利用Docker缓存层) COPY . . # 暴露端口 EXPOSE 5000 # 启动命令 CMD ["python", "app.py"]

构建命令:

docker build -t my-python-app .

我习惯用-t给镜像起个有意义的名字,后期管理起来方便。构建过程中有个优化技巧:把变动频率低的指令(如安装依赖)放在Dockerfile前面,这样可以充分利用缓存加速构建。

6. 容器网络与多服务编排

6.1 容器间通信

默认情况下,容器之间是隔离的。要让它们通信,可以:

  1. 使用--link参数(已过时)
  2. 创建自定义网络:
docker network create my-net docker run -d --name web --network my-net nginx docker run -it --network my-net busybox ping web

在自定义网络里,容器之间可以直接用名字互相访问,这对微服务架构特别有用。

6.2 Docker Compose实战

当需要同时管理多个容器时,推荐使用Docker Compose。创建一个docker-compose.yml文件:

version: '3' services: web: image: nginx ports: - "8080:80" volumes: - ./html:/usr/share/nginx/html db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: example

然后一键启动所有服务:

docker-compose up -d

我在开发环境常用这种组合:一个Python容器+MySQL容器+Redis容器,完美模拟生产环境。Compose文件还支持定义网络、依赖关系等复杂配置,比手动管理方便太多。

http://www.jsqmd.com/news/620880/

相关文章:

  • 值类型与引用类型:别再只背“栈和堆”了,看这 个实际影响绞
  • 觅感科技WiFi 2.4G5G双频双模技术的应用价值与能力
  • 从零到一:在麒麟V10桌面系统上部署Qt 5.12.3开发环境
  • 四步生图封神,GenEval从61%狂拉到92%,全面超越GPT-4o的TDM-R1模型来了
  • 扣子 2.5,过了体验那条红线
  • 台达A2/B2伺服电机编码器改功率软件那些事儿
  • 如何免费获得专业级电脑散热控制:FanControl完全指南
  • AI医学影像领域标杆推荐:德适
  • SQL中如何高效合并多张表的数据更新_使用MERGE INTO语法
  • 嵌入式AES-CBC轻量加密库:资源受限MCU的安全实现
  • [解决]vmware虚拟化 Intel VT-x/EPT 或 AMD-V/RVI(V)无法开启的问题
  • NVIDIA Profile Inspector 配置问题完全指南:从识别到解决的完整流程
  • 用phpstudy在Win11上快速搭建DVWA:一个视频+这篇图文就够了
  • 嵌入式串口通信中间件:mySerial双缓冲回调设计
  • M5Clock嵌入式图形时钟库:轻量级TFT时间渲染组件
  • ArcGIS 10.8.2 批量裁剪栅格避坑指南:从‘要素超出范围’报错到完美输出
  • ROS导航实战:从Dijkstra到A*,全局路径规划算法对比与优化
  • SimpleArduinoTimer:Arduino非阻塞定时器原理与RTC扩展实践
  • 2026青海网吧技术解析:青海网吧、青海网咖、青海电竞馆、青海电竞选择指南 - 优质品牌商家
  • 当PLC遇上滚筒:聊聊洗衣机控制系统的硬核操作
  • AI Coding越来越强,我们还有必要学Processing吗? · 创意编程陕
  • SSLClientESP32:ESP32嵌入式TLS安全通信实战指南
  • 从Git到AI工厂:为什么AtomGit是开发者必须关注的下一个技术基础设施?
  • Kaggle注册遇验证码难题?巧用Header Editor插件一键搞定!
  • YF-S201流量传感器嵌入式驱动库设计与实现
  • 避开TSG的MASK操作误区:从‘建立’到‘应用’的完整避坑指南
  • 微信一键操控电脑!腾讯QBotClaw开启轻量化AI新时代
  • 技术解析:SUTrack如何用统一ViT架构重塑单目标追踪
  • OpenClaw技能市场巡礼:Top10 Gemma-3-12b-it适配模块实测
  • 2026年度上海伺华精密机械跻身冷弯成型设备推荐品牌!