如何在 Ubuntu 上安装和配置 Docker

DockerBeginner
立即练习

简介

Dockerfile 是构建 Docker 镜像的基础,理解 EntrypointCmd 命令对于有效地配置和运行容器至关重要。本教程将深入探讨这两个命令之间的差异、它们的用例以及将它们结合起来以实现最佳容器设置和部署的最佳实践。

Docker 基础

Docker 简介

Docker 是一项强大的容器化技术,它彻底改变了软件开发和部署的方式。作为一个开源平台,Docker 使开发者能够在不同的计算环境中一致地打包、分发和运行应用程序。

容器化的核心概念

容器化是全机器虚拟化的轻量级替代方案,它允许应用程序在隔离的环境中运行。Docker 使用容器技术来创建可移植且高效的软件部署解决方案。

graph TD
    A[应用程序代码] --> B[Docker 容器]
    B --> C[一致的部署]
    B --> D[隔离的环境]

Docker 的关键组件

组件 描述 功能
Docker 引擎 核心运行时 管理容器的生命周期
Docker 镜像 轻量级模板 定义容器的配置
Docker 容器 可运行的实例 执行应用程序

在 Ubuntu 22.04 上安装

## 更新软件包索引
sudo apt update

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

## 添加 Docker 的官方 GPG 密钥
curl -fsSL | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

## 设置 Docker 仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg]  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

## 安装 Docker 引擎
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

基本的 Docker 命令

## 检查 Docker 版本
docker --version

## 从 Docker Hub 拉取镜像
docker pull ubuntu:latest

## 列出本地镜像
docker images

## 运行容器
docker run -it ubuntu:latest /bin/bash

容器生命周期管理

Docker 提供了全面的工具来管理容器的生命周期,包括创建、执行、停止和删除。使用简单的命令就可以轻松地启动、暂停和终止容器。

性能和效率

与传统虚拟化相比,容器具有显著优势:

  • 资源开销极小
  • 启动速度快
  • 跨环境部署一致
  • 资源利用高效

精通 Dockerfile

理解 Dockerfile

Dockerfile 是一个文本文件,其中包含用于构建 Docker 镜像的一系列指令。它定义了创建一致且可重现的容器所需的环境、依赖项和配置。

graph LR
    A[Dockerfile] --> B[Docker 构建]
    B --> C[Docker 镜像]
    C --> D[Docker 容器]

重要的 Dockerfile 命令

命令 用途 示例
FROM 选择基础镜像 FROM ubuntu:22.04
RUN 执行 shell 命令 RUN apt-get update
COPY 将文件复制到镜像中 COPY app/ /application
WORKDIR 设置工作目录 WORKDIR /application
ENV 设置环境变量 ENV APP_VERSION=1.0
EXPOSE 定义容器端口 EXPOSE 8080
CMD 默认容器命令 CMD ["python", "app.py"]

用于 Python 应用程序的示例 Dockerfile

## 基础镜像
FROM python:3.9-slim

## 设置工作目录
WORKDIR /application

## 复制项目文件
COPY. /application

## 安装依赖项
RUN pip install --no-cache-dir -r requirements.txt

## 暴露应用程序端口
EXPOSE 5000

## 运行应用程序
CMD ["python", "app.py"]

构建 Docker 镜像

## 使用标签构建镜像
docker build -t myapp:v1.

## 列出创建的镜像
docker images

## 检查镜像详细信息
docker inspect myapp:v1

多阶段构建策略

## 构建阶段
FROM maven:3.8.1-openjdk-11 AS build
WORKDIR /app
COPY pom.xml.
COPY src./src
RUN mvn package

## 运行时阶段
FROM openjdk:11-jre-slim
COPY --from=build /app/target/app.jar /application.jar
ENTRYPOINT ["java", "-jar", "/application.jar"]

最佳实践

  • 尽量减少镜像层
  • 使用特定的镜像标签
  • 利用构建缓存
  • 删除不必要的文件
  • 避免安装不必要的软件包

Docker 运行时配置

容器执行参数

Docker 提供了丰富的配置选项来控制容器的运行时行为,从而实现对资源分配、网络和执行环境的精确管理。

graph LR
    A[Docker 运行时配置]
    A --> B[资源限制]
    A --> C[网络设置]
    A --> D[卷映射]
    A --> E[环境变量]

运行时配置选项

参数 描述 示例
-m, --memory 内存限制 docker run -m 512m image
--cpus CPU 资源分配 docker run --cpus=2 image
-p, --publish 端口映射 docker run -p 8080:80 image
-v, --volume 卷挂载 docker run -v /host:/container image
--env 环境变量 docker run --env KEY=value image

容器资源管理

## 运行具有 CPU 和内存限制的容器
docker run -d \
  --name webapp \
  --memory=512m \
  --cpus=1.5 \
  --restart=always \
  myapp:latest

网络配置

## 创建自定义网络
docker network create mynetwork

## 在特定网络中运行容器
docker run -d \
  --network mynetwork \
  --network-alias webapp \
  myapp:latest

卷和持久存储

## 创建命名卷
docker volume create appdata

## 将卷挂载到容器
docker run -v appdata:/app/data \
  -d myapp:latest

高级执行策略

## CMD 与 ENTRYPOINT 示例
FROM python:3.9
WORKDIR /app
COPY..
ENTRYPOINT ["python"]
CMD ["app.py"]

运行时参数优化

## 检查容器运行时状态
docker inspect container_name

## 实时资源监控
docker stats container_name

总结

在本全面指南中,我们探讨了 Dockerfile 中的 EntrypointCmd 命令、它们之间的差异,以及如何将它们结合使用以实现最佳的容器配置和部署。通过理解每个命令的作用并遵循最佳实践,你将能够创建出更高效、更可靠的 Docker 镜像,以满足你的应用程序需求。