Docker 概念
- Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上。
- 容器是使用沙箱机制,相互隔离。
- 容器性能开销低。
Docker 是一种容器技术,解决软件跨环境迁移的问题。
什么是镜像、容器和 Dockerfile?
Image(镜像):可以理解为虚拟机的快照,里面包含了你要部署的应用程序以及它关联的所有库、软件。
通过镜像可以创建许多不同的 Container(容器),这些容器就像是一台台运行起来的虚拟机,里面包含了虚拟程序。每个容器独立运行,相互之间不影响。容器就是镜像的实例化。我们可以修改容器中的安装包等,然后保存这个容器成为一个新的镜像(在顶层叠加)。
如果学习 Conda 环境,这就很好理解了,我们每次构建一个项目都会使用 Conda 管理安装依赖包,实际上这个容器就是一个对应 Conda 环境。
Dockerfile 文件:就像一个自动化脚本,主要被用来创建镜像。这个过程好比我们在虚拟机中安装操作系统和软件一样,只不过通过 Dockerfile 这个自动化脚本完成了。
Docker 实战 Demo
1. 创建文件和文件夹
# 1. 创建并进入目录
mkdir my-docker-demo
cd my-docker-demo
# 2. 生成一个简单的 Python 脚本
echo 'print("恭喜!你的 Docker 镜像运行成功了!")' > app.py
2. 创建 Dockerfile
# 生成 Dockerfile 文件
cat > Dockerfile <<EOF
# 使用官方极其精简的 Python 镜像
FROM python:3.9-slim
# 设置容器内的工作目录
WORKDIR /app
# 把当前目录下的 app.py 复制进容器
COPY app.py .
# 容器启动时运行的命令
CMD ["python", "app.py"]
EOF
3. 打包镜像
docker build -t hello-demo .
由于上面的 Dockerfile 中用到了 Python 的镜像,因此需要去 Docker 仓库拉取到本地,之后才能继续构建镜像。
可能会报错,原因是镜像源问题,需要配置国内镜像源。
(1)创建 Docker 配置文件
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://docker.1panel.live"
]
}
EOF
(2)重启 Docker
systemctl daemon-reload
systemctl restart docker

