本文介绍了Docker入门的基础知识,包括Docker的简介、安装方法、镜像与容器的概念以及常用命令。文章还详细讲解了如何使用Dockerfile构建镜像和运行容器,并提供了网络与存储的相关配置示例。通过本文的学习,读者可以全面了解和掌握Docker入门所需的各项技能。
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器或 Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
Docker 主要用于以下方面:
Docker 架构主要包括以下几个组成部分:
docker
命令)来控制 Docker 守护进程。更新系统包:
sudo apt-get update sudo apt-get upgrade
安装 Docker:
sudo apt-get install docker.io
验证 Docker 是否安装成功:
docker --version
sudo systemctl start docker sudo systemctl enable docker
Docker 镜像是一个包含操作系统、应用、配置文件和其他依赖项的只读模板。镜像包含了应用程序运行所需的一切环境,包括代码、运行时、库、环境变量和配置文件。镜像通过 docker build
命令创建,之后可以被分享和复制。
Docker 容器是从 Docker 镜像创建的运行实例。容器是隔离的执行环境,可以运行在任何安装了 Docker 的机器上。容器内部包含了一套完整的运行时环境,包括文件系统、库、环境变量和配置文件等。
创建 Docker 镜像有几种常见方法,最常用的是使用 Dockerfile
文件定义镜像的构建过程。
假设我们要创建一个包含 Python 3 的 Docker 镜像。首先,创建一个 Dockerfile
文件:
# 使用官方 Python 基础镜像 FROM python:3.8-slim # 设置工作目录 WORKDIR /app # 复制当前目录下的 app.py 文件到容器内的 /app 目录下 COPY ./app.py /app # 安装所需的 Python 库 RUN pip install --no-cache-dir -r requirements.txt # 设置容器启动时运行的命令 CMD ["python", "app.py"]
然后,在 Dockerfile 所在目录执行以下命令来构建镜像:
docker build -t my-python-app:latest .
上述命令会根据 Dockerfile 构建镜像,并将其命名为 my-python-app
,标签为 latest
。
使用 docker run
命令来启动容器。假设你已经有了一个名为 my-python-app:latest
的镜像。
docker run -d --name my-python-container my-python-app:latest
上述命令会启动一个容器,并将其命名为 my-python-container
。-d
参数表示以分离模式(后台运行)启动容器。
docker run
:启动一个新的容器。docker ps
:列出正在运行的容器。docker ps -a
:列出所有容器,包括已停止的。docker stop
:停止一个正在运行的容器。docker rm
:删除一个已停止的容器。docker rmi
:删除一个镜像。docker images
:列出所有本地镜像。docker logs
:查看容器的日志。docker exec
:在容器内运行命令。使用 docker images
命令可以查看所有本地镜像:
docker images
输出结果会显示镜像的名称、标签、镜像ID以及创建时间等信息。
使用 docker run
命令来运行一个新的容器。假设你有一个名为 nginx:latest
的镜像:
docker run -d --name my-nginx-container nginx:latest
上述命令会启动一个名为 my-nginx-container
的容器,并将其以分离模式(后台运行)运行。
使用 docker rm
命令来删除容器。假设你要删除名为 my-python-container
的容器:
docker rm my-python-container
如果容器正在运行,需要先停止容器:
docker stop my-python-container docker rm my-python-container
Dockerfile 是一个文本文件,用于描述如何构建 Docker 镜像。它包含了一组指令,这些指令告诉 Docker 如何构造一个镜像。
Dockerfile 的结构如下:
FROM
指令指定一个基础镜像。MAINTAINER
指令指定镜像的维护者。ENV
指令设置环境变量。WORKDIR
指令设置工作目录。RUN
指令执行命令。COPY
或 ADD
指令复制文件。CMD
或 ENTRYPOINT
指令设置容器启动时运行的命令。EXPOSE
指令声明容器运行时会监听的端口。FROM
:指定基础镜像。WORKDIR
:设置工作目录。COPY
或 ADD
:复制文件或目录到镜像中。RUN
:执行命令。CMD
或 ENTRYPOINT
:设置容器启动时运行的命令。EXPOSE
:声明容器运行时会监听的端口。假设我们要创建一个包含 Nginx 的 Docker 镜像,并在其中运行一个简单的 Nginx 服务。
Dockerfile
文件:# 使用官方 Nginx 基础镜像 FROM nginx:latest # 设置工作目录 WORKDIR /usr/share/nginx/html # 复制本地文件到镜像内 COPY ./index.html /usr/share/nginx/html/index.html # 暴露80端口 EXPOSE 80 # 启动服务 CMD ["nginx", "-g", "daemon off;"]
docker build -t my-nginx-app:latest .
docker run -d --name my-nginx-container -p 8080:80 my-nginx-app:latest
上述命令会启动一个容器,并将其映射到宿主机的 8080 端口。
Docker 支持多种网络模式,包括:
Docker 提供了多种方法来配置容器网络。最常见的是使用 docker run
命令的 --network
参数来指定网络模式。
docker run -d --name my-nginx-container --network bridge nginx:latest
上述命令会启动一个新的容器,并将其连接到桥接网络。
Docker 使用多种存储驱动来管理容器的文件系统。常见的存储驱动包括:
Docker 允许将宿主机的目录挂载到容器内,这样可以方便地共享文件资源。
docker run -d --name my-nginx-container -v /host/path:/container/path nginx:latest
上述命令会将宿主机的 /host/path
目录挂载到容器的 /container/path
目录。
假设我们要搭建一个简单的 Web 应用,使用 Nginx 作为 Web 服务器。
Dockerfile
文件:# 使用官方 Nginx 基础镜像 FROM nginx:latest # 设置工作目录 WORKDIR /usr/share/nginx/html # 复制本地文件到镜像内 COPY ./index.html /usr/share/nginx/html/index.html # 暴露80端口 EXPOSE 80 # 启动服务 CMD ["nginx", "-g", "daemon off;"]
docker build -t my-nginx-app:latest .
docker run -d --name my-nginx-container -p 8080:80 my-nginx-app:latest
上述命令会启动一个容器,并将其映射到宿主机的 8080 端口。
假设我们要部署一个 MongoDB 数据库服务。
docker-compose.yml
文件:version: '3' services: db: image: mongo:latest container_name: my-mongo-db volumes: - ./data/db:/data/db ports: - "27017:27017"
docker-compose up -d
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。它允许使用一个 docker-compose.yml
文件来定义服务、配置网络和挂载卷。
docker-compose.yml
文件:version: '3' services: web: build: . ports: - "8080:80" db: image: mongo:latest volumes: - ./data/db:/data/db ports: - "27017:27017"
docker-compose up --build
Docker 提供了多种调试和日志管理的工具和方法。
使用 docker logs
命令查看容器的日志:
docker logs my-nginx-container
docker exec
调试容器进入容器内执行命令:
docker exec -it my-nginx-container bash
上述命令会进入容器的 bash shell。
使用 Docker Compose 查看所有服务的日志:
docker-compose logs