少女祈祷中...

什么是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
2
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 使用官方的Python基础镜像
FROM python:3.9-slim

# 设置工作目录
WORKDIR /app

# 复制当前目录内容到工作目录
COPY . /app

# 安装依赖包
RUN pip install --no-cache-dir -r requirements.txt

# 定义环境变量
ENV NAME World

# 设置容器启动时运行的命令
CMD ["python", "app.py"]

镜像管理

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

最佳实践

  1. 使用.dockerignore文件:排除不需要的文件和目录,以减小镜像大小。
  2. 使用官方镜像:尽量使用官方基础镜像,保证安全性和稳定性。
  3. 保持镜像小巧:避免包含不必要的依赖,减小镜像大小。
  4. 使用多阶段构建:通过多阶段构建来减少最终镜像的大小,优化构建过程。

Docker 是一个功能强大的工具,上述指南仅涵盖了基础知识。深入学习 Docker 可以帮助你更好地理解容器化技术,并有效地管理应用部署。

注意在windows系统退出dockers的时候,可能会出现一种情况,后台的WSL没有退出并且占用大量内存,这个时候我们需要 wsl --shutdown 命令进行关闭

本文作者:戴诺斯·拉姆 @ 拉姆的小树屋

本文链接:https://sherry14love.github.io/2024/05/18/learn/docker/

本文版权:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

留言