Docker 安装使用操作指南

Docker 是一种开源的容器化平台,它允许开发者将应用及其所有依赖项打包到一个轻量级的容器中,这样就可以在任何地方一致地运行它们。无论是开发环境、测试环境还是生产环境,Docker 都能够提供一致的环境,从而消除"在我的机器上能运行"的问题。本文将通过实际操作案例和示例代码,深入探讨 Docker 的实践与应用。

1. Docker 安装

1.1 安装 Docker

在不同操作系统上,Docker 的安装方法有所不同。以下是 Ubuntu 和 Windows 上的 Docker 安装步骤。

Ubuntu
  1. 更新现有的包列表:

    复制代码
    sudo apt-get update
  2. 安装 Docker:

    复制代码
    sudo apt-get install -y docker.io
  3. 启动 Docker 服务:

    复制代码
    sudo systemctl start docker
    sudo systemctl enable docker
  4. 验证安装:

    复制代码
    docker --version
Windows
  1. 下载并安装 Docker Desktop。

  2. 按照安装向导进行设置,确保启用 WSL 2(Windows Subsystem for Linux)。

  3. 安装完成后,打开 PowerShell,并运行以下命令以确认 Docker 是否安装成功:

    复制代码
    docker --version

2. 基本命令

在安装成功后,我们可以测试 Docker 是否工作正常。以下是一些基本的 Docker 命令。

2.1 运行第一个容器

我们可以运行一个简单的容器,例如 Nginx:

复制代码
docker run -d -p 8080:80 nginx

这个命令使用 Nginx 镜像在后台运行一个容器,并将本地主机的 8080 端口映射到容器的 80 端口。可以在浏览器中访问 http://localhost:8080,查看 Nginx 欢迎页面。

2.2 查看运行中的容器

要查看正在运行的容器,可以运行:

复制代码
docker ps

2.3 停止和删除容器

停止运行的容器:

复制代码
docker stop <container_id>

删除容器:

复制代码
docker rm <container_id>

3. Dockerfile 和构建自定义镜像

有时我们需要构建自己的 Docker 镜像。可以通过 Dockerfile 来实现。

3.1 创建 Dockerfile

创建一个名为 Dockerfile 的文件,并添加以下内容:

复制代码
# 使用官方的 Node.js 镜像
FROM node:14

# 创建工作目录
WORKDIR /usr/src/app

# 复制 package.json 和 package-lock.json
COPY package*.json ./

# 安装依赖项
RUN npm install

# 复制项目文件
COPY . .

# 暴露应用端口
EXPOSE 3000

# 启动应用程序
CMD ["node", "app.js"]

3.2 构建镜像

在包含 Dockerfile 的目录中运行以下命令以构建镜像:

复制代码
docker build -t my-node-app .

3.3 运行自定义镜像

创建完镜像后,可以使用以下命令来运行它:

复制代码
docker run -d -p 3000:3000 my-node-app

4. 实际操作案例:构建一个简单的 Web 应用

接下来,我们将构建一个简单的 Node.js Web 应用,并使用 Docker 来容器化它。

4.1 创建 Node.js 应用

创建一个项目目录 my-node-app,并在其中创建以下文件:

  1. package.json

    {
    "name": "my-node-app",
    "version": "1.0.0",
    "description": "A simple Node.js app",
    "main": "app.js",
    "scripts": {
    "start": "node app.js"
    },
    "dependencies": {
    "express": "^4.17.1"
    }
    }

  2. app.js

    const express = require('express');
    const app = express();
    const PORT = 3000;

    app.get('/', (req, res) => {
    res.send('Hello, Docker!');
    });

    app.listen(PORT, () => {
    console.log(Server is running on http://localhost:${PORT});
    });

4.2 初始化项目

在项目目录中运行以下命令以安装依赖项:

复制代码
npm install

4.3 创建 Dockerfile

my-node-app 目录中创建 Dockerfile,内容如前述。

4.4 构建镜像并运行

构建镜像:

复制代码
docker build -t my-node-app .

运行容器:

复制代码
docker run -d -p 3000:3000 my-node-app

4.5 访问应用

在浏览器中访问 http://localhost:3000,你应该能够看到"Hello, Docker!"的消息。

5. 数据持久化与 Docker Volume

在 Docker 中,数据持久化是一个重要概念。通过使用 Docker Volume,可以将数据存储在容器外部,防止数据丢失。

5.1 创建 Volume

创建一个 Volume:

复制代码
docker volume create my-volume

5.2 在容器中使用 Volume

在运行容器时,通过 -v 参数将 Volume 挂载到容器中。例如,如果我们希望将 /usr/src/app/data 目录映射到 Volume:

复制代码
docker run -d -p 3000:3000 -v my-volume:/usr/src/app/data my-node-app

6. Docker Compose

Docker Compose 是一个用于定义和运行多-container Docker 应用的工具。使用 Compose,可以使用 YAML 文件来配置应用服务。

6.1 安装 Docker Compose

在大多数情况下,Docker Desktop 默认已包含 Docker Compose。如果你使用的是 Linux,可以通过以下命令安装:

复制代码
sudo apt-get install docker-compose

6.2 创建 docker-compose.yml 文件

my-node-app 目录中,创建一个名为 docker-compose.yml 的文件,内容如下:

复制代码
version: '3'
services:
  web:
    build: .
    ports:
      - "3000:3000"
    volumes:
      - my-volume:/usr/src/app/data

volumes:
  my-volume:

6.3 使用 Docker Compose 启动应用

在项目目录中运行以下命令来启动应用:

复制代码
docker-compose up

在浏览器中访问 http://localhost:3000,你应该能看到应用正常运行。

7. 维护与管理 Docker 容器

7.1 查看所有容器

要查看所有容器,无论是运行中的还是停止的,可以使用:

复制代码
docker ps -a

7.2 查看容器日志

查看容器的输出日志:

复制代码
docker logs <container_id>

7.3 进入容器

以交互模式进入正在运行的容器:

复制代码
docker exec -it <container_id> /bin/bash

8. 总结

Docker 是一个强大的工具,通过容器化技术,为开发者提供了一种高效的应用部署方式。在本指南中,我们讨论了 Docker 的安装、基本命令、自定义镜像构建、数据持久化、Docker Compose 以及容器管理等方面的内容。

通过实际案例的演示,相信你已经掌握了如何利用 Docker 来简化开发与部署流程。在实际项目中,能够灵活运用 Docker 的各种功能,将极大地提升你的工作效率与开发体验。

如果你有任何问题或者想要深入探讨的话题,欢迎随时联系!

相关推荐
计算机小手2 小时前
一个带Web UI管理的轻量级高性能OpenAI模型代理网关,支持Docker快速部署
经验分享·docker·语言模型·开源软件
坚持学习前端日记2 小时前
常见docker指令
docker·容器·eureka
小芳矶3 小时前
Dify本地docker部署踩坑记录
python·docker·容器
70asunflower3 小时前
阿里云无影云电脑 Docker 使用完全指南
阿里云·docker·云计算
feasibility.5 小时前
在OpenCode使用skills搭建基于LLM的dify工作流
人工智能·低代码·docker·ollama·skills·opencode·智能体/工作流
lpruoyu6 小时前
【Docker进阶-02】Docker命令
docker·容器
FLGB8 小时前
Docker网段和服务器内部网段172.17 网段冲突导致网络不通
服务器·网络·docker
骂我的人都死了10 小时前
DevOps架构部署
运维·ubuntu·docker·k8s·github·devops·python3.11
AL31710 小时前
模拟实现NetDevOps全生命周期自动化网络运维
运维·docker·centos·ensp·netmiko
Alaaaaaaan10 小时前
[DevOps]使用github-action工具部署docker容器(实现提交代码一键推送部署到服务器)
服务器·前端·docker·容器·github