Docker入门:从安装到实际应用

Docker入门指南:从安装到实际应用

Docker 是一个开源的平台,允许开发者通过容器技术来部署、管理和运行应用程序。容器是一种轻量级、独立的运行环境,可以包含应用程序及其所有依赖项,从而确保在不同环境下运行一致。本文将介绍 Docker 的基本概念、安装方法以及实际应用示例。

一、安装 Docker

在 Linux 上安装 Docker:

  1. 更新包索引并安装必要的软件包:

    sudo apt-get update
    sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
    
  2. 添加 Docker 的官方 GPG 密钥:

    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    
  3. 添加 Docker 存储库:

    sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
    
  4. 更新包索引并安装 Docker:

    sudo apt-get update
    sudo apt-get install docker-ce
    
  5. 启动并启用 Docker 服务:

    sudo systemctl start docker
    sudo systemctl enable docker
    

在 macOS 上安装 Docker:

  1. 下载并安装 Docker Desktop for Mac:

    访问 Docker 官网下载适用于 macOS 的 Docker Desktop 安装包,双击安装并按照提示完成安装。

  2. 启动 Docker Desktop 应用:

    在应用程序文件夹中找到 Docker 并启动,Docker 图标出现在菜单栏中,表示 Docker 已启动。

在 Windows 上安装 Docker:

  1. 下载并安装 Docker Desktop for Windows:

    访问 Docker 官网下载适用于 Windows 的 Docker Desktop 安装包,双击安装并按照提示完成安装。

  2. 启动 Docker Desktop 应用:

    在开始菜单中找到 Docker Desktop 并启动,Docker 图标出现在系统托盘中,表示 Docker 已启动。

二、Docker 基本概念
  • 镜像 (Image):镜像是一个只读的模板,包含运行应用程序所需的所有文件和配置。镜像可以用来创建容器。
  • 容器 (Container):容器是镜像的运行实例。它是一个轻量级、独立、可执行的软件包,包含运行应用程序所需的所有内容。
  • Dockerfile:Dockerfile 是一个文本文件,包含构建 Docker 镜像的指令。
三、创建和运行 Docker 容器
  1. 拉取官方镜像:

    使用 docker pull 命令从 Docker Hub 拉取官方镜像,例如拉取 Ubuntu 镜像:

    docker pull ubuntu
    
  2. 运行容器:

    使用 docker run 命令运行容器,例如运行一个交互式的 Ubuntu 容器:

    docker run -it ubuntu
    

    你将进入一个 Ubuntu 容器的终端,可以在其中执行命令。

  3. 列出正在运行的容器:

    使用 docker ps 命令查看当前正在运行的容器:

    docker ps
    
  4. 停止容器:

    使用 docker stop 命令停止正在运行的容器:

    docker stop <container_id>
    
  5. 删除容器:

    使用 docker rm 命令删除已停止的容器:

    docker rm <container_id>
    
四、使用 Dockerfile 构建自定义镜像
  1. 创建 Dockerfile:

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

    # 使用官方的 Node.js 镜像作为基础镜像
    FROM node:14# 设置工作目录
    WORKDIR /app# 复制 package.json 和 package-lock.json
    COPY package*.json ./# 安装项目依赖
    RUN npm install# 复制项目文件
    COPY . .# 暴露应用程序端口
    EXPOSE 8080# 运行应用程序
    CMD ["node", "app.js"]
    
  2. 构建镜像:

    使用 docker build 命令构建自定义镜像:

    docker build -t my-node-app .
    
  3. 运行容器:

    使用构建的镜像运行容器:

    docker run -p 8080:8080 my-node-app
    
五、实际应用示例:部署一个简单的 Web 应用

以下是如何使用 Docker 部署一个简单的 Node.js Web 应用的示例:

  1. 创建项目目录并初始化项目:

    mkdir my-node-app
    cd my-node-app
    npm init -y
    
  2. 安装 Express 框架:

    npm install express
    
  3. 创建应用程序文件 app.js

    const express = require('express');
    const app = express();
    const port = 8080;app.get('/', (req, res) => {res.send('Hello, Docker!');
    });app.listen(port, () => {console.log(`App running at http://localhost:${port}`);
    });
    
  4. 创建 Dockerfile(如前文所示)并构建镜像:

    docker build -t my-node-app .
    
  5. 运行容器:

    docker run -p 8080:8080 my-node-app
    
  6. 访问应用程序:

    打开浏览器并访问 http://localhost:8080,你将看到 “Hello, Docker!” 的消息。

总结

通过本文,你已经了解了 Docker 的基本概念、安装方法以及如何创建和运行容器。你还学习了如何使用 Dockerfile 构建自定义镜像,并通过实际示例了解了如何使用 Docker 部署一个简单的 Web 应用。希望这篇入门指南对你理解和使用 Docker 有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/47414.shtml

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

相关文章

Python、Rust与AI的未来展望

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

【关于PHP性能优化,内存优化,日志工具等问题处理】

目录 PHP 性能优化&#xff1a; 如何优化 PHP 代码以提高性能&#xff1f; 通用优化策略&#xff1a; 框架特定优化&#xff1a; 性能优化最佳实践&#xff1a; 描述一下你使用过的 PHP 性能分析工具。 检测内存泄漏的方法 使用工具检测内存泄漏 常见内存泄漏场景及解决…

FastAdmin: 一款基于ThinkPHP+Bootstrap的极速后台开发框架(Gitee最有价值开源项目)

欢迎加入我们前端技术学习交流群&#xff0c;关注“前端组件开发”公众号&#xff0c;私信可申请入群 摘要&#xff1a; 随着Web技术的快速发展&#xff0c;后台管理系统的开发效率与灵活性成为了项目成功的关键。FastAdmin作为一款基于ThinkPHP和Bootstrap的开源后台框架&…

基于 Vue 3 和 Element Plus 构建图书管理系统

基于 Vue 3 和 Element Plus 构建图书管理系统 本文将介绍如何使用 Vue 3 和 Element Plus 构建一个简单的图书管理系统。这个系统将包括以下功能&#xff1a; 添加新书显示图书列表分页显示图书删除图书 相关链接 接口地址 elementplus中文地址 项目结构 我们的项目结构…

Langchain[4]:Langchain 0.2革命性突破:结合工具调用与结构化数据处理、@Chain修饰符使用,解决LLM输出难题,提升AI效能

Langchain[4]:Langchain 0.2革命性突破:结合工具调用与结构化数据处理,解决LLM输出难题,提升AI效能 1.工具调用 大型语言模型 (LLM) 可以通过工具调用功能与外部数据源交互。工具调用是一种强大的技术,允许开发人员构建复杂的应用程序,这些应用程序可以利用 LLM 访问、交…

websocket-react使用

问题 在一个应用中&#xff0c;如果需要在不同的组件之间共享同一个WebSocket连接&#xff0c;可以采用多种方法来实现。 比如&#xff1a;单例模式、全局变量、react context React上下文&#xff08;React Context&#xff09; 如果你使用的是React&#xff0c;可以使用Re…

C++ | Leetcode C++题解之第239题滑动窗口最大值

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> maxSlidingWindow(vector<int>& nums, int k) {int n nums.size();vector<int> prefixMax(n), suffixMax(n);for (int i 0; i < n; i) {if (i % k 0) {prefixMax[i] num…

Writing Bazel rules: data and runfiles

Bazel has a neat feature that can simplify a lot of work with tests and executables: the ability to make data files available at run-time using data attributes. You may have seen these in rules like this:Bazel 有一个巧妙的功能&#xff0c;可以简化测试和可执…

简单实用的企业舆情安全解决方案

前言&#xff1a;企业舆情安全重要吗&#xff1f;其实很重要&#xff0c;尤其面对负面新闻&#xff0c;主动处理和应对&#xff0c;可以掌握主动权&#xff0c;避免股价下跌等&#xff0c;那么如何做使用简单实用的企业舆情解决方案呢&#xff1f; 背景 好了&#xff0c;提取词…

CSS技巧专栏:一日一例 7 - 纯CSS实现炫光边框按钮特效

CSS技巧专栏&#xff1a;一日一例 7 - 纯CSS实现炫光边框按钮特效 本例效果图 案例分析 相信你可能已经在网络见过类似这样的流光的按钮&#xff0c;在羡慕别人做的按钮这么酷的时候&#xff0c;你有没有扒一下它的源代码的冲动&#xff1f;或者你当时有点冲动&#xff0c;却…

【PostgreSQL】PostgreSQL简史

博主介绍&#xff1a;✌全网粉丝20W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…

基于python的百度资讯爬虫的设计与实现

研究背景 随着互联网和信息技术的飞速发展&#xff0c;网络已经成为人们获取信息的主要来源之一。特别是搜索引擎&#xff0c;作为信息检索的核心工具&#xff0c;极大地改变了人们获取信息的方式。其中&#xff0c;百度作为中国最受欢迎的搜索引擎之一&#xff0c;其新闻搜索…

开发扫地机器人系统时无法兼容手机解决方案

在开发扫地机器人系统时&#xff0c;遇到无法兼容手机的问题&#xff0c;可以从以下几个方面寻求解决方案&#xff1a; 一、了解兼容性问题根源 ① 操作系统差异&#xff1a;不同手机可能运行不同的操作系统&#xff08;如iOS、Android&#xff09;&#xff0c;且即使是同一操…

leetcode简单题27 N.119 杨辉三角II rust描述

// 直接生成杨辉三角当前行 pub fn get_row(row_index: i32) -> Vec<i32> {let mut row vec![1; (row_index 1) as usize];for i in 1..row_index as usize {for j in (1..i).rev() {row[j] row[j] row[j - 1];}}row } // 空间优化的方法 pub fn get_row2(row_ind…

Java中的final关键字详解

Java中的final关键字详解 大家好&#xff0c;我是微赚淘客系统3.0的小编&#xff0c;是个冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 1. final关键字的基本用法 在Java中&#xff0c;final关键字可以用来修饰类、方法和变量&#xff0c;具有不同的含义和作用…

【QT】label适应图片(QImage)大小;图片适应label大小

目录 0.简介 1.详细代码 1&#xff09;label适应img大小 2&#xff09;img适应label大小 0.简介 一个小demo &#xff0c;想在QLabel中放一张QImage的图片&#xff0c;我有一张图片叫【bird.jpg】&#xff0c;是提前放在资源文件中的&#xff0c;直接显示在label上后&#…

【机器学习入门】拥抱人工智能,从机器学习开始

拥抱人工智能&#xff0c;从机器学习开始 目录&#xff1a; 1. 机器学习&#xff1a;一种实现人工智能的方法 2. 机器学习算法&#xff1a;是使计算机具有智能的关键 3. Anaconda&#xff1a;初学Python、入门机器学习的首选 4. 总结 转载链接&#xff1a; 文章-阿里云开发者社…

【LeetCode:试题 16.06. 最小差 + 双指针 + 防止整型溢出】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

ELK企业级日志分析

目 录 一、ELK简介 1.1 elasticsearch简介 1.2 logstash简介 1.3 kibana简介 1.4 ELK的好处 1.5 ELK的工作原理 二、部署ELK 2.1 部署elasticsearch(集群) 2.1.1 修改配置文件 2.1.2 修改系统参数 2.1.2.1 修改systemmd服务管理器 2.1.2.2 性能调优参数 2.1.2.3 …

Python编程工具PyCharm和Jupyter Notebook的使用差异

在编写Python程序时需要用到相应的编程工具&#xff0c;PyCharm和Jupyter Notebook是最常用2款软件。 PyCharm是很强大的综合编程软件&#xff0c;代码提示、代码自动补全、语法检验、文本彩色显示等对于新手来说实在太方便了&#xff0c;但在做数据分析时发现不太方便&#xf…