Docker 是一个用于自动部署应用程序在轻量级容器中的平台。下面列出一些 Docker 的基础和必知概念。
1. 容器(Containers)
容器是独立的应用程序运行环境。
命令:
bash
docker run hello-world
解析:
该命令会从 Docker Hub 下载一个叫做 "hello-world" 的镜像,并运行一个容器。
2. 镜像(Images)
镜像是包含有文件和应用程序依赖的轻量级包。
命令:
bash
docker build -t my-image .
解析:
构建一个 Docker 镜像,并给它标记为 "my-image"。
3. Dockerfile
Dockerfile 是一系列指令,用于定义如何创建一个 Docker 镜像。
示例:
Dockerfile
# Use an official Python runtime as a parent image
FROM python:3.7-slim
解析:
这里使用官方的 Python 3.7 镜像作为基础镜像。
4. 端口映射(Port Mapping)
将容器的端口映射到宿主机。
命令:
bash
docker run -p 4000:80 my-image
解析:
这个命令将容器的 80 端口映射到宿主机的 4000 端口。
5. 数据卷(Volumes)
用于数据持久化和容器之间共享数据。
命令:
bash
docker run -v /path/on/host:/path/in/container my-image
解析:
这将主机上的 /path/on/host
目录挂载到容器内的 /path/in/container
。
6. Docker Compose
用于定义和运行多容器 Docker 应用程序。
命令:
bash
docker-compose up
解析:
使用 docker-compose.yaml
文件启动服务。
7. 网络(Networking)
容器间的网络通信。
命令:
bash
docker network create my-network
解析:
创建一个名为 my-network
的新网络。
8. Docker Hub
Docker 的公共镜像仓库。
命令:
bash
docker push my-image
解析:
将名为 my-image
的镜像推送到 Docker Hub。
9. 容器生命周期
理解 start、stop、kill、rm 等命令。
命令:
bash
docker start my-container
docker stop my-container
docker rm my-container
解析:
分别用于启动、停止和删除名为 my-container
的容器。
10. 容器日志(Logs)
查看容器的输出。
命令:
bash
docker logs my-container
解析:
查看名为 my-container
的容器的日志输出。
【提醒】以上只是 Docker 的基础和必须了解的概念,更多高级的特性和用法(如 Swarm、Docker Registry 等)也是非常重要的。
1. Docker Swarm
Docker Swarm 是 Docker 的原生集群管理工具。它可以帮助你管理一个或多个 Docker 主机,并使它们作为一个单一的虚拟 Docker 主机。
初始化 Swarm 集群
bash
docker swarm init
解析:
初始化一个新的 Swarm 集群并使当前 Docker 主机成为 Swarm 管理器。
添加工作节点
bash
docker swarm join --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c 192.168.99.100:2377
解析:
将一个 Docker 主机加入到 Swarm 集群作为一个工作节点。你需要从 docker swarm init
输出中获取令牌和地址。
部署服务
bash
docker service create --replicas 1 --name helloworld alpine ping docker.com
解析:
创建一个新的服务 helloworld
,该服务运行 alpine
镜像并执行 ping docker.com
。
2. Docker Registry
Docker Registry 是用于存储 Docker 镜像的服务器。
运行本地 Docker Registry
bash
docker run -d -p 5000:5000 --name registry registry:2
解析:
运行一个本地的 Docker Registry,并将其绑定到端口 5000。
推送镜像到本地 Registry
bash
docker tag my-image localhost:5000/my-image
docker push localhost:5000/my-image
解析:
标记 my-image
并将它推送到本地 Docker Registry。
3. Docker Stack
Stack 是一个定义了多个服务、网络和卷的 Docker Compose 文件。
部署 Stack
bash
docker stack deploy -c docker-compose.yml mystack
解析:
使用 docker-compose.yml
文件部署一个新的 Stack。
4. Docker Secrets
Docker Secrets 主要用于安全地管理敏感信息。
创建一个 Secret
bash
echo "my_secret" | docker secret create my_secret -
解析:
创建一个名为 my_secret
的 Docker Secret。
使用 Secret
在服务定义或堆栈定义中使用 Secret。
示例:
yml
services:
myservice:
image: my_image
secrets:
- my_secret
解析:
这会将 my_secret
挂载到名为 myservice
的服务的 /run/secrets/my_secret
路径下。
以上是 Docker 的一些高级特性和用法。每个高级功能都有更多的参数和配置选项,因此建议查阅 Docker 的官方文档进行更深入的学习。