Docker: 是一种容器化平台,用于创建、部署和运行应用程序。Docker 允许将应用程序和其依赖项打包到容器中,使其在不同环境中具有一致的运行方式。
腾讯云镜像
阿里云镜像
Docker 文档
# 安装与使用
# Linux (Ubuntu server) 安装 Docker
这里安装的是 Docker Engine,不是 Docker Desktop。
# 卸载所有与 Docker Engine 可能有冲突的包
| for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done |
- 此时,apt-get 可能会告诉你没有安装这些包。那就可以直接进入安装流程了
- 注意: /var/lib/docker/ 卸载 Docker 时,不会自动删除存储的映像、容器、卷和网络。如需要完整卸载 Docker Engine,命令如下:
| |
| sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras |
| |
| |
| sudo rm -rf /var/lib/docker |
| sudo rm -rf /var/lib/containerd |
# 使用 apt 存储库安装
在新主机上首次安装 Docker Engine 之前,需要设置 Docker 存储库。之后,您可以从存储库安装和更新 Docker。
- 设置 Docker 的 apt 存储库。
| |
| sudo apt-get update |
| |
| sudo apt-get install ca-certificates curl gnupg |
| |
| sudo install -m 0755 -d /etc/apt/keyrings |
| |
| curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg |
| |
| sudo chmod a+r /etc/apt/keyrings/docker.gpg |
| |
| |
| echo \ |
| "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ |
| $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ |
| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null |
| |
| sudo apt-get update |
- 安装 Docker 软件包 (最新版本)。
| sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin |
- 通过运行镜像来验证 Docker Engine 安装是否成功 `hello-word``
| sudo docker run hello-world |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
此命令下载测试映像并在容器中运行它。当容器运行时,它会打印一条确认消息并退出。
您现在已经成功安装并启动了 Docker Engine。
# 快速入门
# Docker 三个基本概念
# Docker 镜像 Image
Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
# Docker 容器 Container
Docker 中的容器,可以被理解为一个轻量级的、独立的、可执行的软件包,其中包含了运行一个应用程序所需的所有内容。容器提供了一种隔离和标准化的方式,使得应用程序可以在任何支持 Docker 的环境
中运行,而无需考虑底层系统的细节。
# Docker 仓库 Repository
Docker 仓库(Docker Registry)是用于存储和管理 Docker 镜像的服务。它是一个中央的存储库,允许用户上传、下载和分享 Docker 镜像。
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
Docker 的常规用法都是 Docker -> Images (支持多个) -> container (支持多个)
# Docker 配置文件
# Docker Dockerfile
Dockerfile 是用来自定义镜像,定义属于自己的个性化 Docker 镜像。可以单独运行也可以与 Compose.yaml 搭配使用。
Dockerfile | FROM [IMAGE] |
| RUN [COMMAND] |
| ENV [ENVIRONMENT VARIABLE] |
| WORKDIR [DIRECTORY] |
| COPY [SOURCE] [DESTINATION] |
| CMD [COMMAND] |
# Docker Dockerfile 相关命令
根据 Dockerfile 创建自定义镜像
| docker build -t dockerfile . |
| or |
| docker build -t dockerfile:TagName . |
| |
| |
| docker build -t Dockerfile . |
| or |
| docker build -t Dockerfile:TagName . |
更多内容 请产看 Dockerfile 文档
# Docker Compose
Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YAML 文件来配置应用程序的服务。然后,使用命令就可以根据配置创建并启动所有服务。 Compose 可以单独使用也可与 Dockerfile 搭配使用。单独使用时,需要提前安装 Docker Image。
docker-compose.yaml | services: |
| [SERVICE NAME]: |
| container_name: [CONTAINER NAME] |
| image: [IMAGE NAME:IMAGE TAG] |
| ports: |
| - "宿主机 PORT:CONTAINER PORT" |
| - "宿主机 PORT:CONTAINER PORT" |
| volumes: |
| - 宿主机资源路径:容器中资源路径 |
| - 宿主机资源路径+文件:容器中资源路径+文件 |
| restart: unless-stopped |
# Docker Compose 相关命令
根据 Compose 生成配置容器并运行
| |
| docker compose version |
| |
| docker compose up |
| |
| docker compose up -d |
| |
| docker compose down |
| |
| |
| |
更多内容 请产看 Compose 文档
# Dockerfile 和 Compose.yaml 搭配使用
推荐使用配置文件的此种方式(方便快捷)
Dockerfile | FROM [IMAGE] |
| RUN [COMMAND] |
| ENV [ENVIRONMENT VARIABLE] |
| WORKDIR [DIRECTORY] |
| COPY [SOURCE] [DESTINATION] |
| CMD [COMMAND] |
docker-compose.yaml | networks: |
| [NETWORK NAME]: |
| devices: [NETWORK DEVICE] |
| services: |
| [SERVICE NAME]: |
| |
| build: |
| context: . |
| dockerfile: [Dockerfile FILE NAME] |
| image: [IMAGE NAME:IMAGE TAG] |
| container_name: [CONTAINER NAME] |
| |
| networks: [NETWORK NAME] |
| ports: |
| - "宿主机 PORT:CONTAINER PORT" |
| - "宿主机 PORT:CONTAINER PORT" |
| volumes: |
| - 宿主机资源路径:容器中资源路径 |
| - 宿主机资源路径+文件:容器中资源路径+文件 |
| restart: unless-stopped |
# 运行命令
| |
| docker compose up |
| |
| docker compose up -d |
# Docker 相关命令
# Docker 基础命令
| |
| sudo systemctl start docker |
| |
| |
| sudo systemctl restart docker |
| |
| |
| sudo systemctl stop docker |
# Docker Images 相关命令
# 查找 Docker Hub 中镜像
Docker Hub (Docker 官方镜像网站) 查找需要的镜像或者使用一下指令进行:
| docker search [IMAGE NAME] |
返回数据镜像参数说明
- NAME: 镜像仓库源的名称
- DESCRIPTION: 镜像的描述
- OFFICIAL: 是否 docker 官方发布
- stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
- AUTOMATED: 自动构建。
# 获取新的镜像
| docker pull [IMAGE NAME]:[IMAGE TAG] |
# 查看本地镜像列表
列表参数说明:
- REPOSITORY:表示镜像的仓库源
- TAG:镜像的标签
- IMAGE ID:镜像 ID
- CREATED:镜像创建时间
- SIZE:镜像大小
有多个同源镜像,表示不同版本。
# 删除本地镜像
| |
| docker rmi [IMAGE NAME/ID] |
| |
| docker rmi -f [IMAGE NAME/ID] |
| docker rmi --force [IMAGE NAME/ID] |
# Docker Container 相关命令
# 创建容器
| docker run -itd -p [宿主机 PORT]:[CONTAINER PORT] --name [CONTAINER NAME] [IMAGE NAME:ID] /bin/bash |
参数说明:
- -i: 交互式操作。
- -t: 终端。
- ubuntu: ubuntu 镜像。
- /bin/bash 或者 /bin/sh:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash 或 /bin/sh。
- 只创建容器
| docker create -it --name [CONTAINER NAME] [IMAGE NAME:ID] |
# 查看容器列表
# 容器重新启动、停止、重启
| |
| docker start [CONTAINER NAME/ID] |
| |
| |
| |
| docker stop [CONTAINER NAME/ID] |
| |
| |
| docker restart [CONTAINER NAME/ID] |
| |
| |
| docker update --restart unless-stopped [CONTAINER NAME/ID] |
# 停止自启动容器
| rm -rf :/var/lib/docker/containers/容器ID |
| systemctl stop docker.socket |
| systemctl stop docker |
| systemctl start docker |
# 删除容器
| docker rm [CONTAINER NAME/ID] |
# 进入容器
在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:
| docker attach [CONTAINER NAME/ID] |
注意: 如果从这个容器退出,会导致容器的停止。
| docker exec -it [CONTAINER NAME/ID] /bin/bash |
| docker exec -it [CONTAINER NAME/ID] /bin/sh |
注意: 如果从这个容器退出,容器不会停止,这就是为什么推荐大家使用 docker exec 的原因;
# docker 容器拷贝文件
| docker cp 主机文件 [CONTAINER NAME]:[CONTAINER URL] |
| docker cp [CONTAINER NAME]:[CONTAINER URL] [宿主机 URL] |
# Docker 网络命令
# 查看网络列表
# 查看网络详情
| docker network inspect [NETWORK NAME] |
# 创建网络 (推荐使用配置文件,这种方式可以自定义网络模式,具体浏览官网)
| docker network create [NETWORK NAME] |
# 删除网络
| docker network rm [NETWORK NAME] |
# 更新容器网络
| docker network connect [NETWORK NAME] [CONTAINER NAME] |
# Docker 日志命令
# 查看容器日志
| docker logs [CONTAINER NAME/ID] |
更多 Docker 命令
过去无法挽回,未来可以改变,有的人成日殚精竭虑,却掀不起什么风浪,有的人却因一念之差,让世界天翻地覆,这就是命运权重。