Docker 开源的
应用容器引擎
Go语言开发的
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中
,然后发布到任何流行的Linux机器上,也可以实现虚拟化
Docker三个基本概念
镜像(Image)
Docker 镜像是一种轻量级、独立的、可执行的软件包,它包含了运行某个软件所需的所有元素。镜像是不可变的,创建后不能更改,但可以用作构建新镜像的基础。
比喻:
想象一下,它就像一本食谱(Recipe),详细列出了如何制作某道菜。这个食谱包含了所有的步骤和所需的食材。
食谱:代表 Docker 镜像
所需的食材和步骤:代表应用程序、依赖库、配置文件等
有了这本食谱(Docker 镜像),你和别人都能按照同样的步骤做出一样的菜。
容器(Container)
Docker 容器是基于镜像创建的一个运行实例,它包含了应用程序及其所有依赖项,运行在一个完全隔离的环境中。容器是动态的,可以启动、停止、移动和删除。
比喻:
容器就像是你根据食谱(Docker 镜像)做出来的那道实际的菜。你可以吃这道菜,也可以把它装进饭盒里带走。
实际的菜:代表 Docker 容器
装进饭盒里带走:代表容器的便携性和可移植性
有了这道菜(Docker 容器),你可以随时享用,也可以带到任何地方,和别人分享。
仓库(Repository)
集中存放镜像文件的场所
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
Docker 容器通过 Docker 镜像来创建。
Docker 镜像是用于创建 Docker 容器的模板
容器与镜像的关系类似于面向对象编程中的对象与类。
Docker命令
基础命令
查看版本信息
docker version
显示详细信息
docker info
从仓库拉取镜像
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
# 例如:
docker pull ubuntu:latest
列出本地存储的镜像
docker images
删除一个或多个镜像
docker rmi [OPTIONS] IMAGE [IMAGE...]
# 例如:
docker rmi ubuntu:latest
列出所有运行中的容器
docker ps [OPTIONS]
# 列出所有容器(包括停止的容器):
docker ps -a
运行一个新的容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
# 例如,运行一个交互式的 Ubuntu 容器:
docker run -it ubuntu:latest /bin/bash
常用选项:
-d:后台运行容器。
-p:端口映射。
-v:挂载卷。
–name:给容器命名。
-e:设置环境变量。
停止一个运行中的容器
docker stop [OPTIONS] CONTAINER [CONTAINER...]
# 例如:
docker stop my_container
启动一个已停止的容器
docker start [OPTIONS] CONTAINER [CONTAINER...]
# 例如:
docker start my_container
重启一个容器
docker restart [OPTIONS] CONTAINER [CONTAINER...]
# 例如:
docker restart my_container
删除一个或多个容器
docker rm [OPTIONS] CONTAINER [CONTAINER...]
# 例如:
docker rm my_container
在运行中的容器中执行命令
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
# 例如,在容器中打开一个交互式 shell:
docker exec -it my_container /bin/bash
获取容器的日志
docker logs [OPTIONS] CONTAINER
# 例如:
docker logs my_container
镜像管理
从Dockerfile构建一个镜像
docker build [OPTIONS] PATH | URL | -
# 例如,从当前目录的 Dockerfile 构建镜像:
docker build -t my_image:latest .
为镜像打标签
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
# 例如:
docker tag my_image:latest my_repo/my_image:v1.0
将镜像推送到Docker仓库
docker push [OPTIONS] NAME[:TAG]
# 例如:
docker push my_repo/my_image:v1.0
从Docker仓库中拉取镜像
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
# 例如:
docker pull ubuntu:latest
网络管理
列出所有Docker网络
docker network ls
创建一个新的Docker网络
docker network create [OPTIONS] NETWORK
# 例如:
docker network create my_network
删除一个或多个Docker网络
docker network rm NETWORK [NETWORK...]
# 例如:
docker network rm my_network
查看Docker网络的详细信息
docker network inspect NETWORK
# 例如:
docker network inspect my_network
卷管理
列出所有Docker卷
docker volume ls
创建一个新的Docker卷
docker volume create [OPTIONS] [VOLUME]
# 例如:
docker volume create my_volume
删除一个或多个Docker卷
docker volume rm VOLUME [VOLUME...]
# 例如:
docker volume rm my_volume
查看Docker卷的详细信息
docker volume inspect VOLUME
# 例如:
docker volume inspect my_volume
常用选项详解
-d:后台运行容器。
-it:运行一个交互式终端。
-p:端口映射,格式为HOST_PORT:CONTAINER_PORT。
-v:挂载卷,格式为HOST_PATH:CONTAINER_PATH。
-e:设置环境变量。
–name:为容器指定名称。
–rm:容器退出后自动删除容器。
–network:指定容器加入的网络。
Dockerfile
Dockerfile 是一个文本文件
,包含了构建Docker镜像
的所有指令
。
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明
。
通过定义一系列命令和参数,Dockerfile 指导 Docker 构建一个自定义的镜像
。
Docker Compose
Compose 是用于定义和运行多容器 Docker 应用程序的工具
。
通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务
。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务
。
Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。通过一个简单的配置文件,你可以使用 Docker Compose 来配置应用程序的服务,并使用单个命令启动所有服务。
通俗理解
假设你有一个复杂的应用程序,它需要多个组件来一起工作,比如:
- Web服务器:处理用户的 HTTP 请求。
- 数据库:存储应用程序的数据。
- 缓存服务器:加速数据访问,提高性能。
如果你要手动启动这些服务,你需要分别运行多个 docker run
命令,这可能会变得非常复杂和容易出错。特别是当你需要在不同的环境(如开发、测试和生产)中运行应用程序时,管理这些服务的配置会变得更加困难。
Docker Compose 的作用
Docker Compose 通过一个配置文件(通常命名为 docker-compose.yml
)来定义所有这些服务。这个配置文件可以包括:
- 每个服务使用的镜像。
- 服务之间的依赖关系。
- 网络和卷的配置。
- 环境变量。
举例说明
假设你有一个简单的应用程序,有一个 Web 服务器和一个数据库。你可以创建一个 docker-compose.yml
文件来定义这些服务:
version: '3'
services:
web:
image: nginx:latest
ports:
- "8080:80"
db:
image: mysql:latest
environment:
MYSQL_ROOT_PASSWORD: example
这个文件定义了两个服务:
- web 服务:使用最新版本的 Nginx 镜像,并将主机的 8080 端口映射到容器的 80 端口。
- db 服务:使用最新版本的 MySQL 镜像,并设置一个环境变量来定义 MySQL 的根密码。
使用 Docker Compose
-
启动服务:
通过运行以下命令,Docker Compose 会根据配置文件启动所有服务:
docker-compose up
-
停止服务:
运行以下命令可以停止所有服务:
docker-compose down
-
查看服务状态:
你可以使用以下命令查看运行中的服务状态:
docker-compose ps
优点
- 简化多容器管理:不用手动启动和停止每个容器,简化操作。
- 一致的开发环境:所有开发人员都可以使用相同的配置文件,确保一致的开发环境。
- 易于扩展:可以轻松添加或删除服务,调整配置。
小结
Docker Compose 让你能够通过一个简单的配置文件来管理多容器应用,简化了复杂应用的部署和管理。无论是在开发环境还是生产环境,它都能帮助你更高效地管理服务。