Docker 是一个开源的应用容器引擎,基于 Go 语言开发。它允许开发者将应用及其依赖打包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。Docker 容器与虚拟机不同,容器不需要包含完整的操作系统,而是共享宿主机的操作系统内核,因此更加轻量级和高效。
镜像是 Docker 容器的基础,它包含了运行应用所需的所有文件和依赖。镜像是一个只读的模板,可以用来创建容器。镜像可以通过 Dockerfile 来构建,也可以从 Docker Hub 等镜像仓库中下载。
容器是镜像的运行实例。容器可以被启动、停止、删除和暂停。每个容器都是独立的,拥有自己的文件系统、网络和进程空间。容器与宿主机共享内核,但拥有自己的用户空间。
仓库是用于存储和分发镜像的地方。Docker Hub 是最常用的公共仓库,用户可以在其中找到大量的官方和社区维护的镜像。用户也可以搭建私有的 Docker 仓库,用于存储和分享自己的镜像。
Dockerfile 是一个文本文件,包含了一系列的指令,用于构建 Docker 镜像。通过 Dockerfile,用户可以定义镜像的构建过程,包括基础镜像的选择、文件的复制、环境变量的设置、命令的执行等。
Docker 支持多种操作系统,包括 Linux、Windows 和 macOS。以下是在 Ubuntu 系统上安装 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 的稳定版仓库:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
更新包列表并安装 Docker:
sudo apt-get update
sudo apt-get install docker-ce
验证 Docker 是否安装成功:
sudo docker --version
安装完成后,可以通过修改 /etc/docker/daemon.json
文件来配置 Docker。例如,可以配置镜像加速器、日志驱动、存储驱动等。
从 Docker Hub 拉取镜像的命令如下:
docker pull <image_name>
例如,拉取 Ubuntu 镜像:
docker pull ubuntu
使用 docker run
命令可以基于镜像创建并启动容器。例如,运行一个 Ubuntu 容器并进入交互式 shell:
docker run -it ubuntu /bin/bash
其中,-i
表示交互式操作,-t
表示分配一个伪终端。
使用 docker ps
命令可以查看正在运行的容器:
docker ps
如果要查看所有容器(包括已停止的),可以添加 -a
选项:
docker ps -a
停止容器的命令如下:
docker stop <container_id>
删除容器的命令如下:
docker rm <container_id>
使用 docker images
命令可以查看本地已有的镜像:
docker images
删除镜像的命令如下:
docker rmi <image_id>
以下是一个简单的 Dockerfile 示例,用于构建一个运行 Python 应用的镜像:
# 使用官方的 Python 镜像作为基础镜像
FROM python:3.8-slim
# 设置工作目录
WORKDIR /app
# 将当前目录下的文件复制到容器的 /app 目录
COPY . /app
# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt
# 暴露端口
EXPOSE 80
# 运行应用
CMD ["python", "app.py"]
在 Dockerfile 所在的目录下,使用以下命令构建镜像:
docker build -t my-python-app .
其中,-t
选项用于指定镜像的名称和标签。
构建完成后,可以使用以下命令运行自定义镜像:
docker run -p 4000:80 my-python-app
其中,-p
选项用于将宿主机的 4000 端口映射到容器的 80 端口。
Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。通过 docker-compose.yml
文件,可以定义应用的服务、网络和卷等配置。
以下是一个简单的 docker-compose.yml
示例,用于运行一个包含 Web 服务和数据库的多容器应用:
version: '3'
services:
web:
image: my-python-app
ports:
- "4000:80"
depends_on:
- db
db:
image: postgres
environment:
POSTGRES_PASSWORD: example
在 docker-compose.yml
所在的目录下,使用以下命令启动应用:
docker-compose up
使用以下命令停止并删除应用:
docker-compose down
Docker 提供了多种网络模式,包括 bridge
、host
、none
等。默认情况下,容器使用 bridge
网络模式,每个容器都有自己的 IP 地址,并且可以通过容器名称进行通信。
Docker 提供了卷(Volume)和绑定挂载(Bind Mount)两种方式来管理容器的持久化数据。卷是 Docker 管理的存储,而绑定挂载则是将宿主机的目录挂载到容器中。
Docker 是一个强大的工具,能够显著简化应用的开发、测试和部署过程。通过本教程,你已经了解了 Docker 的基本概念、安装与配置、基本操作、Dockerfile 的使用、Docker Compose 的使用以及网络与存储的管理。希望这些知识能够帮助你在实际项目中更好地使用 Docker,提升开发效率和应用的可靠性。