Docker入门学习-01

devtools/2024/12/22 21:22:56/

Docker 官方文档

1. Docker 基础知识

1.1 什么是 Docker?

  • Docker 是一个开源的平台,用于开发、交付和运行应用程序。
  • 它使用容器技术,将应用程序及其依赖打包在一个轻量级的可移植容器中。

1.2 Docker 的主要组件

  • 镜像(Image): 只读的模板,包含运行应用程序所需的一切,包括代码、库、环境变量等。
  • 容器(Container): 镜像的运行实例,可以看作是一个轻量级的虚拟机,但它共享主机的操作系统内核。
  • Dockerfile: 定义镜像的文件,包含了一系列命令,Docker 可以根据这些命令构建镜像。
  • Docker Hub: 官方的镜像仓库,可以从中下载现成的镜像,或上传自己的镜像。

2. 环境准备

2.1 安装 Docker

  • 访问 Docker 官网,根据你的操作系统下载并安装 Docker。
  • 安装完成后,可以通过命令行运行 docker --version 来验证 Docker 是否正确安装。

3. 第一个 Docker 容器

3.1 运行 Hello World

docker run hello-world
  • 这个命令会从 Docker Hub 拉取 hello-world 镜像,并在容器中运行它。
  • 你会看到一条包含 “Hello from Docker!” 的消息,这意味着你的 Docker 安装成功,并且可以正确运行容器

docker_run__23">3.2 理解 docker run 命令

  • docker run:创建并启动一个新的容器
  • hello-world:要运行的镜像名称。

4. Dockerfile 与自定义镜像

4.1 创建 Dockerfile

# 使用官方的 Node.js 镜像
FROM node:14# 创建并设置工作目录
WORKDIR /usr/src/app# 复制项目文件到工作目录
COPY . .# 安装项目依赖
RUN npm install# 暴露端口
EXPOSE 3000# 启动应用程序
CMD [ "npm", "start" ]
  • WORKDIR /usr/src/app:将容器内的工作目录设置为 /usr/src/app。接下来所有的 COPY、RUN 等命令都会基于这个目录执行。
  • COPY . .:将本地项目的所有文件复制到容器内的工作目录中。
  • RUN npm install:在容器内安装项目的依赖项。
  • CMD [“npm”, “start”]:设置容器启动时要执行的命令,这里是 npm start,它会启动 Node.js 应用。

4.2 构建镜像

docker build -t my-node-app .
  • -t my-node-app:指定镜像的名称。
  • .:指定 Dockerfile 所在的目录。

4.3 运行容器

docker run -p 3000:3000 my-node-app
  • -p 3000:3000:将主机的 3000 端口映射到容器的 3000 端口。
  • my-node-app:要运行的镜像名称。

4.4 访问应用

打开浏览器,访问 http://localhost:3000,应该可以看到页面显示 “Hello, Docker!”。

5. 完整实例

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

index.js

const express = require('express');
const app = express();app.get('/', (req, res) => {res.send('Hello, Docker!');
});app.listen(3000, () => {console.log('Server is running on port 3000');
});

package.json

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

http://www.ppmy.cn/devtools/107431.html

相关文章

Node.js sqlite3 中的流式查询迭代

Node.js sqlite3 db.each API 深入解析 在Node.js的sqlite3库中,db.each函数是一个用于逐行迭代查询结果的便捷API。它允许开发者以流式的方式处理大量数据,而不需要一次性将所有结果加载到内存中。本文将深入解析db.each API的函数定义、使用方法以及代…

代码随想录算法训练营第五十七天 | 图论part07

53. 寻宝 prim算法 prim算法 #include <iostream> #include <vector> #include <fstream> #include <climits>using namespace std;int main() {int v, e;int v1, v2, val;ifstream infile("input.txt");cin >> v >> e;vector…

CrowdStrike 的失败如何凸显了左移测试的重要性

通过自动化软件测试并将其左移&#xff0c;组织可以显著降低 CrowdStrike 等事件发生的风险。继续阅读&#xff0c;了解采用左移测试方法的强大之处。 Parasoft下载 测试中偷工减料的风险 CrowdStrike 软件更新失败是一个重要的教训&#xff0c;它让我们认识到早期、自动…

WordShield 一款轻量级且灵活的敏感词过滤库

简介 WordShield 是一款轻量级且灵活的敏感词过滤库&#xff0c;基于 Spring Boot 构建。它提供了简单易用的 API&#xff0c;用于过滤和管理敏感词汇。 github 地址&#xff1a; https://github.com/avidbyte/wordshield 特性 敏感词过滤&#xff1a;自动过滤字符串中的敏…

CargosettlementController

目录 1、 CargosettlementController 1.1、 货商结算 1.1.1、 //登录用户 1.2、 结算单号 1.2.1、 //查询供应商账单 1.2.2、 //单号 1.2.3、 //单据日期 1.2.4、 //付款状态 CargosettlementController using QXQPS.Models; using QXQPS.Vo; using System…

使用Natapp内网穿透工具,将内网地址映射为外网地址

最近由于项目需要&#xff0c;测试小程序在手机端的显示效果&#xff0c;自己电脑本地的内网地址访问不到&#xff0c;所以需要将内网地址映射为外网地址&#xff0c;这样外网就能访问我的内网项目地址了。 路由器映射成功之后发现不是公网ip&#xff0c;外网无法访问。在网上…

MySQL5.7.36之高可用架构部署-Atlas读写分离

1、安装Atlas-2.2.1.el6.x86_64.rpm rpm -ivh Atlas-2.2.1.el6.x86_64.rpm 2、进入Atlas目录并且备份配置文件 cd /usr/local/mysql-proxy/conf cp test.cnf test.cnf.bak 3、密码加密采用的是自带的工具 /usr/local/mysql-proxy/bin/encrypt 123456 #因为我的密码是12345…

JVM运行时数据区

JVM运行时数据区 1.概述 内存是非常重要的系统资源&#xff0c;是硬盘和CPU 的中间仓库及桥梁承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略&#xff0c;保证了JVM的高效稳定运行不同的JVM对于内存的划分方式和管理机制…