是一个开源的平台,允许开发者自动化地部署应用程序在容器中。容器是轻量级、独立且打包的应用服务,可以在任何环境中运行,确保一致性和可移植性,利用操作系统级别的虚拟化技术来打包、交付和运行应用程序。可以将应用程序及其所有依赖项打包到一个可移植的容器中,可以在任何安装了Docker引擎的服务器上运行这些容器。
主要的组件
Docker Engine:负责构建、运行和管理Docker容器。
Docker Images:用于创建容器的只读模板。
Docker Containers:运行中的应用实例,由Docker镜像创建。
Docker Hub:存储和分发Docker镜像的云服务。
Docker Compose:用于定义和运行多容器Docker应用的工具。
用途
- 应用封装:将应用和依赖环境封装成一个可移植的容器镜像。
- 一致性环境:在开发、测试和生产环境中提供一致的运行环境。
- 轻量化虚拟化:比传统虚拟机更快的启动速度和更小的资源开销。
- 快速部署:简化和加速应用部署流程。
- 隔离性和安全性:容器之间相互隔离,保障应用的安全性。
Docker与虚拟机区别
- 架构:Docker是操作系统级别的虚拟化,共享主机的操作系统内核;虚拟机是硬件级别的虚拟化,需要完整的操作系统。
- 性能:Docker容器启动速度快,资源消耗少;虚拟机启动较慢,占用更多的资源。
- 镜像体积:Docker镜像通常较小,因为它们共享主机的操作系统;虚拟机镜像较大,包含完整的操作系统。
- 隔离性:虚拟机提供更强的隔离性,因为每个虚拟机都有自己的操作系统;Docker容器共享主机的内核,隔离性较弱。
- 使用场景:Docker适合微服务架构和开发测试环境;虚拟机适合多操作系统需求和强隔离需求的场景。
Docker镜像
是一个只读模板,包含了应用程序及其所有依赖项,用于创建Docker容器。镜像可以从Dockerfile构建,也可以从DockerHub拉取。
Docker容器
是运行中的应用实例,由Docker镜像创建。容器是独立、轻量级且便于移植的,确保应用在开发、测试和生产环境中的一致性。
Dockerfile
Dockerfile 是一个包含了一系列指令的文本文件,这些指令用于构建Docker镜像。每条指令都会在镜像中创建一个新的层。常见的指令包括 FROM
、RUN
、COPY
、CMD
等。
命令
- FROM:指定基础镜像。
- RUN:在容器内执行命令。
- COPY:将文件或目录从主机复制到容器内。
- ADD:将文件或目录从主机复制到容器内,并支持URL和解压缩操作。
- WORKDIR:设置工作目录。
- EXPOSE:声明容器运行时监听的端口。
- CMD:指定容器启动时要执行的命令。
Docker Compose
是一个用于定义和运行多容器Docker应用的工具。你可以使用docker-compose.yml文件来定义应用的服务、网络和卷,并通过一条命令启动和停止所有服务。
Docker网络模式
bridge:默认网络模式,适用于单机上的容器通信。
host:容器和主机共享一个网络命名空间,使用主机的 IP 和端口。
none:容器没有网络接口。
container:多个容器共享一个网络命名空间。
overlay:用于跨多个Docker主机的容器通信。
日志驱动
json-file(默认)
syslog
journald
gelf
fluentd
awslogs
splunk
日志驱动配置
docker run --log-driver=syslog --log-opt syslog-address=tcp://IP:端口 <image>
限制日志大小
docker run --log-opt max-size=10m --log-opt max-file=3 <image>
Docker相关命令
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
docker run
:运行容器的命令。[OPTIONS]
:可选参数,用于配置容器的各种选项,如端口映射、容器名称等。IMAGE
:要运行的镜像名称或ID。[COMMAND] [ARG...]
:可选的命令和参数,用于在容器内执行特定的命令。
docker build [OPTIONS] PATH | URL | -
docker build
:构建镜像的命令。[OPTIONS]
:可选参数,用于配置构建过程,如镜像标签、构建上下文路径等。PATH | URL | -
:Dockerfile所在的路径、URL或者使用标准输入作为Dockerfile。
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
docker pull
:拉取镜像的命令。[OPTIONS]
:可选参数,用于配置拉取过程,如认证信息等。NAME[:TAG|@DIGEST]
:要拉取的镜像名称、标签或摘要。
docker push [OPTIONS] NAME[:TAG]
docker push
:推送镜像的命令。[OPTIONS]
:可选参数,用于配置推送过程,如认证信息等。NAME[:TAG]
:要推送的镜像名称和标签。
docker images [OPTIONS] [REPOSITORY[:TAG]]
docker images
:列出镜像的命令。[OPTIONS]
:可选参数,用于配置输出结果的格式等。[REPOSITORY[:TAG]]
:可选的镜像名称和标签,用于过滤输出结果。
docker ps [OPTIONS]
docker ps
:列出容器的命令。[OPTIONS]
:可选参数,用于配置输出结果的格式和过滤条件。
docker stop [OPTIONS] CONTAINER [CONTAINER...]
docker stop
:停止容器的命令。[OPTIONS]
:可选参数,用于配置停止过程,如超时时间等。CONTAINER [CONTAINER...]
:要停止的容器名称或ID。
docker start [OPTIONS] CONTAINER [CONTAINER...]
docker start
:启动容器的命令。[OPTIONS]
:可选参数,用于配置启动过程,如守护模式等。CONTAINER [CONTAINER...]
:要启动的容器名称或ID。
docker restart [OPTIONS] CONTAINER [CONTAINER...]
docker restart
:重启容器的命令。[OPTIONS]
:可选参数,用于配置重启过程,如超时时间等。CONTAINER [CONTAINER...]
:要重启的容器名称或ID。
docker kill [OPTIONS] CONTAINER [CONTAINER...]
docker kill
:终止容器的命令。[OPTIONS]
:可选参数,用于配置终止过程,如信号等。CONTAINER [CONTAINER...]
:要终止的容器名称或ID。
docker rm [OPTIONS] CONTAINER [CONTAINER...] docker rmi [OPTIONS] IMAGE [IMAGE...]
- docker rm:删除容器的命令。
- docker rmi:删除镜像的命令。
- [OPTIONS]:可选参数,用于配置删除过程,如强制删除等。
- CONTAINER [CONTAINER...]:要删除的容器名称或ID。
- IMAGE [IMAGE...]:要删除的镜像名称或ID。
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
docker exec
:在容器内执行命令的命令。[OPTIONS]
:可选参数,用于配置执行过程,如进入交互模式等。CONTAINER
:要执行命令的容器名称或ID。COMMAND [ARG...]
:要在容器内执行的命令及其参数。
docker logs [OPTIONS] CONTAINER
docker logs
:查看容器日志的命令。[OPTIONS]
:可选参数,用于配置输出结果,如时间戳等。CONTAINER
:要查看日志的容器名称或ID。
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
docker inspect
:获取详细信息的命令。[OPTIONS]
:可选参数,用于配置输出结果的格式等。NAME|ID [NAME|ID...]
:要获取信息的容器或镜像的名称或ID。
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
- docker cp:复制文件或目录的命令。
- [OPTIONS]:可选参数,用于配置复制过程,如权限等。
- CONTAINER:SRC_PATH:源路径,其中CONTAINER是容器名称或ID。
- DEST_PATH:目标路径,其中DEST_PATH是主机路径。
- SRC_PATH|-:源路径,其中-表示从标准输入读取。
docker system prune [OPTIONS]
docker system prune
:清理资源的命令。[OPTIONS]
:可选参数,用于配置清理过程,如强制删除等。
docker network
- docker network ls:列出所有的Docker网络。
- docker network create:创建一个新的Docker网络。
- docker network connect:将容器连接到指定的Docker网络。
- docker network disconnect:将容器从指定的Docker网络断开连接。
docker volume
- docker volume ls:列出所有的Docker卷。
- docker volume create:创建一个新的Docker卷。
- docker volume inspect:获取Docker卷的详细信息。
- docker volume rm:删除指定的Docker卷。
docker-compose
- docker-compose up:构建并启动Docker-compose定义的所有服务。
- docker-compose down:停止并删除Docker-compose定义的所有服务。
- docker-compose build:构建Docker-compose定义的所有服务的镜像。
- docker-compose logs:查看Docker-compose定义的所有服务的日志。
docker swarm 原生集群管理和编排工具,用于在多个Docker主机上运行和管理应用程序
- docker swarm init:初始化一个新的Docker swarm集群。
- docker swarm join:将节点加入到Docker swarm集群。
- docker node ls:列出Docker swarm集群中的所有节点。
- docker service:管理在Docker swarm集群中运行的服务。
docker login
:登录到Docker仓库。docker logout
:退出登录。
docker logs 查看容器日志
- docker logs --tail:只显示最后几行的日志。
- docker logs --follow:实时跟踪容器的日志输出。
- docker logs --since:只显示特定时间之后的日志。
- docker logs --until:只显示特定时间之前的日志。
Docker镜像与容器的区别
Docker镜像是应用程序和其依赖关系的静态快照,可以看作是一个只读的模板。Docker容器是Docker 镜像的一个实例,可以运行应用程序和修改应用程序的状态,例如添加、删除、修改文件。
Docker容器连接其他容器或主机
Docker 提供了多种网络模式,包括桥接模式、主机模式、覆盖网络模式等,可以实现容器之间和容器与主机之间的网络连接。常用的方法包括使用DockerCompose、Docker Swarm 和 Kubernetes 等容器编排工具。
Docker 的安全性管理
- 使用最新版本的 Docker,以避免已知的安全漏洞。
- 限制容器的权限,例如禁止使用 root 用户、限制容器的资源等。
- 使用安全的镜像仓库,避免下载包含恶意软件的镜像。
- 使用网络隔离技术,避免容器之间的互相影响。
- 监控容器的运行状态,及时发现安全漏洞和攻击行为。