Docker 是一个开源的容器化平台,它可以让开发者将应用程序及其依赖项打包到一个可移植的容器中,从而实现快速部署、轻松迁移和高效的资源利用。
一、核心概念
镜像(Image):
类似于虚拟机的镜像,是一个只读的模板,包含了运行一个特定应用程序所需的所有文件和依赖项。
可以从 Docker Hub 等镜像仓库中获取,也可以自己创建。
例如,一个包含了 Python 运行环境和一个 Web 应用程序的镜像,可以在不同的环境中快速部署这个 Web 应用。
容器(Container):
是从镜像创建的运行实例,是一个独立的运行环境,与宿主机和其他容器隔离。
容器可以启动、停止、暂停和删除,并且可以在不同的主机之间迁移。
例如,从一个 Python 镜像创建的容器,可以在其中运行特定的 Python 应用程序,而不会影响宿主机上的其他应用程序。
仓库(Repository):
用于存储和管理镜像的地方,可以是公共的(如 Docker Hub)或私有的。
开发者可以将自己创建的镜像推送到仓库中,以便在不同的环境中使用。
例如,一个团队可以创建一个私有仓库,用于存储和共享他们的应用程序镜像。
二、主要特点
轻量级:
与虚拟机相比,Docker 容器更加轻量级,因为它们共享宿主机的内核,不需要为每个容器单独运行一个完整的操作系统。
这使得容器的启动速度非常快,并且占用的资源也更少。
可移植性:
由于容器包含了应用程序及其所有依赖项,所以可以在不同的环境中轻松部署,而不需要担心环境差异导致的问题。
例如,可以在开发环境中创建一个容器,然后在测试环境和生产环境中直接部署这个容器,而不需要重新安装和配置应用程序。
高效的资源利用:
Docker 可以根据应用程序的实际需求动态分配资源,避免了资源的浪费。
可以在同一台主机上运行多个容器,每个容器都可以独立地使用资源,而不会相互干扰。
快速部署:
使用 Docker,可以快速创建和部署容器,从而大大缩短了应用程序的部署时间。
可以通过自动化工具和脚本实现持续集成和持续部署(CI/CD),提高开发效率。
三、使用场景
应用程序部署:
将应用程序及其依赖项打包到一个容器中,可以在不同的环境中快速部署,避免了环境配置的复杂性。
例如,一个 Web 应用程序可以在开发环境中进行开发和测试,然后将其打包成一个容器,在生产环境中直接部署。
持续集成和持续部署(CI/CD):
Docker 可以与持续集成和持续部署工具集成,实现自动化的构建、测试和部署流程。
例如,每次代码提交后,可以自动触发一个构建过程,将应用程序打包成一个容器,并在测试环境中进行测试,如果测试通过,则自动部署到生产环境中。
微服务架构:
在微服务架构中,每个服务都可以独立地部署和扩展,Docker 容器非常适合这种场景。
可以将每个微服务打包成一个容器,然后通过容器编排工具(如 Kubernetes)进行管理和调度。
开发和测试环境:
Docker 可以为开发人员提供一个一致的开发和测试环境,避免了因为环境差异导致的问题。
可以在不同的开发人员之间共享容器,提高开发效率。
四、安装和使用
在 Windows 系统上安装 Docker
请下载 Docker Desktop for Windows https://docs.docker.com/docker-for-windows/install/
如果大家的windows10没有安装WSL2的话,请选择 Hyper-V backend and Windows containers
在 Mac 系统上安装 Docker
请下载安装 Docker Desktop for Mac, 注意版本
https://docs.docker.com/docker-for-mac/install/
intel芯片,请选择 Mac with intel chip
M1芯片,请选择 Mac with Apple chip
拉取镜像:
可以从 Docker Hub 等镜像仓库中拉取所需的镜像。
例如,要拉取一个 Ubuntu 镜像,可以使用以下命令:
docker pull ubuntu
运行容器:
使用拉取的镜像可以创建并运行一个容器。
例如,要运行一个 Ubuntu 容器,可以使用以下命令:
docker run -it ubuntu /bin/bash
构建镜像:
如果需要创建自己的镜像,可以使用 Dockerfile 来定义镜像的内容。
Dockerfile 是一个文本文件,包含了一系列的指令,用于构建镜像。
例如,以下是一个简单的 Dockerfile:
FROM ubuntu
RUN apt-get update && apt-get install -y nginx
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
可以使用以下命令构建这个镜像:
docker build -t my-nginx.
五、容器编排
Kubernetes:
是一个开源的容器编排平台,可以管理和调度大量的容器。
提供了自动部署、自动扩展、自动修复等功能,使得容器的管理更加方便和高效。
例如,可以使用 Kubernetes 来部署一个微服务架构的应用程序,实现高可用和弹性扩展。
Docker Compose:
是一个用于定义和运行多容器 Docker 应用程序的工具。
可以使用 YAML 文件来定义多个容器的配置和依赖关系,然后使用一个命令来启动和管理这些容器。
例如,以下是一个简单的 Docker Compose 文件:
version: '3'
services:
web:
build:.
ports:
- "5000:5000"
db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: password
可以使用以下命令启动这个应用程序:
docker-compose up
常用命令
一、镜像相关命令
1.从镜像仓库拉取指定的镜像。
docker pull <image_name>
例如:docker pull ubuntu 会拉取 Ubuntu 操作系统的镜像。
2.列出本地已有的镜像。
docker images
显示镜像的 ID、名称、标签、创建时间以及大小等信息。
3.删除本地的一个或多个镜像。
docker rmi <image_id>
例如:docker rmi <镜像 ID> 删除指定的镜像。
4.为一个已有的镜像打标签。
docker tag <existing_image>:<tag> <new_image>:<new_tag>
例如将一个名为myapp:v1的镜像标记为myrepo/myapp:v2,可以使用docker tag myapp:v1 myrepo/myapp:v2。
二、容器相关命令
1.指定的镜像创建并启动一个新的容器。
docker run <image_name>
可以添加各种参数,如 -d 表示以守护进程方式运行容器,-p <host_port>:<container_port> 进行端口映射等。
例如:docker run -d -p 8080:80 nginx 启动一个 Nginx 容器并将主机的 8080 端口映射到容器的 80 端口。
2.列出正在运行的容器。
docker ps
显示容器的 ID、镜像名称、启动命令、创建时间、状态以及端口映射等信息。
3.列出所有容器,包括已停止的容器。
docker ps -a
4.启动一个已停止的容器。
docker start <container_id>
5.停止一个正在运行的容器。
docker stop <container_id>
6.重启一个容器。
docker restart <container_id>
7.删除一个或多个容器。
docker rm <container_id>
可以先使用docker stop停止容器后再删除,或者添加-f参数强制删除正在运行的容器,但要谨慎使用。
8.在运行中的容器中执行命令。
docker exec -it <container_id> <command>
例如:docker exec -it mycontainer bash 在名为mycontainer的容器中打开一个 bash 终端。
9.查看容器的日志输出。
docker logs <container_id>
10.获取容器的详细信息,包括容器的配置、网络设置、挂载点等。
docker inspect <container_id>
三、其他常用命令
1.根据指定的 Dockerfile 所在目录构建一个新的镜像。
docker build -t <image_name>:<tag> <directory>
例如:docker build -t myapp:v1. 在当前目录下查找 Dockerfile 并构建名为myapp、标签为v1的镜像。
2.创建一个数据卷,用于在容器之间共享数据或持久化数据。
docker volume create <volume_name>
3.创建一个自定义的 Docker 网络,方便容器之间进行通信。
docker network create <network_name>
4.清理未使用的镜像、容器和数据卷等资源,释放磁盘空间。
docker system prune
5.显示 Docker 系统的信息,包括已安装的版本、容器和镜像的数量、存储驱动等。
docker info
标签:容器,可以,应用程序,常用命令,镜像,Docker,安装,docker
From: https://blog.csdn.net/wang_4212/article/details/142586581