Docker 安装使用操作指南

news2025/7/17 2:53:09

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.coloradmin.cn/o/2229302.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C/C++】字符/字符串函数(1)——由string.h提供

零.导言 什么是字符/字符串函数呢&#xff1f; 其实就是一类用于处理字符和字符串的函数。 而其中一部分函数包含在头文件 string.h 中&#xff0c;有 strlen strcpy strcat strcmp strncpy strncat strncmp strstr strtok strerror 等等 接下来我将逐个讲解这些函数。 一.str…

【Linux】从内核角度理解 TCP 的 全连接队列(以及什么是 TCP 抓包)

文章目录 概念引入理解全连接队列内核方面理解Tcp抓包方法注意事项 概念引入 我们知道&#xff0c;TCP的三次握手是由TCP协议 自动处理的&#xff0c;建立连接的过程与用户是否进行accept无关&#xff0c;accept()的作用主要是为当前连接创建一个套接字&#xff0c;用于进行后…

【Spring】Spring Boot 日志(8)

本系列共涉及4个框架&#xff1a;Sping,SpringBoot,Spring MVC,Mybatis。 博客涉及框架的重要知识点&#xff0c;根据序号学习即可。 目录 本系列共涉及4个框架&#xff1a;Sping,SpringBoot,Spring MVC,Mybatis。 博客涉及框架的重要知识点&#xff0c;根据序号学习即可。 …

ElementUI学习笔记

一、ElementUI概述 官网&#xff1a;https://element.eleme.cn/#/zh-CN &#xff08;一&#xff09;定义 Element&#xff0c;一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库。是基于Vue的一个UI框架&#xff0c;该框架基于Vue开发了很多相关组件&#xf…

Ubuntu如何创建一个子用户并赋与管理员权限

在Ubuntu操作系统中,如何创建一个子用户并赋与管理员权限 一、创建用户 sudo useradd -m -s /bin/bash test详细解释: sudo:以超级用户(root)权限执行该命令。useradd 命令通常需要管理员权限,因此需要加上 sudo。 useradd:创建新用户的命令。 -m:指示系统为新用户创建…

Java项目实战II基于Java+Spring Boot+MySQL的工程教育认证的计算机课程管理平台(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着工程教…

18 实战:基于Tkinter和OpenCV的视频编码器:实现MPEG4矩形帧编码器

引言 在视频处理领域,视频编码器的设计与实现一直是研究的热点。本文将深入解析一段基于Python的代码,该代码利用Tkinter、OpenCV和NumPy库构建了一个MPEG4矩形帧编码器的图形用户界面(GUI)。通过详尽的代码讲解,帮助读者全面理解视频编码的基本原理及其在实际应用中的实…

SmartX 在新能源:支撑多家头部企业 MES 等核心系统稳定运行与 VMware 替换

在过去几年中&#xff0c;中国新能源企业经历了迅猛的增长。随着电池技术、光伏发电和风电等领域的不断进步&#xff0c;新能源企业不仅面临生产能力的提升需求&#xff0c;还需要优化运营效率和管理复杂度&#xff0c;其基础设施建设则需要不断升级以适应这种快速扩展的需求&a…

ELK配置转存redis缓存,采集nginx访问日志

在136服务器上部署mysql 启动mysql服务 可通过以下命令查找安装的软件包 怎么查找安装软件的日志文件位置rpm -qc mysql-server&#xff0c;即可显示mysql.log位置 也可通过查找配置文件中的log关键字来查找log文件日志位置 用awk命令&#xff0c;以切割&#xff0c;输出第二个…

诱骗取电快充协议芯片,支持与其它 MCU 共用 D+D-网络和电脑传输数据

前言 在科技日新月异的今天&#xff0c;快充技术已成为智能手机、平板电脑乃至笔记本电脑等电子设备不可或缺的一部分。各大厂商为了提升用户体验&#xff0c;纷纷推出了自家的快充协议&#xff0c;这些协议不仅让充电速度大幅提升&#xff0c;还带来了更加智能、安全的充电体验…

ubuntu20.04 加固方案-设置用户缺省UMASK

一、编辑/etc/profile配置文件 打开终端。 查看当前umask 使用文本编辑器&#xff08;如vim&#xff09;编辑/etc/profile文件。 sudo vim /etc/profile 二、添加配置参数 在打开的配置文件的末尾中&#xff0c;添加或修改以下参数&#xff1a; umask 027 三、保存并退出…

高阶数据结构--图(graph)

图&#xff08;graph&#xff09; 1.并查集1. 并查集原理2. 并查集实现3. 并查集应用 2.图的基本概念3. 图的存储结构3.1 邻接矩阵3.2 邻接矩阵的代码实现3.3 邻接表3.4 邻接表的代码实现 4. 图的遍历4.1 图的广度优先遍历4.2 广度优先遍历的代码 1.并查集 1. 并查集原理 在一…

全渠道供应链打造中企业定制开发2+1链动模式S2B2C商城小程序的策略与影响

摘要&#xff1a;本文探讨了全渠道供应链打造对于零售企业的重要性及面临的挑战&#xff0c;着重分析了物流环节整合的难点&#xff0c;并以家电行业为例说明了节假日期间物流对企业经营的影响。同时&#xff0c;引入“企业定制开发21链动模式S2B2C商城小程序”这一关键因素&am…

Oracle视频基础1.3.3练习

1.3.3 检查数据库启动情况 ps -ef | grep oracle启动数据库 sqlplus /nolog conn / as sysdba修改 fast_start_mttr_target 参数为初始值-50&#xff0c;缺省 scope 和 sid&#xff0c;查看修改结果 show parameter fast; alter system set parameter 250; show parameter fa…

ArcGIS005:ArcMap常用操作101-150例动图演示

摘要&#xff1a;本文涵盖了GIS软件操作的多方面内容&#xff0c;包括地图文档的新建、打开、保存及版本兼容性处理&#xff1b;错误与警告的查阅及帮助文档的使用技巧&#xff1b;地图打印比例尺的调整与地图信息的完善&#xff1b;图层操作的撤销与恢复&#xff0c;界面元素的…

电商预售是时候“消亡”了

淘天反复横跳在预售里。 作者|周立青 编辑|杨舟 “明知道搞复杂的预售规则会给用户体验带来伤害&#xff0c;弊大于利&#xff0c;甚至内网就有很多人在骂在批评&#xff0c;还要在今年双11这么玩&#xff0c;算是见识到了公司的组织惯性和路径依赖是多么可怕”&#xff0c;淘…

关于游戏加加不可以在cs2中显示的解决方案

输入的代码如下 -allow_third_party_software 1.打开steam 右键cs2&#xff0c;打开属性。 然后再这里填上这个代码就可以了

Codeforces Global Round 27 D.Yet Another Real Number Problem

题目 题解&#xff1a; #include <bits/stdc.h> using namespace std; // #define int long long #define pb push_back #define fi first #define se second #define lson p << 1 #define rson p << 1 | 1 #define ll long long #define pii pair<int, i…

Spring Boot中解决BeanDefinitionStoreException问题的实战分享

目录 前言1. 问题背景2. 问题分析2.1 异常分析2.2 常见的错误原因2.3 排查过程 3. 解决方案3.1 清理缓存和重建项目3.1.1 清理IDEA缓存3.1.2 使用Maven清理并重建项目 3.2 升级Maven版本3.2.1 下载最新Maven版本3.2.2 IDEA配置新的Maven版本3.2.3 清理缓存并重新构建 3.3 验证问…

新160个crackme - 088-[KFC]fish‘s CrackMe

运行分析 需破解用户名和RegKey PE分析 C程序&#xff0c;32位&#xff0c;无壳 静态分析&动态调试 ida函数窗口逐个查看&#xff0c;找到关键函数sub_401440 ida无法动调&#xff0c;需使用OD&#xff0c;启用StrongOD插件才可以动调ida静态分析&#xff0c;逻辑如下&…