docker:容器技术应用与常用命令

引言

个人基于hexo做了个博客网站,同时基于hugo做了一个导航网站;两者都基于一定的环境依赖,需要配置一定的环境,才能做一些操作;

Hexo博客每次的生成和部署都需要环境、依赖资源和所有博客文件,所以如果我们要换一台电脑写博客,则需要配置相同的环境、依赖和所有博客文件,最简单的方法就是用U盘或者其他存储方式拷贝;或者使用GitHub仓库; 更高级的方法是使用 Docker,它可以更方便地打包整个 Hexo 环境和依赖,以便在任何支持 Docker 的计算机上运行,无需重新配置

迁移的三种方式

当你想在另一台电脑上继续管理和开发Hexo网站时,电脑A为原电脑,电脑B为一台没有任何环境的电脑,以下是三种常用的方法:

  1. 使用U盘拷贝:

    • 在电脑A上将Hexo网站的文件和依赖项复制到U盘中。
    • 将U盘连接到电脑B,将文件和依赖项复制到电脑B上。
    • 在电脑B上安装Git和Node.js。
    • 进入Hexo网站根目录,执行npm install安装依赖项。

    使用U盘拷贝的优点:

    • 便捷:U盘是一种常见的便携式存储设备,可以轻松地将文件和依赖项从一台电脑复制到另一台电脑。
    • 简单:整个过程相对简单,不需要涉及复杂的工具或网络连接。

    使用U盘拷贝的缺点:

    • 繁琐:每次更新网站时都需要手动复制文件和依赖项,如果经常需要更新则会比较繁琐。
    • 可能会存在版本差异:如果电脑A和电脑B的环境配置有所不同,可能会导致一些依赖项无法正常工作。
  1. 使用GitHub仓库:

    • 在电脑A上创建一个GitHub仓库,并将Hexo网站的文件和依赖项推送到该仓库。
    • 在电脑B上克隆该GitHub仓库的代码。
    • 在电脑B上安装Git和Node.js。
    • 进入Hexo网站根目录,执行npm install安装依赖项。
    • 可以在电脑B上继续使用Hexo开发和管理网站了。每次在电脑B上进行更改后,可以将更改推送到GitHub仓库,以便在其他设备上同步。

    使用GitHub仓库的优点:

    • 版本控制:GitHub仓库可以方便地进行版本控制,记录每次提交的更改并提供协作功能。
    • 管理方便:可以在不同设备上同步Hexo网站,并方便地进行代码管理和共享。

    使用GitHub仓库的缺点:

    • 需要网络连接:使用GitHub需要良好的网络连接,如果没有网络连接则无法进行同步和推送更改。
    • 需要学习Git:使用GitHub仓库需要一定程度上的Git使用知识,对于初学者可能需要一些时间来适应。
  1. 使用Docker镜像:

    • 在电脑A上构建一个包含Git和Node.js环境的Docker镜像,并将Hexo网站的文件和依赖项包含在镜像中。
    • 将该Docker镜像导出为tar文件。
    • 将tar文件传输到电脑B,并在电脑B上导入Docker镜像。
    • 在电脑B上运行容器,以启动Hexo网站。
    • 通过访问主机的4000端口在电脑B上访问Hexo网站

    使用Docker镜像的优点:

    • 环境一致性:Docker镜像能够提供相同的开发环境,确保在不同电脑上运行Hexo网站时,所需的环境一致。
    • 可移植性:Docker容器可以在不同机器上轻松部署,减少了配置和安装的麻烦。

    使用Docker镜像的缺点:

    • 需要学习Docker:使用Docker需要一定的学习曲线,对于不熟悉Docker的用户来说,可能需要花费一些时间来学习和理解Docker的使用。
    • 资源消耗:Docker容器需要一定的系统资源,包括内存和存储空间。

这三种方法各有优劣,取决于具体需求和使用场景。如果只需要简单地将Hexo网站文件复制到另一台电脑,使用U盘拷贝可能是最方便的方法。如果需要在多台设备之间同步和版本控制,使用GitHub仓库是一个不错的选择。而如果希望封装整个开发环境并在不同的机器上快速部署,使用Docker镜像可能更适合。

什么是docker?

官方解释

Docker是一种轻量级的容器化技术,可以帮助开发人员更有效地构建、部署和管理应用程序。下面是一些常见的Docker实用例子:

  1. 应用程序打包和交付:Docker可以将应用程序及其所有依赖项打包到一个容器中,形成一个独立、可移植的单元。这使得应用程序在不同的环境中更容易部署和交付,并且能够确保应用程序在不同平台上具有一致的行为。
  2. 快速环境搭建和测试:Docker容器可以帮助快速创建和销毁开发、测试和演示环境。开发人员可以使用包含所需软件和配置的Docker镜像来快速搭建开发环境,而无需手动安装和配置各种依赖项。同时,Docker容器的隔离性确保了环境之间的互相隔离,避免了互相干扰。
  3. 扩展和负载均衡:使用Docker容器,可以很容易地创建多个相同的容器实例,形成一个应用程序的集群。这样可以实现应用程序的水平扩展和负载均衡,以提高性能和可靠性。
  4. 微服务架构:Docker可以配合微服务架构使用,将一个大型应用程序拆分为多个小型的、独立部署的服务。每个服务都可以打包为一个独立的容器,使得每个服务可以独立地进行开发、测试和部署,并且可以根据需要进行扩展和升级。
  5. 持续集成和持续部署:Docker容器可以与持续集成和持续部署工具集成,帮助实现快速、可靠的软件交付流程。容器化的应用程序可以更容易地在不同的环境中进行测试和部署,从而加速软件交付的速度和质量。

通俗化理解

  • dockerfile: image的源代码
  • image: 可执行程序
  • container: 运行起来的进程
  • docker:编译器

在dockerfile中指定需要哪些程序、依赖什么样的配置,之后把dockerfile交给“编译器”docker进行“编译”,也就是docker build命令,生成的可执行程序就是image,之后就可以运行这个image了,这就是docker run命令,image运行起来后就是docker container。

概念:

  1. Docker镜像(Images):理解Docker镜像的概念,它是用于构建容器的模板。镜像包含了运行应用程序所需的一切,如操作系统、库、依赖项等。

  2. Docker容器(Containers):容器是基于Docker镜像创建的运行实例。容器是可执行、可移植且可隔离的,可以在不同的环境中运行。

  3. Dockerfile:Dockerfile是用于构建Docker镜像的文本文件。它描述了一系列指令,用于定义镜像的构建步骤和配置。

  4. 构建镜像:使用Dockerfile和docker build命令构建自定义的Docker镜像。通过指定Dockerfile路径和镜像名称,运行docker build命令来构建镜像。

  5. 运行容器:使用docker run命令来创建和运行容器。通过指定镜像名称和其他选项,比如端口映射、环境变量等,可以创建一个新的容器实例。

  6. 容器生命周期管理:了解常用的Docker命令,如docker start、docker stop、docker restart等,用于启动、停止和重启容器。

  7. 容器网络:学习如何在Docker中配置容器之间的网络连接,以及如何将容器暴露给主机或外部网络。

  8. Docker Compose:学习使用Docker Compose来定义和管理多个容器组成的应用程序。使用YAML文件描述应用程序的不同服务,然后使用docker-compose命令启动、停止和管理这些服务。

  9. 数据卷(Volumes):了解数据卷的概念,它是用于持久化存储容器数据的方法。数据卷可以在容器之间共享和重用,并且对宿主机和其他容器都是可访问的。

  10. Docker Hub:熟悉Docker Hub,它是一个公共的Docker镜像仓库。可以从Docker Hub上获取现有的镜像,也可以上传自己构建的镜像到Docker Hub进行分享和存储。

常用的Docker命令

  1. 构建镜像:

    docker build -t <image_name> <dockerfile_path>
  2. 运行容器:

    docker run -d --name <container_name> <image_name>
  3. 列出正在运行的容器:

    docker ps
  4. 列出所有容器(包括已停止的):

    docker ps -a
  5. 停止容器:

    docker stop <container_name>
  6. 启动已停止的容器:

    docker start <container_name>
  7. 删除容器:

    docker rm <container_name>
  8. 列出镜像:

    docker images
  9. 删除镜像:

    docker rmi <image_name>
  10. 查看容器日志:

    docker logs <container_name>
  11. 进入容器的交互式模式:

    docker exec -it <container_name> bash
  12. 复制文件到/从容器:

    docker cp <local_path> <container_name>:<container_path>
    docker cp <container_name>:<container_path> <local_path>
  13. 构建并启动Compose定义的服务:

    docker-compose up -d
  14. 关闭已启动的Compose服务:

    docker-compose down

docker pull

docker pull命令用于从Docker镜像仓库中拉取(下载)一个镜像到本地。以下是docker pull命令的使用方式:

docker pull <image_name>

其中,<image_name>指定了要拉取的镜像名称,可以是官方仓库中的镜像,也可以是自定义的仓库中的镜像。

例如,要拉取官方的Ubuntu镜像,可以运行以下命令:

docker pull ubuntu

如果要拉取指定版本的镜像,可以在镜像名称后面添加:<tag>,如下所示:

docker pull ubuntu:20.04

这将拉取Ubuntu 20.04版本的镜像。

执行docker pull命令后,Docker将开始下载镜像并保存到本地。你可以使用docker images命令查看已下载的镜像列表。

使用docker pull命令需要联网,并且要确保本地环境可以连接到Docker镜像仓库。如果你使用的是私有仓库,还需要提供相应的身份验证信息。

docker实践

使用Docker将Hexo网站打包为一个镜像

创建一个Dockerfile:在你Hexo网站根目录下创建一个名为Dockerfile的文件,并使用文本编辑器打开它。

  1. 编写Dockerfile:在Dockerfile中,指定基础镜像以及构建和运行过程所需的命令
# 使用Node.js作为基础镜像
FROM node:14-alpine

# 设置工作目录
WORKDIR /app

# 复制网站文件到容器中
COPY . .

# 安装依赖
RUN npm install

# 执行Hexo命令生成静态网站
RUN npx hexo generate

# 暴露Hexo服务的端口
EXPOSE 4000

# 启动Hexo服务
CMD ["npx", "hexo", "server"]

以上Dockerfile使用了Node.js 14的Alpine版本作为基础镜像。它先将当前目录下的所有文件复制到容器的/app目录中,然后安装Hexo所需的依赖、生成静态网站并暴露4000端口,最后启动Hexo服务。

  1. 构建镜像:在终端中进入Dockerfile所在的目录,并执行以下命令来构建镜像:
docker build -t <image_name> .    #使用当前目录作为上下文进行构建

其中,<image_name>镜像起的名称,自定义;这个命令会在当前目录下根据Dockerfile构建一个镜像,并使用指定的名称标记它。

  1. 运行容器:构建完成后,你可以使用以下命令来创建并运行一个容器:
docker run -d --name <container_name> -p 4000:4000 <image_name>

<container_name>为容器起的名称,可以自定义;<image_name>之前构建的镜像的名称。

此命令将创建一个后台运行的容器,将主机的4000端口映射到容器的4000端口,通过主机的4000端口可以访问Hexo网站。

将Docker镜像部署到一台没有任何环境的电脑上运行

  1. 将镜像导出:在已经构建好的Docker镜像所在的电脑上,使用以下命令将镜像导出为一个tar文件:
docker save -o <image_file_name>.tar <image_name>

<image_file_name>导出的镜像文件的名称,自定义;<image_name>是你之前构建的镜像的名称。

  1. 将镜像移动到目标电脑:将导出的镜像文件(tar文件)通过移动、复制等方式传输到目标电脑上。

  2. 导入镜像:在目标电脑上,在终端中进入存放镜像文件的目录,并执行以下命令将镜像导入Docker中:

docker load -i <image_file_name>.tar

其中,<image_file_name>是你导出的镜像文件的名称,可以自定义。这个命令会将镜像文件加载到Docker中,使得你可以在目标电脑上使用该镜像。

  1. 运行容器:在目标电脑上,创建并运行一个容器:
docker run -d --name <container_name> -p 4000:4000 <image_name>

其中,<container_name>是你为容器起的名称,可以自定义;<image_name>是你导入的镜像的名称。

这个命令将创建一个后台运行的容器,将主机的4000端口映射到容器的4000端口,使得你可以通过主机的4000端口访问Hexo网站。Hexo网站便可在目标电脑上成功部署并运行了。

结语

Docker是一项流行的容器化技术,它帮助开发人员和运维团队更轻松地构建、部署和管理应用程序。使用Docker,可以将应用程序及其所有依赖项打包到一个可移植的容器中,然后在任何支持Docker的环境中运行;


   转载规则


《docker:容器技术应用与常用命令》 Bevis23 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
数据结构与算法 数据结构与算法
引言数据结构和算法是计算机科学领域中的两个核心概念,它们在计算机程序设计和问题解决中扮演着至关重要的角色。数据结构与算法之美体现在它们的智慧设计和精巧实现。通过合理选择数据结构,可以提高程序的性能,减少资源消耗。通过巧妙运用算法,可以解决复
2023-08-01
下一篇 
Git:分布式版本控制系统的入门指南 Git:分布式版本控制系统的入门指南
Git是什么?1.git简介Git是一个分布式版本控制系统,用于跟踪文件和项目的变化。它可以帮助开发人员在多人协作的项目中管理代码,记录每一次修改,并且能够方便地回退到任何历史版本。Git还提供了分支管理功能,使得开发人员能够同时处理多个功
2023-07-27
  目录
切换