Docker快速入门

Docker快速入门

前言

Docker是什么?

Docker是一种开源的容器化平台,用于构建、部署和运行应用程序。它通过使用容器来实现应用程序的隔离和封装,使得应用程序可以在不同的计算环境中以一致的方式运行。

容器是一种轻量级的虚拟化技术,它可以将应用程序及其所有依赖项打包到一个独立的、可移植的容器中。这个容器包含了应用程序所需的所有文件、库、环境变量和配置信息。与传统的虚拟机不同,容器不需要运行完整的操作系统,而是共享主机操作系统的内核,因此它们更加轻量级和高效。

为什么要用Docker?

Docker提供了一个简单而强大的命令行工具和API,使得用户可以轻松地创建、启动、停止和管理容器。它还提供了一个容器镜像的机制,允许用户将容器打包成可重复部署的组件。这些容器镜像可以通过Docker Hub等容器注册中心进行共享和分发,从而加速开发和部署过程。

使用Docker Hub上别人的镜像

要使用Docker Hub上别人的镜像,可以按照以下步骤进行操作:

  1. 在Docker Hub上搜索所需的镜像。可以在Docker Hub网站(https://hub.docker.com)上使用搜索框来查找特定的镜像,也可以使用docker search命令在命令行中进行搜索。
  2. 选择合适的镜像。浏览搜索结果并找到满足你需求的镜像。通常,镜像名称和标签(tag)的组合用于标识特定版本的镜像。选择适当的标签,可以是最新版本或特定的版本号。
  3. 下载镜像。使用docker pull命令下载所需的镜像。
  4. 运行容器。使用docker run命令来创建并运行一个容器实例。指定下载的镜像名称和其他必要的选项。
  5. 根据需要进行配置。根据你的应用程序需求,可以使用适当的docker run命令选项来配置容器。

docker rundocker run命令用于创建并运行一个新的Docker容器。它的主要作用是在容器中启动一个新的应用程序实例。当你运行docker run命令时,Docker会执行以下操作:

  • 创建一个新的容器实例。
  • 基于指定的镜像构建容器的文件系统。
  • 在容器内运行指定的命令或应用程序。

例如,以下命令将创建一个名为my-container的新容器,并在其中运行my-image镜像的默认命令:

docker run --name my-container my-image

使用docker exec命令,你可以在运行中的Docker容器内部执行任意的命令。

当你运行docker exec命令时,Docker会执行以下操作:

  • 在指定的容器内部执行指定的命令。
  • 可以使用交互模式(-it选项)或后台模式(默认)运行命令。
  • 不会创建新的容器实例,而是在已存在的容器中添加新的执行环境。

如果你有一个名为my-container的容器,并且想要在其中执行ls命令来列出容器内的文件和目录,你可以运行以下命令:

docker exec my-container ls

你还可以使用-it选项以交互模式运行命令,就像在终端中一样。例如:

docker exec -it my-container bash

这将在my-container容器内部启动一个交互式的Bash会话。

举个栗子

我要用hexo来部署博客,但是我懒得配置环境,那么我就可以选择Docker免去安装环节。

docker pull spurin/hexo

https://hub.docker.com/r/spurin/hexo

这是一个别人已经发布的docker image,我把它拉下来。

使用docker create命令创建Docker容器:

docker create --name=hexo-blog\
-e HEXO_SERVER_PORT=4000 \
-e GIT_USER="Your Name" \
-e GIT_EMAIL="your.email@domain.tld" \
-v /blog/domain.com:/app \
-p 4000:4000 \
spurin/hex

其中,

--name=hexo-blog:通过--name选项指定了容器的名称。容器名称用于唯一标识容器实例。

-p 4000:4000:通过-p选项将主机的端口4000映射到容器的端口4000。这样,可以通过主机的4000端口访问容器内运行的应用程序。

-v /blog/domain.com:/app:通过-v选项将主机上的目录/blog/domain.com挂载到容器内的/app目录。这意味着主机上的/blog/domain.com目录中的文件将在容器内的/app目录中可见和可访问。

-e HEXO_SERVER_PORT=4000:通过-e选项设置了环境变量HEXO_SERVER_PORT的值为4000。这个环境变量能在容器内的应用程序中使用。

Docker,启动!!!!:

docker start hexo-blog

image-20230929224627495

可以看到启动后的docker里面有了个linux一样的目录,app目录下把本地的文件夹挂载进了容器里面。

可以通过docker正常使用hexo了。

image-20230929224928569

进入

docker exec -it hexo-blog bash

生成

docker exec -it hexo-blog hexo g 
  • docker exec:这是Docker命令的一部分,用于在运行中的容器内部执行命令。
  • -it:这是docker exec命令的选项之一,用于以交互模式运行命令并分配一个伪终端(pseudo-TTY)。这使得在容器内部执行命令时可以进行交互式的输入和输出。
  • hexo-blog:这是容器的名称或容器ID。通过指定容器名称或ID,docker exec命令可以确定要在哪个容器内部执行命令。
  • hexo g:这是要在容器内部执行的命令。在这个例子中,hexo g是一个命令行命令,它将在容器内部运行Hexo命令行工具的generate命令(简写为g)。这个命令用于生成静态网站内容。

Docker的常用命令

  1. 镜像相关命令:
    • docker images:列出本地所有的镜像。
    • docker pull <镜像名>:从容器注册中心(如Docker Hub)下载指定的镜像。
    • docker push <镜像名>:将本地的镜像推送到容器注册中心。
    • docker rmi <镜像名>:删除指定的镜像。
  2. 容器相关命令:
    • docker ps:列出当前正在运行的容器。
    • docker ps -a:列出所有的容器,包括停止运行的容器。
    • docker run <镜像名>:创建并运行一个新容器。
    • docker start <容器ID或名称>:启动一个已经创建的容器。
    • docker stop <容器ID或名称>:停止一个正在运行的容器。
    • docker rm <容器ID或名称>:删除一个已经停止的容器。
    • docker exec -it <容器ID或名称> <命令>:在运行的容器中执行指定命令。
  3. 日志和查看命令:
    • docker logs <容器ID或名称>:查看容器的日志输出。
    • docker inspect <容器ID或名称>:查看容器的详细信息,包括IP地址、端口映射等。
    • docker stats:实时显示运行容器的资源使用情况。
  4. 构建和管理镜像命令:
    • docker build -t <镜像名> <Dockerfile路径>:根据Dockerfile构建一个新的镜像。
    • docker tag <现有镜像名> <新镜像名>:为现有镜像添加一个标签。
    • docker commit <容器ID或名称> <新镜像名>:根据容器创建一个新的镜像。

可以使用docker --help命令查看完整的Docker命令列表和帮助信息。

构建Docker

构建Docker镜像的主要步骤是编写一个称为Dockerfile的文本文件,并使用Docker命令来执行构建过程。

下面是一个简单的Docker镜像构建的示例流程:

  1. 创建一个空目录,作为构建上下文(build context)。
  2. 在该目录下创建一个名为Dockerfile的文本文件。
  3. 使用文本编辑器打开Dockerfile文件,并按照以下格式编写构建指令:
# 基础镜像
FROM <基础镜像># 设置工作目录
WORKDIR /app# 复制应用程序文件到容器中
COPY <本地文件路径> <容器目标路径># 安装应用程序依赖
RUN <命令># 暴露容器端口
EXPOSE <端口号># 定义容器启动时执行的命令
CMD <命令>

在上述Dockerfile中,你需要替换以下内容:

  • <基础镜像>:选择适合你应用程序的基础镜像,例如ubuntu:latestnode:14
  • <本地文件路径>:指定本地应用程序文件的路径。这可以是单个文件或整个目录。
  • <容器目标路径>:指定将文件复制到容器中的目标路径。
  • <命令>:在构建过程中需要执行的命令,例如安装软件包、运行脚本等。
  • <端口号>:将容器内的端口映射到主机上的端口,以便访问应用程序。
  1. 保存并关闭Dockerfile文件。
  2. 在终端中,使用cd命令切换到包含Dockerfile的目录。
  3. 执行以下命令来构建Docker镜像:
docker build -t <镜像名> .

在上述命令中,你需要替换<镜像名>为你想要给镜像命名的名称,可以是任何合法的名称。.表示构建上下文的路径,这里指的是当前目录。

  1. Docker将根据Dockerfile中的指令执行构建过程,并下载所需的基础镜像、复制文件、执行命令等。构建过程可能需要一些时间,具体取决于镜像大小和指令复杂性。
  2. 构建完成后,可以使用docker images命令查看已构建的镜像列表,找到刚才构建的镜像。

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

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

相关文章

分布式事务-TCC异常-空回滚

1、空回滚问题&#xff1a; 因为是全局事务&#xff0c;A服务调用服务C的try时服务出现异常服务B因为网络或其他原因还没执行try方法&#xff0c;TCC因为C的try出现异常让所有的服务执行cancel方法&#xff0c;比如B的try是扣减积分 cancel是增加积分&#xff0c;还没扣减就增…

华为乾坤区县教育安全云服务解决方案(1)

华为乾坤区县教育安全云服务解决方案&#xff08;1&#xff09; 课程地址方案背景客户痛点分析区县教育网概述区县教育网业务概述区县教育网业务安全风险分析区县教育网安全运维现状分析区县教育网安全建设痛点分析 安全解决方案功能概述架构概述方案架构设备选型 课程地址 本…

Linux shell 脚本中, $@ 和$# 分别是什么意思

Linux shell 脚本中&#xff0c; 和 和 和# 分别是什么意思&#xff1f; $&#xff1a;表示所有脚本参数的内容 $#:表示返回所有脚本参数的个数。 示例&#xff1a;编写如下shell脚本&#xff0c;保存为test.sh #!/bin/sh echo “number:$#” echo “argume:$” 执行…

特种设备安全监测终端,降低安全隐患风险!

特种设备运行关系到人民生命财产安全&#xff0c;关系到经济健康发展&#xff0c;关系到社会的稳定。有关特种设备的事故基本都发生在使用过程中&#xff0c;因此&#xff0c;使用过程的安全管理是特种设备的管理重点。针对国内特种设备本身存在事故隐患及安装、维修、操作、指…

ElasticSearch - 基于 JavaRestClient 操作索引库和文档

目录 一、RestClient操作索引库 1.1、RestClient是什么&#xff1f; 1.2、JavaRestClient 实现创建、删除索引库 1.2.1、前言 1.2.1、初始化 JavaRestClient 1.2.2、创建索引库 1.2.3、判断索引库是否存在 1.2.4、删除索引库 1.3、JavaRestClient 实现文档的 CRUD 1.3…

ElementUI之首页导航及左侧菜单(模拟实现)

目录 ​编辑 前言 一、mockjs简介 1. 什么是mockjs 2. mockjs的用途 3. 运用mockjs的优势 二、安装与配置mockjs 1. 安装mockjs 2. 引入mockjs 2.1 dev.env.js 2.2 prod.env.js 2.3 main.js 三、mockjs的使用 1. 将资源中的mock文件夹复制到src目录下 2. 点击登…

【Unity Build-In管线的SurfaceShader剖析_PBS光照函数】

Unity Build-In管线的SurfaceShader剖析 在Unity Build-In 管线&#xff08;Universal Render Pipeline&#xff09;新建一个Standard Surface Shader文件里的代码如下&#xff1a;选中"MyPBR.Shader"&#xff0c;在Inspector面板&#xff0c;打开"Show generat…

Zygisk-IL2CppDumper对抗方案

众所周知&#xff0c;Unity引擎中有两种脚本编译器&#xff0c;分别是 Mono 和 IL2CPP 。这两种脚本编译器各有优势&#xff0c;同时也存在一些安全性问题&#xff0c;本文将从游戏安全角度对其进行分析并提供对策。 Mono 是由跨平台的开源.NET 实现&#xff0c;它允许开发者使…

Unity如何实现TreeView

前言 最近有一个需求,需要实现一个TreeView的试图显示,开始我一直觉得这么通用的结构,肯定有现成的UI组件或者插件可以使用,结果,找了好久,都没有找到合适的插件,有两个效果差强人意。 最后在回家的路上突然灵光一闪,想到了一种简单的实现方式,什么插件都不用,仅使用…

《学术小白学习之路12》进阶-基于Python实现中文文本的DTM主题动态模型构建

《学术小白学习之路》基于Python实现中文文本的DTM主题动态模型构建 一、数据选择二、数据预处理三、输入数据ID映射词典构建四、文档加载成构造语料库五、DTM模型构建与结果分析六、结果进行保存七、保存模型一、数据选择 所选取的数据集是论文摘要,作为实验数据集,共计12条…

从1开始的Matlab(快速入门)

MATLAB软件版本&#xff1a;MATLAB R2016b 本文是博主从零开始学Matlab的记录&#xff0c;适合第一次接触Matlab的同学阅读。 一、基础介绍 1.1界面认识 1.2变量命名 注&#xff1a;Matlab中的注释 %% 独占一行的注释&#xff08;有上下横线分割&#xff09; % 普通注释 …

react项目优化

随着项目体积增大&#xff0c;打包的文件体积会越来越大&#xff0c;需要优化&#xff0c;原因无非就是引入的第三方插件比较大导致&#xff0c;下面我们先介绍如何分析各个文件占用体积的大小。 1.webpack-bundle-analyzer插件 如果是webpack作为打包工具的项目可以使用&…

Vivado与Notepad++关联步骤

填写内容 先看"关联步骤"再看此处&#xff1a; 在“editor”栏中填写 Notepad的路径&#xff0c;并加上[file name] -n[line number]&#xff0c; 这里我的 Notepad 的路径为 C:/Program Files (x86)/Notepad/notepad.exe &#xff1b; 故这里我就填上以下内容即可…

xxl-job 2.2之后版本高版本executor未授权访问漏洞

xxl-job 低版本executor未授权访问 低版本的executor未授权访问漏洞是 POST /run HTTP/1.1 Host: your-ip:9999 Accept-Encoding: gzip, deflate Accept: */* Accept-Language: en User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like G…

rabbitMQ死信队列快速编写记录

文章目录 1.介绍1.1 什么是死信队列1.2 死信队列有什么用 2. 如何编码2.1 架构分析2.2 maven坐标2.3 工具类编写2.4 consumer1编写2.5 consumer2编写2.6 producer编写 3.整合springboot3.1 架构图3.2 maven坐标3.3 构建配置类&#xff0c;创建exchange&#xff0c;queue&#x…

【Leetcode】 450. 删除二叉搜索树中的节点

给定一个二叉搜索树的根节点 root 和一个值 key&#xff0c;删除二叉搜索树中的 key 对应的节点&#xff0c;并保证二叉搜索树的性质不变。返回二叉搜索树&#xff08;有可能被更新&#xff09;的根节点的引用。 一般来说&#xff0c;删除节点可分为两个步骤&#xff1a; 首先…

“童”趣迎国庆 安全“童”行-柿铺梁坡社区开展迎国庆活动

“金秋十月好心境&#xff0c;举国欢腾迎国庆。”国庆节来临之际&#xff0c;为进一步加强梁坡社区未成年人爱国主义教育&#xff0c;丰富文化生活&#xff0c;营造热烈喜庆、文明和谐的节日氛围。9月24日上午&#xff0c;樊城区柿铺街道梁坡社区新时代文明实践站联合襄阳市和时…

Spring IOC(控制反转)与DI(依赖注入)

定义 IOC(Inversion of Control)&#xff0c;即控制反转&#xff1a;对象的创建控制权不再由程序来执行&#xff0c;而是交由给Spring容器处理。简单的说程序不需要进行new操作&#xff0c;对象直接由Spring容器自动创建。 DI(Dependency Injection)&#xff0c;即依赖注入&am…

阿木实验室PrometheusV1.1安装+Ubuntu 20.04

1. 安装ros-noetic 2. 安装Mavros包 sudo apt-get install ros-noetic-mavros ros-noetic-mavros-extras3. GeographicLib wget https://raw.githubusercontent.com/mavlink/mavros/master/mavros/scripts/install_geographiclib_datasets.sh这里可以使用代理 &#xff1a;wg…

9.30小任务

消息队列实现进程之间通信方式 实现了父子进程之间的通信 #include <myhead.h>//消息结构体 typedef struct {long msgtype; //消息类型char data[1024]; //消息正文 }Msg_ds;#define SIZE sizeof(Msg_ds)-sizeof(long) //正文大小int main(int arg…