Docker 的定义
Docker 是一个开源的容器化平台,它允许开发者将应用程序及其依赖项打包成一个可移植的容器。容器是一种轻量级、独立的运行环境,与传统的虚拟机不同,容器共享主机操作系统的内核,通过隔离的文件系统、进程空间和网络接口来运行应用程序。
例如,你可以把一个 Web 应用(包括 Web 服务器、应用代码、数据库连接库等)打包到一个 Docker 容器中。这个容器可以在任何安装了 Docker 的主机上运行,而不用担心环境差异导致应用无法正常运行。
Docker 的核心组件
镜像(Image)
镜像是 Docker 容器的基础,它是一个只读的模板,包含了运行一个容器所需的文件系统、代码、运行时环境、库等所有内容。就像一个光盘,里面有安装软件所需的所有文件。例如,有一个官方的 Ubuntu 镜像,它包含了完整的 Ubuntu 操作系统文件系统和基础软件包。
镜像可以通过继承和分层来构建。比如,你可以在一个基础的 Python 镜像上添加自己的应用代码层,构建出一个包含特定 Python 应用的镜像。
容器(Container)
容器是镜像的运行实例。可以把容器想象成从光盘(镜像)中安装并启动的一个软件。它是一个独立的运行环境,有自己的进程空间、文件系统和网络接口。例如,你可以同时运行多个基于相同镜像的容器,每个容器都有自己独立的运行状态,就像同时运行多个相同软件的副本,它们之间互不干扰。
仓库(Repository)
仓库是用来存储和分发 Docker 镜像的地方,类似于代码仓库。Docker Hub 是最著名的公共仓库,它包含了大量由官方和社区用户创建的镜像。例如,你可以在 Docker Hub 上找到各种操作系统镜像、数据库镜像(如 MySQL、PostgreSQL)、编程语言运行时环境镜像(如 Python、Java)等。
相比虚拟机,容器的启动速度更快,占用的资源更少。容器共享主机操作系统的内核,不需要像虚拟机那样为每个实例运行一个完整的操作系统。例如,你可以在一台主机上运行成百上千个容器,而如果是虚拟机,资源消耗会大得多,运行的数量也会受到限制。
安装 Docker
在大多数 Linux 发行版上,可以通过包管理器来安装 Docker。
Ubuntu 和 Debian 系统:
首先更新软件包列表:
sudo apt-get update
安装 Docker 相关的包,包括docker.io(这是 Ubuntu 和 Debian 上 Docker 的软件包名称):
sudo apt-get install docker.io
启动 Docker 服务并设置开机自启:
sudo systemctl start docker
sudo systemctl enable docker
CentOS 和 RHEL 系统:
安装所需的依赖包:
sudo yum install -y yum - utils device - mapper - persistent - data lvm2
设置 Docker 仓库:
sudo yum - config - manager -- add - repo https://download.docker.com/linux/centos/docker - ce.repo
安装 Docker CE(社区版):
sudo yum install docker - ce docker - ce - cli containerd.io
启动并设置开机自启:
sudo systemctl start docker
sudo systemctl enable docker
基本的 Docker 操作命令(代码示例)
拉取镜像:
从 Docker Hub(公共仓库)拉取一个 Ubuntu 镜像,命令如下:
sudo docker pull ubuntu
这会从 Docker Hub 下载最新的 Ubuntu 镜像到本地。你可以指定镜像的标签来拉取特定版本,例如sudo docker pull ubuntu:18.04来拉取 Ubuntu 18.04 版本的镜像。
查看本地镜像:
使用以下命令来查看已经下载到本地的镜像:
sudo docker images
这个命令会列出本地镜像的仓库名、标签、镜像 ID、创建时间和大小等信息。
运行容器:
基于刚才拉取的 Ubuntu 镜像运行一个容器,例如:
sudo docker run -it ubuntu /bin/bash
这里-it参数表示以交互模式(-i)和伪终端(-t)运行容器,ubuntu是镜像名称,/bin/bash是在容器启动后要执行的命令,这个命令会在容器中打开一个 bash 终端,你可以在里面进行操作,就像在一个独立的 Ubuntu 系统中一样。
容器内操作示例:
假设你已经在容器中(通过上面的run命令进入),可以进行一些基本的操作。例如,更新软件包列表并安装一个软件,在 Ubuntu 容器中:
apt-get update
apt-get install -y curl
这里curl是一个示例软件,你可以根据需要安装其他软件。安装完成后,可以测试curl是否可以正常使用,例如:
curl https://www.example.com
退出容器:
在容器的终端中,输入exit即可退出容器。
查看正在运行的容器:
使用以下命令查看当前正在运行的容器:
sudo docker ps
这个命令会列出正在运行的容器的 ID、名称、使用的镜像、创建时间、状态等信息。如果要查看包括已经停止的容器,可以使用docker ps -a。
停止容器:
如果你想停止一个正在运行的容器,首先通过docker ps获取容器的 ID 或名称,然后使用以下命令停止:
sudo docker stop [容器ID或名称]
删除容器:
在容器停止后,可以使用以下命令删除容器:
sudo docker rm [容器ID或名称]
构建自定义镜像(使用 Dockerfile):
假设你有一个简单的 Python 应用,首先创建一个Dockerfile(这是一个文本文件,没有扩展名,名称必须是Dockerfile),内容如下:
# 基于Python官方镜像
FROM python:3.9
# 设置工作目录
WORKDIR /app
# 将当前目录下的所有文件复制到容器的/app目录下
COPY. /app
# 安装应用所需的依赖(假设使用requirements.txt)
RUN pip install -r requirements.txt
# 定义容器启动时要执行的命令
CMD ["python", "app.py"]
这个Dockerfile假设你的 Python 应用代码在当前目录下,并且有一个requirements.txt文件列出了应用所需的依赖。在Dockerfile所在的目录下,执行以下命令来构建镜像:
sudo docker build -t my - python - app:v1.
这里-t参数用于指定镜像的标签(名称和版本),my - python - app:v1是一个示例标签,你可以根据自己的需要修改。构建完成后,可以通过docker images查看新构建的镜像,然后按照前面的方法运行这个自定义镜像的容器。