Docker 是一个开源的应用容器引擎,允许开发者将应用及其依赖打包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 或 Windows 机器上。
# 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc
# 安装依赖
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
# 添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 添加稳定版仓库
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
# 安装 Docker Engine
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
# 验证安装
sudo docker run hello-world
# 搜索镜像
docker search ubuntu
# 拉取镜像
docker pull ubuntu:20.04
# 列出本地镜像
docker images
# 删除镜像
docker rmi ubuntu:20.04
# 构建镜像 (需要在 Dockerfile 所在目录执行)
docker build -t my-image:1.0 .
# 运行容器
docker run -it ubuntu:20.04 /bin/bash
# 列出运行中的容器
docker ps
# 列出所有容器(包括停止的)
docker ps -a
# 停止容器
docker stop container_id
# 启动已停止的容器
docker start container_id
# 删除容器
docker rm container_id
# 进入运行中的容器
docker exec -it container_id /bin/bash
# 查看容器日志
docker logs container_id
Dockerfile 是一个文本文件,包含构建镜像所需的指令。
FROM
: 指定基础镜像RUN
: 执行命令COPY
: 复制文件ADD
: 复制并解压文件CMD
: 容器启动时执行的命令ENTRYPOINT
: 容器启动时执行的命令(可被覆盖)ENV
: 设置环境变量EXPOSE
: 声明容器暴露的端口WORKDIR
: 设置工作目录# 使用官方 Python 运行时作为父镜像
FROM python:3.8-slim
# 设置工作目录
WORKDIR /app
# 将当前目录内容复制到容器的 /app 目录中
COPY . /app
# 安装 requirements.txt 中指定的包
RUN pip install --trusted-host pypi.python.org -r requirements.txt
# 使端口 80 可供此容器外的环境使用
EXPOSE 80
# 定义环境变量
ENV NAME World
# 在容器启动时运行 app.py
CMD ["python", "app.py"]
Docker Compose 用于定义和运行多容器 Docker 应用程序。
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
environment:
FLASK_ENV: development
redis:
image: "redis:alpine"
# 启动服务
docker-compose up
# 后台启动服务
docker-compose up -d
# 停止服务
docker-compose down
# 查看运行中的服务
docker-compose ps
# 构建或重建服务
docker-compose build
# 列出网络
docker network ls
# 创建网络
docker network create my-network
# 将容器连接到网络
docker network connect my-network container_name
# 断开容器与网络的连接
docker network disconnect my-network container_name
# 创建数据卷
docker volume create my-vol
# 列出数据卷
docker volume ls
# 检查数据卷
docker volume inspect my-vol
# 删除数据卷
docker volume rm my-vol
# 将用户添加到 docker 组(需要重新登录)
sudo usermod -aG docker $USER
# 删除所有停止的容器
docker container prune
# 删除所有未被使用的镜像
docker image prune -a
# 删除所有未被使用的网络
docker network prune
# 删除所有未被使用的卷
docker volume prune
# 删除所有未被使用的资源
docker system prune
# 查看端口占用
sudo netstat -tulnp | grep 80
# 或者使用
sudo lsof -i :80
通过本指南,您应该已经掌握了 Docker 的基础知识和常用操作。实践是最好的学习方式,建议从简单的项目开始,逐步深入探索 Docker 的强大功能。