Docker 简介
Docker 是一个开源的应用容器引擎,旨在解决“在我机器上能运行”的经典问题。它允许开发者将应用程序及其所有依赖项打包到一个轻量级、可移植的容器中。这种技术不仅实现了应用环境的标准化,还通过沙箱机制确保了容器间的完全隔离,从而简化了从开发到生产的整个部署流程。

Docker 的核心优势
- 高度隔离:每个容器拥有独立的文件系统、网络栈和资源限制,互不干扰,提供了比传统虚拟机更安全的运行环境。
- 极致轻量:容器共享宿主机的内核,无需运行完整的操作系统,因此占用资源极少,启动速度可达秒级。
- 无缝移植:容器镜像包含了运行所需的一切,确保应用在任何支持 Docker 的平台上表现一致,消除了环境差异带来的风险。
- 版本化管理:镜像支持版本控制,开发者可以像管理代码一样管理应用版本,轻松实现回滚和持续集成。
Docker 关键概念解析
- 镜像 (Image):这是构建容器的只读模板,包含了操作系统基础层、应用程序代码、库文件及配置参数。它是静态的,不可直接运行。
- 容器 (Container):容器是镜像的运行实例。它拥有独立的进程空间,可以被启动、停止、移动和删除。每个容器都是一个独立的运行环境。
- 仓库 (Repository):仓库是集中存储和分发镜像的地方,类似于 GitHub 之于代码。Docker Hub 是最流行的公共仓库,用户可从中拉取或推送镜像。
安装 Docker 环境
在开始容器化之旅前,必须确保本地环境已正确安装 Docker。以下是针对不同主流操作系统的安装指引:

Ubuntu 系统安装指南
sudo apt-get update sudo apt-get install docker.io
macOS 系统安装指南
对于 Mac 用户,最直接的方式是访问 Docker 官方网站,下载适用于 macOS 的 Docker Desktop 安装包。安装完成后,启动应用程序即可在系统托盘看到 Docker 图标,表明服务已正常运行。
Windows 系统安装指南
Windows 用户同样需要访问 Docker 官方网站,下载适用于 Windows 的 Docker Desktop。请注意,Windows 10/11 需启用 WSL 2 后端以获得最佳性能。安装并启动后,Docker 将在后台运行,准备接收容器化任务。
构建首个 Ruby 应用
为了演示容器化的完整流程,我们将创建一个极简的 Ruby 应用程序。该应用将作为后续编写 Dockerfile 和构建镜像的基础素材。
规划应用目录结构
mkdir my_ruby_app cd my_ruby_app
编写核心 Ruby 脚本
编写 Dockerfile
接下来,我们需要为我们的应用编写一个 Dockerfile,该文件包含了构建镜像所需的指令。
// www.javascriptcn.com code example # 使用官方的 Ruby 镜像作为基础镜像 FROM ruby:2.7 # 设置工作目录 WORKDIR /usr/src/app # 复制 Gemfile 和 Gemfile.lock 到工作目录 COPY Gemfile Gemfile.lock ./ # 安装应用依赖 RUN bundle install # 复制应用源码到容器 COPY . . # 指定容器启动时运行的命令 CMD ["./run.sh"]
构建 Docker 镜像
在项目根目录下运行以下命令来构建 Docker 镜像:
docker build -t my_ruby_app .
这将会创建一个名为 my_ruby_app 的 Docker 镜像。
运行 Docker 容器
构建完成后,可以使用以下命令来运行容器:
docker run -p 4567:4567 my_ruby_app
这里的 -p 4567:4567 参数将容器的 4567 端口映射到宿主机的 4567 端口。
推送镜像到 Docker Hub
如果你希望将镜像推送到 Docker Hub 以便共享或备份,你需要先登录 Docker Hub:
docker login
然后,为你的镜像打标签,并推送:
docker tag my_ruby_app your_username/my_ruby_app docker push your_username/my_ruby_app
将 your_username 替换为你在 Docker Hub 上的用户名。
通过以上步骤,你已经成功地将一个简单的 Ruby 应用容器化了。这不仅简化了部署过程,还增强了应用的可移植性和稳定性。
puts "Hello, Docker!"
source 'https://rubygems.org' gem 'sinatra'
#!/bin/bash ruby app.rb
chmod +x run.sh
./run.sh
app.rb
Gemfile
run.sh







