Docker知识点

1. Docker 介绍

1.1 Docker 简介

Docker:Docker 是一个开源的应用容器引擎,让开发者可以将应用程序和所有依赖打包到一个轻量级、可移植的容器中,然后在任何支持 Docker 的环境中运行。

在传统的项目开发中,开发者经常遇到环境不一致的问题,比如代码在本地开发环境运行正常,但在测试或生产环境却出现各种错误,原因可能是操作系统版本、依赖库版本或配置差异。此外,传统部署方式需要手动安装和配置各种软件环境,过程繁琐且容易出错,不同服务器之间的环境也难以保持一致。

Docker 核心概念

Docker 是一种容器化技术,允许将应用程序及其依赖打包到一个轻量级、可移植的容器中。容器在隔离的环境中运行,确保一致性。

镜像与容器:镜像是只读模板,包含运行应用程序所需的所有文件和配置。容器是镜像的运行实例,具有可写层。

Dockerfile:用于定义镜像构建步骤的脚本文件。通过 docker build 命令执行。

Docker 常用命令

运行容器:

bash 复制代码
docker run -d --name my_container nginx

查看运行中的容器:

bash 复制代码
docker ps

停止容器:

bash 复制代码
docker stop my_container

删除容器:

bash 复制代码
docker rm my_container

构建镜像:

bash 复制代码
docker build -t my_image .

推送镜像到仓库:

bash 复制代码
docker push my_image

Docker 网络与存储

网络模式:

  • bridge:默认模式,容器通过虚拟网络桥接通信。
  • host:容器共享主机网络栈。
  • none:无网络配置。

数据卷:持久化存储数据的方式,独立于容器生命周期。

bash 复制代码
docker volume create my_volume
docker run -v my_volume:/data my_image

Docker Compose

用于定义和运行多容器应用程序的工具。通过 docker-compose.yml 文件配置服务。

示例:

yaml 复制代码
version: '3'
services:
  web:
    image: nginx
    ports:
      - "80:80"
  db:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: password

启动服务:

bash 复制代码
docker-compose up -d

Docker 安全实践

最小化镜像:使用多阶段构建减少镜像大小和攻击面。

非 root 用户运行:在 Dockerfile 中指定非 root 用户以提高安全性。

dockerfile 复制代码
FROM alpine
RUN adduser -D myuser
USER myuser

定期更新镜像:确保基础镜像和依赖库保持最新。

常见面试问题

Q: Docker 与虚拟机的区别?

A: Docker 容器共享主机操作系统内核,启动更快,资源占用更少。虚拟机需要完整的操作系统,资源消耗更大。

Q: 如何查看容器日志?

A: 使用 docker logs <container_id> 命令。

Q: 如何进入运行中的容器?

A: 使用 docker exec -it <container_id> /bin/bash 命令。