Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖打包成一个可移植的容器。容器可以在任何安装了 Docker 的环境中运行,确保应用的一致性和可移植性。
容器化技术是一种轻量级的虚拟化技术,用于将应用程序及其依赖项打包到一个独立的运行环境中,称为“容器”。容器化技术的核心思想是通过隔离应用程序的运行环境,确保其在任何支持容器化技术的环境中都能一致运行。
特性 | 容器化 | 虚拟机 |
---|---|---|
隔离性 | 进程隔离,共享宿主机内核 | 完全隔离,每个虚拟机都有独立的内核 |
启动速度 | 快(秒级) | 慢(分钟级) |
资源占用 | 轻量级(MB 级) | 重量级(GB 级) |
性能开销 | 低 | 高 |
适用场景 | 微服务、开发测试、云原生应用 | 高企业级应用、多租户环境 |
Docker 客户端是用户与 Docker 交互的工具。它发送命令到 Docker 服务器(Docker Daemon),并接收服务器的响应。客户端可以是命令行工具(CLI)或其他支持 Docker API 的工具。
功能:
使用场景:
示例命令:
# 查看 Docker 版本信息
docker version
# 列出所有运行中的容器
docker ps
# 运行一个容器
docker run hello-world
Docker 服务器(也称为 Docker 守护进程)是 Docker 的后台服务,负责管理 Docker 对象(如镜像、容器、网络和卷)。它接收来自客户端的请求,并执行相应的操作。
功能:
组件:
工作流程:
示例:
/var/run/docker.sock
)。# 拉取一个镜像
docker pull nginx
# 查看本地镜像
docker images
# 创建并运行一个容器
docker run -d --name my-nginx nginx
# 查看运行中的容器
docker ps
# 停止容器
docker stop my-nginx
# 删除容器
docker rm my-nginx
# 推送镜像到仓库
docker push my-nginx:latest
# 从仓库拉取镜像
docker pull my-nginx:latest
Docker 镜像、容器和仓库的关系可以类比为菜谱、做好的菜和菜谱书:
# 更新包索引
sudo apt-get update
# 安装依赖包
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
# 添加 Docker 的官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 添加 Docker 的 APT 仓库
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# 更新包索引
sudo apt-get update
# 安装 Docker CE
sudo apt-get install docker-ce
# 验证 Docker 是否安装成功
sudo docker run hello-world
可参考另外一篇文章:Docker 基础命令 - 以 Nginx 实战总结
# 查看所有运行中的容器
docker ps
# 查看所有容器(包括停止的)
docker ps -a
# 查看所有镜像
docker images
# 拉取镜像
docker pull <镜像名称>
# 运行容器
docker run -d -p 8080:80 --name my_container nginx
# 进入容器
docker exec -it <容器名称或ID> /bin/bash
# 停止容器
docker stop <容器名称或ID>
# 删除容器
docker rm <容器名称或ID>
# 删除镜像
docker rmi <镜像ID>
# 查看容器日志
docker logs <容器名称或ID>
# 进入容器内部
docker exec -it <容器名称或ID> /bin/bash
Docker 网络是 Docker 提供的一种机制,用于管理容器之间的通信。它通过虚拟网络实现容器之间的连接、隔离和数据传输。Docker 网络的核心目标是确保容器之间能够高效、安全地通信,同时保持隔离性。
docker0
),将容器连接到这个网桥上。每个容器都有一个独立的 IP 地址,并且可以通过这个 IP 地址在同一网络内进行通信。Docker 自定义网络允许用户根据具体需求创建和管理网络环境
# 创建自定义网络
docker network create my_network
# 查看网络
docker network ls
# 查看网络详细信息
docker network inspect my_network
根据上面创建的my_network网络,进行容器互联
# 运行容器并连接到自定义网络
docker run -d --name container1 --network my_network nginx
# 运行另一个容器并连接到同一个网络
docker run -d --name container2 --network my_network nginx
Docker 数据卷是一种用于持久化数据的机制,它允许数据独立于容器的生命周期存在。数据卷可以被一个或多个容器共享,并且可以在容器重启或删除后仍然保留数据。
数据持久化:
与容器解耦:
数据共享:
数据备份与恢复:
数据库持久化:
文件共享:
配置文件管理:
数据备份与恢复:
创建数据卷:
使用 docker volume create
命令创建一个数据卷:
docker volume create myvolume
将数据卷挂载到容器:
在创建容器时,使用 -v
或 --mount
选项将数据卷挂载到容器的指定目录:
docker run -d --name mycontainer -v myvolume:/data myimage
-v myvolume:/data
:将数据卷 myvolume
挂载到容器的 /data
目录。查看数据卷:
使用 docker volume ls
命令查看所有数据卷:
docker volume ls
查看数据卷的详细信息:
使用 docker volume inspect
命令查看数据卷的详细信息:
docker volume inspect myvolume
删除数据卷:
使用 docker volume rm
命令删除数据卷:
docker volume rm myvolume
Dockerfile 是一个文本文件,用于定义如何构建 Docker 镜像。它包含了一系列指令,这些指令告诉 Docker 如何一步步创建镜像。Dockerfile 是自动化构建镜像的核心工具,确保镜像的构建过程可重复、可维护。
Dockerfile 通常包含以下几个部分:
FROM:
FROM [:]
FROM ubuntu:20.04
RUN:
RUN
或 RUN ["executable", "param1", "param2"]
RUN apt-get update && apt-get install -y nginx
COPY:
COPY
COPY . /app
ADD:
ADD
ADD https://example.com/file.tar.gz /app
ENV:
ENV
或 ENV = ...
ENV APP_HOME /app
EXPOSE:
EXPOSE [...]
EXPOSE 80 443
CMD:
CMD ["executable", "param1", "param2"]
或 CMD command param1 param2
CMD ["python", "app.py"]
ENTRYPOINT:
ENTRYPOINT ["executable", "param1", "param2"]
或 ENTRYPOINT command param1 param2
ENTRYPOINT ["nginx", "-g", "daemon off;"]
VOLUME:
VOLUME ["", ...]
VOLUME ["/data"]
WORKDIR:
WORKDIR
WORKDIR /app
LABEL:
LABEL = = ...
LABEL version="1.0" maintainer="[email protected]"
可参考另外一篇文章:Docker Compose 基础知识
Docker Compose 是一个用于定义和管理多容器 Docker 应用程序的工具。它通过一个 YAML 文件(docker-compose.yml
)来配置应用程序的服务、网络和卷,简化了复杂应用程序的部署和管理。
# 下载 Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 验证安装
docker-compose --version
docker-compose.yml
文件:version: '3'
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
db:
image: postgres:latest
environment:
POSTGRES_PASSWORD: example
docker-compose up -d
docker-compose down
Docker 私有仓库是一个用于存储和管理 Docker 镜像的内部平台。与公共仓库(如 Docker Hub)不同,私有仓库提供了更高级别的安全性和定制化选项,适用于企业内部或敏感项目的镜像管理
# 下载 Nexus
wget https://sonatype.com/download/nexus
# 安装 Nexus
sudo apt-get install nexus
# 启动 Nexus
sudo systemctl start nexus
# 登录 Nexus
docker login nexus.example.com
# 推送镜像
docker push nexus.example.com/myapp
# 拉取镜像
docker pull nexus.example.com/myapp
Docker 是一个强大的工具,可以简化应用的部署和管理。