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,命令如下:
# 卸载 Docker Engine、CLI、containerd 和 Docker Compose 软件包: 
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。

  1. 设置 Docker 的 apt 存储库。
# Add Docker's official GPG key:
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
# Add the repository to Apt sources:
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
  1. 安装 Docker 软件包 (最新版本)。
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  1. 通过运行镜像来验证 Docker Engine 安装是否成功 `hello-word``
sudo docker run hello-world
# 当你看到一下信息的时候,说明 Docker 安装成功。
# Unable to find image 'hello-world:latest' locally
# latest: Pulling from library/hello-world
# c1ec31eb5944: Pull complete 
# Digest: sha256:ac69084025c660510933cca701f615283cdbb3aa0963188770b54c31c8962493
# Status: Downloaded newer image for hello-world:latest
# Hello from Docker!
# This message shows that your installation appears to be working correctly.
# To generate this message, Docker took the following steps:
#  1. The Docker client contacted the Docker daemon.
#  2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
#     (amd64)
#  3. The Docker daemon created a new container from that image which runs the
#     executable that produces the output you are currently reading.
#  4. The Docker daemon streamed that output to the Docker client, which sent it
#     to your terminal.
# To try something more ambitious, you can run an Ubuntu container with:
#  $ docker run -it ubuntu bash
# Share images, automate workflows, and more with a free Docker ID:
#  https://hub.docker.com/
# For more examples and ideas, visit:
#  https://docs.docker.com/get-started/

此命令下载测试映像并在容器中运行它。当容器运行时,它会打印一条确认消息并退出。

您现在已经成功安装并启动了 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] # 基于 IMAGE 构建新的镜像
RUN [COMMAND] # 执行命令
ENV [ENVIRONMENT VARIABLE] # 设置环境变量
WORKDIR [DIRECTORY] # 设置工作目录
COPY [SOURCE] [DESTINATION] # 复制文件
CMD [COMMAND] # 设置容器启动时执行的命令,eg: CMD ["cd","/xxx"], 空格使用 `,` 代替,还有其他方式可访问下方链接。
# Docker Dockerfile 相关命令

根据 Dockerfile 创建自定义镜像

docker build -t dockerfile .
or
docker build -t dockerfile:TagName . # 这个还没尝试过
# 此时 Dockerfile 应该是可执行文件,文件设置成可执行文件命令请自行查询
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
# 执行 compose,创建容器并启动
docker compose up
# 执行 compose, 创建容器并在后台运行
docker compose up -d
# 执行 compose, 停止容器
docker compose down
# 注意:compose up 命令中 
# 如果没有安装对应的镜像需要 docker-compose.yaml + Dockerfile 文件一起使用。docker compose 命令会先执行 Dockerfile,再执行 docker-compose.yaml。
# 如果已经安装对应的镜像 就只需要 docker-compose.yaml 即可。

更多内容 请产看 Compose 文档

# Dockerfile 和 Compose.yaml 搭配使用

推荐使用配置文件的此种方式(方便快捷)

Dockerfile
FROM [IMAGE] # 基于 IMAGE 构建新的镜像
RUN [COMMAND] # 执行命令
ENV [ENVIRONMENT VARIABLE] # 设置环境变量
WORKDIR [DIRECTORY] # 设置工作目录
COPY [SOURCE] [DESTINATION] # 复制文件
CMD [COMMAND] # 设置容器启动时执行的命令,eg: CMD ["cd","/xxx"], 空格使用 `,` 代替,还有其他方式可访问下方链接。
docker-compose.yaml
networks: # 推荐使用,可以多个服务共同使用,编写和维护方便
  [NETWORK NAME]: # 网络名(可自定义)
    devices: [NETWORK DEVICE] # 网络设备 host, bridge, none, container name
services:
  [SERVICE NAME]: # 服务名(可自定义)
    # build: . # 指定 Dockerfile 所在路径。 推荐:只有一个 Dockerfile 使用
    build: # 指定 Dockerfile 所在路径以及名字。 推荐:多个 Dockerfile 使用。多个 Dockerfile 的时候 Dockerfile 可以带个后缀区分。eg: Dockerfile.db、Dockerfile.rdb 等等。
      context: . # 指定 Dockerfile 所在路径
      dockerfile: [Dockerfile FILE NAME] # 指定 Dockerfile 名称,每个服务只能用一个 Dockerfile
    image: [IMAGE NAME:IMAGE TAG] # 自定义构建镜像名称和标签
    container_name: [CONTAINER NAME] # 容器名字
    # network_mode: [NETWORK MODE] # 指定容器的网络模式 [NETWORK MODE] host, bridge, none, container name。可能与服务中的 networks 和 服务外的 networks 配置冲突
    networks: [NETWORK NAME] # 指定网络 结合服务外部自定义的网络模式使用(推荐使用)
    ports:
      - "宿主机 PORT:CONTAINER PORT"
      - "宿主机 PORT:CONTAINER PORT"
    volumes:
      - 宿主机资源路径:容器中资源路径  #挂载文件 宿主机和容器中的内容是互通的,一个变化另一个也会变化
      - 宿主机资源路径+文件:容器中资源路径+文件  #挂载文件 宿主机和容器中的内容是互通的,一个变化另一个也会变化
    restart: unless-stopped # 容器自动重启
# 运行命令
# 执行 compose,生成镜像、创建容器并启动程序
docker compose up
# 执行 compose, 生成镜像、创建容器并启动程序
docker compose up -d

# Docker 相关命令

# Docker 基础命令

# docker 启动
sudo systemctl start docker
# docker 重启
sudo systemctl restart docker
# 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]
# 查看本地镜像列表
docker images

列表参数说明:

  • 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 ps
# 显示所有的容器,包括未运行的。
docker ps -a
# 容器重新启动、停止、重启
# 启动容器
docker start [CONTAINER NAME/ID]
# 注意:此命令若要启动 create 创建的容器,必须要在 create 创建容器时添加 -it 参数才行
# 停止容器
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 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:

  • attach 命令
docker attach [CONTAINER NAME/ID]

注意: 如果从这个容器退出,会导致容器的停止。

  • exec 命令 (推荐使用)
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 ls
# 查看网络详情
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 命令

过去无法挽回,未来可以改变,有的人成日殚精竭虑,却掀不起什么风浪,有的人却因一念之差,让世界天翻地覆,这就是命运权重。

阅读次数

请我喝[茶]~( ̄▽ ̄)~*

NIDLH 微信支付

微信支付

NIDLH 支付宝

支付宝