什么是Docker?
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用及其依赖包到一个可移植的容器中,然后发布到任何支持 Docker 的平台上。它提供了简便的虚拟化解决方案,使得应用开发、测试和部署更加一致和高效。
Docker的应用场景
- Web 应用的自动化打包和发布。
- 自动化测试和持续集成、发布。
- 在服务型环境中部署和调整数据库或其他的后台应用。
- 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。
基本概念
- 镜像 (Image):镜像是一个只读模板,包含了运行应用程序所需的所有内容(代码、库、配置等)。可以把镜像看作是一个蓝图,用于创建Docker容器。
- 容器 (Container):容器是镜像的运行实例,它是一个轻量级、独立的可执行软件包,包含了软件运行所需的所有内容。
- Dockerfile:Dockerfile是一个文本文件,包含了一系列指令,告诉Docker如何构建镜像。
- Docker Hub:这是一个云端的公共仓库,你可以在上面找到和共享Docker镜像
安装 Docker
1. Linux
在Linux上,可以使用官方脚本来安装Docker。例如,在Ubuntu上:
1 | curl -fsSL https://get.docker.com -o get-docker.sh |
2. Windows 和 macOS
下载并安装Docker Desktop:
基本命令
下载镜像
使用 docker pull
命令从 Docker Hub 下载镜像:
1 | docker pull <image_name> |
创建并启动容器
使用 docker run
命令创建并启动一个容器。例如,运行一个交互式的 Ubuntu 容器:
1 | docker run -it ubuntu bash |
-it
:以交互模式运行,并分配一个伪 TTY。ubuntu
:指定使用的镜像。bash
:在容器内运行的命令。
进入容器
使用 docker exec
命令进入正在运行的容器:
1 | docker exec -it <container_id> bash |
查看容器状态
- 查看所有运行中的容器:
1
docker ps
- 查看所有容器,包括已停止的:
1
docker ps -a
停止容器
使用 docker stop
命令停止一个运行中的容器:
1 | docker stop CONTAINER_ID |
删除容器
使用 docker rm
命令删除一个已停止的容器:
1 | docker rm CONTAINER_ID |
导出和导入容器
- 导出容器:
1
docker export <container_id> > output.tar
- 导入容器:
1
docker import output.tar <new_container_name>
构建镜像
使用 docker build
命令从当前目录中的 Dockerfile 构建一个镜像:
1 | docker build -t TAG_NAME . |
-t TAG_NAME
:为镜像指定一个标签。.
:指定 Dockerfile 所在的目录。
通过这些命令,我们可以有效地管理和操作Docker容器和镜像,实现应用的快速部署和环境的统一管理。
Dockerfile 示例
Dockerfile 是用于构建Docker镜像的文本文件,包含一系列指令。例如,以下是一个简单的Dockerfile:
1 | # 使用官方的Python基础镜像 |
镜像管理
1. 列出镜像
列出本地所有镜像:
1 | docker images |
2. 拉取镜像
从Docker Hub拉取一个镜像:
1 | docker pull IMAGE_NAME |
3. 删除镜像
删除一个本地镜像:
1 | docker rmi IMAGE_ID |
网络和数据卷
网络
Docker允许创建自定义网络,容器可以加入这些网络并相互通信。例如,创建一个网络:
1 | docker network create my-network |
运行容器时加入网络:
1 | docker run -d --network=my-network --name my-container ubuntu |
数据卷
数据卷用于持久化数据,可以在容器之间共享和重用。例如,创建一个数据卷:
1 | docker volume create my-volume |
运行容器时挂载数据卷:
1 | docker run -d -v my-volume:/app/data ubuntu |
最佳实践
- 使用
.dockerignore
文件:排除不需要的文件和目录,以减小镜像大小。 - 使用官方镜像:尽量使用官方基础镜像,保证安全性和稳定性。
- 保持镜像小巧:避免包含不必要的依赖,减小镜像大小。
- 使用多阶段构建:通过多阶段构建来减少最终镜像的大小,优化构建过程。
Docker 是一个功能强大的工具,上述指南仅涵盖了基础知识。深入学习 Docker 可以帮助你更好地理解容器化技术,并有效地管理应用部署。
注意在windows系统退出dockers的时候,可能会出现一种情况,后台的WSL没有退出并且占用大量内存,这个时候我们需要
wsl --shutdown
命令进行关闭