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
命令。