Docker CN:深入理解容器技术

Docker 是一种开源的容器化平台,它允许开发者将应用程序及其依赖打包成一个容器,确保在任何地方都能以相同的方式运行。这一技术在现代软件开发和部署中越来越受到欢迎,尤其是在持续集成和持续部署(CI/CD)流程中发挥了重要作用。

什么是容器?

容器是一种轻量级、可移植和自给自足的软件运行环境。与传统的虚拟机不同,容器共享主机操作系统的内核,但又处于隔离状态。这意味着容器可以快速启动,并且能够高效地使用系统资源。

容器 vs 虚拟机
特性容器虚拟机
启动速度秒级分钟级
系统资源使用轻量级 (几十MB)重度 (几GB)
运行环境共享主机内核各自内核
运维复杂性较低较高

Docker 的基本组件

Docker 主要由以下部分组成:

  1. Docker Engine:Docker 的核心组件,主要用于创建、运行和管理容器。
  2. Docker Image:容器的镜像,包含应用程序及其依赖项的文件系统快照。
  3. Docker Container:运行中的容器实例,是镜像的一个实体化版本。
  4. Docker Hub:一个公共的镜像仓库,可以用来共享和分发 Docker 镜像。

安装 Docker

在开始使用 Docker 之前,首先需要在你的计算机上安装 Docker。以下是在 Ubuntu 上安装 Docker 的步骤:

# 更新包列表
sudo apt update

# 安装依赖包
sudo apt install apt-transport-https ca-certificates curl software-properties-common

# 添加 Docker 的 GPG 密钥
curl -fsSL  | sudo apt-key add -

# 添加 Docker 的官方仓库
sudo add-apt-repository "deb [arch=amd64]  $(lsb_release -cs) stable"

# 再次更新包列表
sudo apt update

# 安装 Docker CE
sudo apt install docker-ce
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.

安装完成后,可以通过以下命令检查 Docker 是否正常工作:

sudo systemctl status docker
  • 1.

如果 Docker 正在运行,可以看到它的状态为 active (running)

创建第一个 Docker 容器

安装和配置完 Docker 后,我们可以开始创建容器了。接下来,我们将使用 Nginx 创建一个简单的 Web 服务器容器。

拉取镜像

首先,我们需要从 Docker Hub 拉取 Nginx 的镜像:

docker pull nginx
  • 1.
启动容器

接下来,我们通过以下命令启动一个 Nginx 容器:

docker run -d -p 80:80 --name mynginx nginx
  • 1.

在这个命令中:

  • -d 表示在后台运行容器。
  • -p 80:80 将主机的 80 端口映射到容器的 80 端口。
  • --name mynginx 为我们的容器指定一个名称。
查看正在运行的容器

可以使用下列命令查看当前正在运行的容器:

docker ps
  • 1.
访问 Web 服务器

完成上述步骤后,你可以在浏览器中输入 http://localhost,你将看到 Nginx 的欢迎页面。

管理 Docker 容器

Docker 提供了一系列命令来管理容器。以下是一些常用的命令:

  • 停止容器
docker stop mynginx
  • 1.
  • 启动容器
docker start mynginx
  • 1.
  • 查看容器日志
docker logs mynginx
  • 1.
  • 删除容器
docker rm mynginx
  • 1.

使用 Dockerfile 构建自定义镜像

除了从 Docker Hub 拉取公共镜像,你也可以通过编写 Dockerfile 来创建自己的镜像。以下是一个简单的 Dockerfile 示例,用于构建一个包含 Node.js 应用的镜像。

# 使用官方 Node.js 镜像作为基础镜像
FROM node:14

# 设置工作目录
WORKDIR /usr/src/app

# 拷贝 package.json 和 package-lock.json
COPY package*.json ./

# 安装依赖
RUN npm install

# 拷贝应用程序源代码
COPY . .

# 暴露端口
EXPOSE 8080

# 启动应用
CMD ["node", "app.js"]
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.

在同一目录下,运行以下命令构建镜像:

docker build -t mynodeapp .
  • 1.

构建完成后,可以像之前一样运行容器:

docker run -d -p 8080:8080 mynodeapp
  • 1.

结语

Docker 为开发者提供了一个便捷的环境,使得应用程序的构建、测试和部署变得更加简单和自动化。掌握 Docker 的基本使用,可以显著提高开发效率和生产力。在未来,Docker 和容器化技术将继续发展,推动现代软件工程的进步。如果你对 Docker 感兴趣,请持续学习,探索更深入的内容!