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

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"
  }
}
  1. 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 的各种功能,将极大地提升你的工作效率与开发体验。

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


http://www.kler.cn/a/382447.html

相关文章:

  • 【华为云-云驻共创】UCS跨云多活容灾:让业务高可用不再是难题
  • Charles抓包_Android
  • Python练习8
  • WebSocket消息帧的组成结构
  • 基础算法——排序算法(冒泡排序,选择排序,堆排序,插入排序,希尔排序,归并排序,快速排序,计数排序,桶排序,基数排序,Java排序)
  • Spring中的ConversionService,为Spring提供数据转换服务
  • 宠物空气净化器测评!希喂/米家/有哈宠物空气净化器谁性价比高
  • 综合项目--博客
  • 【AIGC】如何充分利用ChatGPT:有效提示框架与基本规则
  • 成绩排序c++
  • D60【python 接口自动化学习】- python基础之数据库
  • 数据结构acwing和洛谷p8085作业
  • 专业 UI 设计公司:为您开启交互设计新征程
  • Linux案例:DNS服务器配置
  • java、excel表格合并、指定单元格查找、合并文件夹
  • HTML字符实体详解
  • 尚庭公寓-小程序接口
  • 【51蛋骗鸡16路电子开关编程CD4067使用switch】2021-12-27
  • Maven(17)如何使用Maven生成项目的文档?
  • 什么时候出现线程安全,如何实现线程安全?
  • ubuntu交叉编译expat库给arm平台使用
  • 【蓝队技能】【溯源反制】反打红队-蜜罐工具反制
  • MySQL数据库中的视图
  • 多模态模型中的动态分辨率总结
  • 前端使用PDF.js把返回的base64或二进制文件流格式,实现pdf文件预览
  • 移门减震器-止门时的震动保护门体和墙体