东风不来
三月的柳絮不飞

Docker 实战入门教程 操作指南

一、Docker 是什么?为什么我们需要它?

简单来说,Docker 是一种容器化技术。它能将你的应用程序及其所有依赖(比如代码、运行时、系统工具、库)打包到一个轻量、可移植的容器 (Container) 中。这个容器可以在任何安装了 Docker 的机器上运行,并且表现得一模一样。

1. Docker 与虚拟机的区别

为了更好地理解,我们可以将它与传统的虚拟机(VM)做个对比:

  • 虚拟机:虚拟出一整套硬件,在上面运行一个完整的操作系统,然后再运行你的应用。它非常笨重,启动慢,资源占用高。
  • Docker 容器:直接运行在宿主机的操作系统内核之上,没有自己的内核,也没有硬件虚拟化。它极其轻量,启动速度是秒级的。

Docker 的核心优势在于隔离性、一致性、可移植性,它彻底解决了开发、测试、生产环境不一致的问题。

2. 核心概念

在我们开始动手之前,必须理解三个核心概念:

  1. 镜像 (Image):一个只读的模板,可以看作是“软件安装包”。它包含了运行应用所需的一切。
  2. 容器 (Container):镜像是静态的,而容器是镜像运行起来的实例,可以看作是“安装好的软件”。你可以创建、启动、停止、删除容器。
  3. 仓库 (Repository):一个集中存放和分发镜像的地方。最大的公开仓库是 Docker Hub

二、安装 Docker

Docker 支持主流的操作系统,安装过程非常简单。以 Ubuntu 为例,使用官方安装脚本自动安装,安装命令如下:

# 下载并执行Docker官方安装脚本
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# 启动Docker服务
sudo systemctl start docker
sudo systemctl enable docker

安装完成后,打开你的终端(命令行工具),输入以下命令验证是否成功:

docker --version

如果能看到版本号,恭喜你,Docker 环境已经准备就绪!

三、镜像 (Image) 核心命令

镜像是容器的基石,我们先来学习如何管理镜像。

1. 下载镜像

从 Docker Hub 下载一个官方的 Nginx 镜像。

docker pull nginx:latest 

这里的 nginx 是镜像名,latest 是标签 (tag),通常代表最新版本。

2. 查看本地镜像

列出你已经下载到本地的所有镜像。

docker images

3. 删除镜像

当一个镜像不再需要时,可以删除它以释放磁盘空间。

docker rmi <镜像ID或镜像名:标签>
# 示例
docker rmi nginx:latest

四、容器 (Container) 核心命令

有了镜像,我们就可以创建和管理容器了。这是 Docker 最激动人心的部分。

1. 创建并运行容器

使用我们刚才下载的 Nginx 镜像来运行一个 Web 服务器。

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

让我们分解一下这个命令:

  • docker run: 创建并运行一个容器。
  • --name my-nginx: 给容器起一个自定义的名字 my-nginx
  • -d: 后台运行容器(Detached 模式)。
  • -p 8080:80: 端口映射。将我们自己电脑(宿主机)的 8080 端口,映射到容器内部的 80 端口。
  • nginx: 基于哪个镜像来创建容器。

现在,打开浏览器访问 http://localhost:8080,你应该能看到 Nginx 的欢迎页面了!

2. 查看正在运行的容器

docker ps

3. 查看所有容器 (包括已停止的)

docker ps -a

4. 停止容器

docker stop my-nginx

5. 启动已停止的容器

docker start my-nginx

6. 查看容器日志

docker logs my-nginx
# 加上 -f 参数可以持续跟踪日志
docker logs -f my-nginx

7. 进入容器内部

有时需要进入容器进行调试,就像 SSH 登录一台远程服务器一样。

docker exec -it my-nginx /bin/bash
  • -it: 开启一个交互式的终端。
  • /bin/bash: 进入容器后执行的命令,这里是打开一个 bash shell。

8. 删除容器

停止的容器不会自动删除,需要手动清理。

docker rm my-nginx 

注意: 正在运行的容器无法直接删除,需要先 stop 或者使用 -f 参数强制删除。

五、使用 Dockerfile 构建自己的镜像

每次都手动运行命令来配置容器太麻烦了。Dockerfile 就像一张“建筑图纸”,可以让我们自动化地构建自定义镜像。

假设我们有一个简单的 Node.js 应用,目录结构如下:

/my-node-app
  ├── app.js
  ├── package.json
  └── Dockerfile

现在,我们在 my-node-app 目录下创建一个名为 Dockerfile 的文件(没有后缀名),内容如下:

# 1. 指定基础镜像
FROM node:18-alpine

# 2. 设置工作目录
WORKDIR /app

# 3. 复制 package.json 文件到工作目录
COPY package*.json ./

# 4. 安装依赖
RUN npm install

# 5. 复制所有项目文件到工作目录
COPY . .

# 6. 声明容器对外暴露的端口
EXPOSE 3000

# 7. 容器启动时执行的命令
CMD ["node", "app.js"]

有了这个 Dockerfile,我们就可以构建自己的应用镜像了。在 my-node-app 目录下打开终端,执行:

docker build -t my-node-app:1.0 .
  • -t: 给镜像起一个名字和标签。
  • .: 表示 Dockerfile 所在的当前目录。

构建完成后,用 docker images 就能看到你亲手创建的镜像了!然后就可以像使用官方镜像一样,用 docker run 来运行它。

六、Docker 网络

默认情况下,Docker 会创建一个 bridge(桥接)网络,所有容器都连接到这个网络上。但如果想让多个容器方便地互相通信,最佳实践是创建自定义网络

# 创建一个网络
docker network create my-app-net

# 运行容器并连接到这个网络
docker run --name some-app --network my-app-net ...
docker run --name some-db --network my-app-net ...

在同一个自定义网络中,容器之间可以直接通过容器名作为主机名进行通信。例如,some-app 可以直接访问 http://some-db:port

七、使用 Docker Compose 编排多容器应用

当应用变得复杂,比如一个 “Web 应用 + 数据库 + 缓存” 的组合,手动管理多个容器会变得非常困难。这时,Docker Compose 就登场了。

Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。你只需要一个 docker-compose.yml 文件,就可以用一条命令启动或停止所有服务。

下面是一个部署 WordPress 博客(需要 Web 服务器和数据库)的 docker-compose.yml 示例:

version: '3.8'

services:
  # WordPress 服务
  wordpress:
    image: wordpress:latest
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: user
      WORDPRESS_DB_PASSWORD: password
      WORDPRESS_DB_NAME: wordpress
    depends_on:
      - db

  # 数据库服务
  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_DATABASE: wordpress
      MYSQL_USER: user
      MYSQL_PASSWORD: password
      MYSQL_ROOT_PASSWORD: rootpassword
    volumes:
      - db_data:/var/lib/mysql

volumes:
  db_data:

将以上内容保存为 docker-compose.yml,然后在该文件目录下执行:

1. 启动所有服务

docker-compose up -d

2. 停止并删除所有服务

docker-compose down

简单两行命令,就完成了一个复杂应用的部署和销毁,这就是 Compose 的魅力。

总结

恭喜你!通过这篇教程,你已经掌握了 Docker 从入门到实战的核心知识链:

  1. 理解了镜像、容器、仓库的核心概念。
  2. 学会了使用 docker run, docker ps, docker stop核心命令来管理容器。
  3. 掌握了如何编写 Dockerfile构建自定义镜像
  4. 了解了 Docker 的网络模式,并学会了使用 Docker Compose编排和管理多容器应用

Docker 的世界远不止于此,但这已经为你打开了通往高效开发和运维的大门。下一步,你可以去探索更高级的主题,比如企业级容器编排工具 Kubernetes (K8s)。但无论走多远,今天所学的这些基础都将是你最坚实的基石。现在,就去将你的第一个应用 Docker 化吧!

赞(1) 打赏
未经允许不得转载:文字咖 » Docker 实战入门教程

评论 抢沙发

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫