容器化平台Docker初识

Docker 是一个容器化平台,可以让你打包、分发和运行应用程序。它的核心思想是通过容器技术,让应用程序在任何环境下都能以一致的方式运行。


通俗易懂的理解

  1. 快餐盒的比喻:

    • 假设你做了一顿饭(开发了一个应用程序),而朋友在另一个城市想吃到完全一样的饭。
    • 传统方式:告诉朋友所需的食材和步骤(在新环境安装依赖和配置)。
    • Docker 的方式:你把饭装进一个快餐盒(容器),朋友收到后直接吃(运行),不需要准备任何材料。
  2. 开发环境的统一:

    • 在你的电脑上运行的代码,可能在别人的电脑或服务器上跑不起来,因为环境不同。
    • Docker 打包了代码和环境配置,确保无论在哪里运行,结果都是一样的。

Docker 的主要使用场景

  1. 开发环境统一: 开发、测试和生产环境保持一致。
  2. 部署简单: 应用程序以容器形式打包,一键部署到任何支持 Docker 的平台。
  3. 快速启动: 容器启动比虚拟机快得多。
  4. 资源隔离: 每个容器都是独立的,互不干扰。

使用 Vue 项目部署来举例

假设我们有一个 Vue 项目,想用 Docker 部署到服务器上。
1. 安装 Docker
  • Linux (以 Ubuntu 为例):

    bash 复制代码
    sudo apt update
    sudo apt install docker.io -y
    sudo systemctl start docker
    sudo systemctl enable docker
  • Windows/Mac
    下载 Docker Desktop,安装并启动。

验证安装:

bash 复制代码
docker --version

2. 准备 Vue 项目
  • 确保 Vue 项目已经构建完成(生成静态文件)。
bash 复制代码
npm run build
  • 构建后会生成一个 dist 目录,里面是要部署的静态文件。

3. 创建 Dockerfile

在项目根目录创建一个名为 Dockerfile 的文件,内容如下:

dockerfile 复制代码
# 使用官方 Nginx 镜像作为基础镜像
FROM nginx:stable-alpine

# 把本地的 dist 文件夹复制到 Nginx 的静态文件目录
COPY dist/ /usr/share/nginx/html

# 暴露端口号 80
EXPOSE 80

# 启动 Nginx
CMD ["nginx", "-g", "daemon off;"]

4. 构建 Docker 镜像

在项目根目录运行以下命令:

bash 复制代码
docker build -t vue-app .

说明:

  • -t vue-app 是给镜像取名字。
  • . 表示当前目录。

5. 启动容器

使用刚创建的镜像运行容器:

bash 复制代码
docker run -d -p 8080:80 --name vue-container vue-app

说明:

  • -d:后台运行。
  • -p 8080:80:将本地 8080 端口映射到容器的 80 端口。
  • --name vue-container:给容器取名。

打开浏览器访问 http://localhost:8080,你应该能看到 Vue 应用。


6. 停止和删除容器

停止运行的容器:

bash 复制代码
docker stop vue-container

删除容器:

bash 复制代码
docker rm vue-container

Docker 使用的完整流程总结

  1. 安装 Docker
  2. 准备应用程序代码(比如构建 Vue 项目)。
  3. 创建 Dockerfile(定义如何构建容器镜像)。
  4. 构建镜像(把应用打包成 Docker 镜像)。
  5. 运行容器(启动应用)。
  6. 管理容器(停止、删除、更新)。

通过 Docker 部署 Vue 项目,你可以快速实现"打包一次,到处运行"的目标,大大简化了部署流程,并提升了开发效率。

相关推荐
勤源科技4 分钟前
全链路智能运维中的实时流处理架构与状态管理技术
运维·架构
tryCbest15 分钟前
Linux使用Docker部署项目后期更新
linux·运维·docker
忧郁的橙子.1 小时前
十六、kubernetes 1.29 之 集群安全机制
安全·容器·kubernetes
早睡冠军候选人2 小时前
Ansible学习----Ansible Playbook
运维·服务器·学习·云原生·容器·ansible
sulikey2 小时前
从实验出发深入理解Linux目录权限:r、w、x分别控制什么?能否进入目录到底由谁决定?
linux·运维·服务器·ubuntu·centos
li3714908904 小时前
nginx报400bad request 请求头过大异常处理
java·运维·nginx
久曲健的测试窝4 小时前
Jenkins Share Library教程 —— 开发入门
运维·servlet·jenkins
三坛海会大神5554 小时前
k8s(六)Pod的资源控制器
云原生·容器·kubernetes
缘的猿4 小时前
Docker 与 K8s 网络模型全解析
docker·容器·kubernetes
游戏开发爱好者84 小时前
FTP 抓包分析实战,命令、被动主动模式要点、FTPS 与 SFTP 区别及真机取证流程
运维·服务器·网络·ios·小程序·uni-app·iphone