【学习记录】Docker入门指南

本文介绍了Docker的基础概念,如什么是Docker、容器与虚拟机的区别,以及Docker的特点。还详细讲解了Dockerfile的使用、DockerHub的作用、常见指令和可持久化容器(包括卷和绑定挂载)的应用。通过实例演示如何使用Docker构建和运行Node.js应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

漂亮姐姐

话说,默子已经很久没有写技术博客了,今天写一篇关于Docker的入门知识指南作为练手吧。

同时自己也再回忆一下一些基础的知识

部分内容由 ChatGPT 辅助生成,默子审核添加

什么是Docker

Docker是一种容器化平台,用于轻松打包、分发和运行应用程序。

它基于容器技术,可以将应用程序及其依赖项封装到一个容器中,实现了快速部署和跨平台的优势。

这里的容器可以简单理解为一个特别轻量化级的虚拟机,并且是配置好了各种应用服务和环境变量的。

容器

Docker的特点以及与虚拟机的不同点

Docker相对于传统虚拟机有以下特点:

  • 轻量级:容器共享主机的内核,因此比虚拟机更轻量。
  • 快速启动:容器几乎可以瞬间启动,而虚拟机通常需要较长的启动时间。(几秒vs几分钟)
  • 高度可移植性:容器可以在不同的环境中运行,保持一致性。
  • 资源有效利用:容器可以更有效地利用系统资源。

docker-containerized-and-vm-transparent-bg.png

基本Docker知识

什么是容器

容器是一个独立运行的应用程序包,包括应用程序和其所有依赖项,例如库、环境变量等。

容器是Docker的核心概念,它们可以在不同的环境中进行部署,而不会影响其运行。

什么是镜像

镜像是容器的模板,包含了用于创建容器的文件系统、环境配置和应用程序代码。镜像是只读的,用于创建容器实例。

DockerHub是什么

DockerHub是一个Docker的镜像仓库,可以用于存储和分享Docker镜像。它是一个社区驱动的平台,包含了大量的公共镜像供使用。

常见Docker指令

Docker提供了丰富的命令行工具,用于管理容器和镜像。一些常见的Docker指令包括docker rundocker builddocker pull等。

指令描述示例
docker pull从DockerHub下载镜像到本地docker pull ubuntu:20.04
docker build使用Dockerfile构建自定义镜像docker build -t my-custom-image .
docker run运行容器实例docker run -d -p 8080:80 nginx
docker stop停止运行中的容器docker stop container_id
docker ps显示运行中的容器列表docker ps
docker images列出本地镜像列表docker images
docker exec在运行中的容器中执行命令docker exec -it container_id /bin/bash
docker rm删除容器docker rm container_id
docker rmi删除镜像docker rmi image_id
docker-compose up使用Docker Compose启动多个容器服务docker-compose up -d

Dockerfile详解

Dockerfile是一个文本文件,包含了用于构建Docker镜像的指令。

它可以定义基础镜像、安装依赖、配置环境等,是自动化构建镜像的关键。

可以理解为是一个 定义环境配置流水线 的工具

比如我要制作一个Ubuntu20.04环境下的Python环境,那就应该编写这样的Dockerfile

# 使用Ubuntu 20.04作为基础镜像
FROM ubuntu:20.04
# 安装Python 3和pip
RUN apt-get update && apt-get install -y python3 python3-pip
# 将工作目录设置为/app
WORKDIR /app
# 将当前目录下的所有文件复制到工作目录中
COPY . /app
# 使用pip安装应用程序依赖
RUN pip3 install -r requirements.txt
# 暴露应用程序的端口
EXPOSE 8080
# 定义启动命令
CMD ["python3", "app.py"]

Dockerfile中的关键字以及它们的详细解释和用法:

关键字解释和用法
FROM用于指定基础镜像,即构建新镜像的起点。语法通常为 FROM image[:tag],可以使用官方或自定义的镜像。示例:FROM ubuntu:20.04 表示使用Ubuntu 20.04作为基础镜像。
RUN用于在镜像中执行命令,通常用于安装软件包、更新包列表、配置环境等。语法通常为 RUN command,可以在Dockerfile中包含多个RUN指令。示例:RUN apt-get update && apt-get install -y python3 用于更新包列表并安装Python 3。
WORKDIR用于设置工作目录,定义在镜像中执行命令的默认目录。语法通常为 WORKDIR /path/to/directory。示例:WORKDIR /app 将工作目录设置为/app。
COPY用于将文件或目录从主机复制到镜像中的指定目录。语法通常为 COPY source destination,可以复制多个文件或目录。示例:COPY . /app 将当前目录下的所有文件复制到工作目录/app。
EXPOSE用于指定容器要监听的端口号,但不会实际映射端口到主机。语法通常为 EXPOSE port,可以指定多个端口。示例:EXPOSE 8080 表示容器将监听8080端口。
CMD用于定义容器启动后要执行的默认命令,通常是应用程序的入口点。语法可以为CMD [“command”, “arg1”, “arg2”]或CMD command arg1 arg2。示例:CMD ["python3", "app.py"] 定义了容器启动时要运行的Python应用程序。

更多的关键字可以从这里查到 Dockerfile reference

可持久化容器

可持久化容器是指可以保存状态和数据的Docker容器,通常使用卷(Volume)或绑定挂载(Bind Mounts)来实现数据持久性。

可持久化容器是Docker中的一个关键概念,它们允许容器在停止或删除后保留其状态和数据,以便随后的使用。

share-volume-docker.webp

  1. 卷(Volume):卷是Docker中用于持久化数据的一种机制。它们是Docker主机上的目录或文件,可以被容器挂载(mount)到容器的特定路径上。卷的数据在容器删除后仍然存在,并且可以与其他容器共享。卷的创建和管理可以通过Docker命令行或Docker Compose配置文件进行。

    示例创建卷的Docker命令:

    docker volume create mydata
    

    示例将卷挂载到容器的路径:

    docker run -d -v mydata:/app/data my-container
    
  2. 绑定挂载(Bind Mounts):绑定挂载允许将主机上的目录或文件直接挂载到容器中,从而实现数据的持久化。绑定挂载通常用于开发和测试环境,可以方便地将本地文件与容器共享。

    示例使用绑定挂载的Docker命令:

    docker run -d -v /host/path:/container/path my-container
    

0_vQuwTRS1f57iLEAr.png

可持久化容器对于需要持久化数据的应用程序非常重要,例如数据库容器、文件存储容器等。

它们确保数据在容器生命周期内得以保留,并且可以被多个容器或主机访问。

一个案例实践

在学习Docker时,可以尝试创建一个简单的Docker容器,例如运行一个Web应用程序或数据库,以加深对Docker的理解。

比如,我们可以尝试创建一个运行Node.js Web应用程序的Docker容器。

Node-JS-File-Upload_22138e92f8-png.png

  1. 编写Node.js应用程序:首先,您可以编写一个简单的Node.js Web应用程序。

以下是一个示例的Node.js应用程序代码,将它保存为app.js文件:

const http = require('http');

const server = http.createServer((req, res) => {
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end('你好,欢迎来到默子的博客\n');
});

const port = 3000;
server.listen(port, () => {
    console.log(`Server running at http://localhost:${port}/`);
});
  1. 创建Dockerfile:接下来,创建一个名为Dockerfile的文件,用于构建Docker镜像。以下是一个简单的Dockerfile示例:
# 使用Node.js 14作为基础镜像
FROM node:14

# 将工作目录设置为/app
WORKDIR /app

# 复制应用程序文件到工作目录
COPY app.js .

# 安装Node.js应用程序依赖
RUN npm install

# 暴露应用程序的端口
EXPOSE 3000

# 定义启动命令
CMD ["node", "app.js"]
  1. 构建Docker镜像:在Dockerfile所在的目录中,打开终端并运行以下命令以构建镜像。确保已经安装了Docker。
docker build -t my-node-app .

这将根据Dockerfile中的指令构建一个名为my-node-app的Docker镜像。

  1. 运行Docker容器:运行以下命令以在Docker容器中运行您的Node.js应用程序:
docker run -d -p 3000:3000 my-node-app

这将在后台运行一个容器,并将主机的端口3000映射到容器的端口3000。

  1. 访问Web应用程序:在浏览器中访问http://localhost:3000

参考资料

以下是一些有关Docker的参考资料,可以帮助大家更深入地学习:

原博客传送门:【学习记录】Docker入门指南

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

默子要早睡.Histone

请默子喝杯蜜雪

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值