目录
Docker 基本概念
Docker
是容器化技术的一个十分流行的实现,它基于 Go 语言开发,遵循 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。就像一些高级编程语言的“类”和“对象”的关系一样,根据一个模板创建很多个一样的对象,这些对象就是容器。
常用基本概念
架构上
Docker Client
:客户端,用来输入命令的工具。docker run
docker build
docker pull
- 等等
Docker Host (Server)
:服务器端,用来接收客户端的命令并执行。Docker Daemon
:守护进程,接收来自客户端的指令,管理镜像、容器、网络、数据卷等。Image
:镜像,类似于模板,用来创建容器。Container
:容器,类似于对象,是镜像的一个实例,可以被创建、启动、停止、删除、暂停等。
Docker Registry
:镜像仓库,用来保存各种镜像的地方。Docker Hub
:官方镜像仓库,包含了很多官方和非官方的镜像。- 私有仓库:自己搭建的镜像仓库。
实际开发生产上
Image
:镜像,类似于模板,用来创建容器。Container
:容器,类似于对象,是镜像的一个实例,可以被创建、启动、停止、删除、暂停等。Dockerfile
:用来构建镜像的文件,包含了一条条构建镜像的指令。Docker 通过读取 Dockerfile 中的指令来构建镜像。Docker Compose
:一个用来定义和运行多容器 Docker 应用的工具。可以通过一个预先定义的docker-compose.yml
文件来配置多个容器,组合为一个完整的应用服务,便于部署、运维。Docker Registry
:镜像仓库,用来保存各种镜像的地方。Docker Volume
:数据卷,可以在容器间共享数据,也可以用来持久化存储数据。Docker 容器在重启后,数据卷不会丢失,而容器内的数据不会保存。Docker Network
:网络,允许容器间通信,也可以让容器连接到外部网络。
Docker 安装
对于有图形界面的操作系统(Windows、MacOS),可以直接下载 Docker Desktop 安装包进行安装。Docker Desktop 是一个包含了 Docker Engine、Docker CLI、Docker Compose、Kubernetes可选的 Minikube 等工具的桌面应用。
对于没有图形界面的操作系统(Linux),可以通过命令行安装 Docker Engine。
在此简要略过在 Ubuntu 上使用 apt
安装 Docker Engine 的方法:
-
前置步骤
Terminal window # 删除已有的 Docker 组件(操作系统自带等可能不兼容的组件)for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done# 增加 Docker 官方 GPG Keysudo apt-get update## 安装信任 Key 所需软件包sudo apt-get install ca-certificates curl## 下载和安装 Docker 官方 GPG Keysudo install -m 0755 -d /etc/apt/keyringssudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.ascsudo chmod a+r /etc/apt/keyrings/docker.asc# 将软件源增加到 apt 源列表并更新源信息echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \sudo tee /etc/apt/sources.list.d/docker.list > /dev/nullsudo apt-get update -
安装 Docker Engine
最新版本 sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin特定版本 # 列出版本列表apt-cache madison docker-ce | awk '{ print $3 }'# 安装特定版本,例如 5:27.5.0-1~ubuntu.24.04~nobleVERSION_STRING=5:27.5.0-1~ubuntu.24.04~noblesudo apt-get install docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING containerd.io docker-buildx-plugin docker-compose-plugin
Docker 使用
基本命令
命令 | 作用 | 示例 |
---|---|---|
docker run | 运行一个容器 | docker run -d ubuntu |
docker ps | 查看容器列表 | docker ps -a |
docker stop | 停止一个或多个容器 | docker stop 123456 |
docker start | 启动已停止的容器 | docker start 123456 |
docker restart | 重启一个容器 | docker restart 123456 |
docker rm | 删除一个或多个容器 | docker rm 123456 |
docker images | 查看镜像列表 | docker images |
docker build | 构建一个镜像 | docker build -t myimage . |
docker rmi | 删除一个或多个镜像 | docker rmi ubuntu |
docker pull | 拉取一个镜像 | docker pull ubuntu |
docker push | 推送一个镜像 | docker push myimage |
docker exec | 在容器中执行命令 | docker exec -it 123456 /bin/bash |
docker logs | 查看容器日志 | docker logs 123456 |
docker compose up | 从 yml 启动多容器应用 | docker compose up -d |
docker compose down | 停止多容器应用 | docker compose down |
docker login | 登录到容器仓库 | docker login registry.example.com |
docker logout | 退出容器仓库 | docker logout registry.example.com |
Dockerfile
Dockerfile 是一个用来构建镜像的文件,包含了一条条构建镜像的指令。Docker 根据 Dockerfile 中的指令来构建镜像。以一个 Spring Boot 应用的 Dockerfile 为例:
# 使用 OpenJDK 11 作为基础镜像FROM openjdk:11-jdkWORKDIR /app# 将本地文件复制到镜像中COPY app-0.0.1-SNAPSHOT.jar.tar /app/app.tar# 解压并删除文件RUN tar -xvf app.tar && \ rm -f app.tar# 设置自定义环境变量ENV APP_HOME=/app# 暴露 8080 端口EXPOSE 8080# 启动 Spring Boot 应用CMD ["java", "-jar", "app.jar"]
Docker Compose
Docker Compose 是一个用来定义和运行多容器 Docker 应用的工具。可以通过一个预先定义的 docker-compose.yml
文件来配置多个容器,组合为一个完整的应用服务,便于部署、运维。以一个简单的前后端分离应用为例,我们已经有了一个前端应用镜像 myfrontend
和一个后端应用镜像 mybackend
,我们可以通过 Docker Compose 来定义并运行这两个容器:
version: '3.8'services: frontend: image: myfrontend ports: - '80:80' backend: image: mybackend ports: - '8080:8080'
将这个文件保存为 docker-compose.yml
,然后在同一目录下运行 docker-compose up -d
即可启动这两个容器。使用 docker-compose down
可以停止这两个容器。