Skip to content

docker

Docker 是一种开源的容器化平台,它可以让开发者打包、部署和运行应用程序及其依赖项,以便在不同的环境中进行部署。Docker 的核心是容器,容器是一种轻量级的虚拟化技术,可以将应用程序及其依赖项封装在一个单独的运行时环境中,从而提供了一种快速、可移植和可靠的部署方式。

基本概念

  • 镜像(Image):镜像是一个只读的文件系统,其中包含应用程序和其依赖项。Docker 通过使用 Dockerfile 来定义镜像的构建规则,这样可以使得开发者可以重复构建相同的镜像,并且可以跨多个环境使用。
  • 容器(Container):容器是由镜像启动的一个运行时实例,它提供了一个独立的、可移植的运行环境,其中包含应用程序及其依赖项。容器可以被启动、停止、删除和管理,而不会影响到其他容器或宿主机。
  • 仓库(Registry):仓库是存储 Docker 镜像的地方,它类似于一个代码仓库,可以从中拉取或推送镜像。Docker 官方提供了一个公共的仓库 Docker Hub,开发者也可以使用私有仓库。

命令分类

Docker 命令可以大致分为以下几类:

  • 镜像管理命令:包括 docker build、docker pull、docker push、docker tag、docker rmi 等,用于构建、推送、拉取、打标签和删除 Docker 镜像。
  • 容器管理命令:包括 docker run、docker start、docker stop、docker restart、docker rm、docker ps 等,用于创建、启动、停止、删除和管理 Docker 容器。
  • 仓库管理命令:包括 docker login、docker logout、docker search、docker pull 等,用于登录、登出、搜索和拉取 Docker 镜像仓库。
  • 网络管理命令:包括 docker network create、docker network ls、docker network inspect 等,用于创建、列出和查看 Docker 网络。
  • 数据管理命令:包括 docker volume create、docker volume ls、docker volume inspect 等,用于创建、列出和查看 Docker 数据卷。
  • 其他命令:包括 docker info、docker version、docker exec、docker logs 等,用于查看 Docker 的信息、版本、容器日志输出和在容器中执行命令等操作。

镜像管理命令

docker images:列出镜像。

  • docker images:列出所有本地的镜像
  • docker images -q:只列出镜像的 ID,可以用于其他命令中的参数;

docker build:根据 Dockerfile 构建新的镜像。

  • docker build -t <image_name> <Dockerfile_path>:使用指定的 Dockerfile 构建一个新的镜像,并指定镜像的名称,<image_name>:<tag> 可以指定名称和标签;
  • docker build -t <image_name> -:使用从标准输入中读取的 Dockerfile 构建一个新的镜像;
  • docker build -t <image_name> --build-arg <key>=<value> <Dockerfile_path>:指定构建时需要使用的参数;
  • docker build -t <image_name> --no-cache=true <Dockerfile_path>:禁用缓存机制,强制重新构建所有层;

docker rmi:删除一个或多个镜像。

  • docker rmi <image_name>:删除指定的镜像;
  • docker rmi <image_name_1> <image_name_2> <image_name_3>:删除多个镜像;
  • docker rmi -f <image_name>:强制删除镜像;
  • docker rmi $(docker images -aq):删除所有镜像;

容器管理命令

docker run:启动一个新的容器,可以指定镜像名称、容器名称、端口映射、环境变量等参数。

  • docker run <image_name>:启动一个新的容器;
  • docker run -it <image_name> /bin/bash:启动交互式容器,并在其中运行 /bin/bash 命令;
  • docker run -d <image_name>:守护进程模式,容器将在后台运行;
  • docker run --name <container_name> <image_name>:指定容器名称;
  • docker run -p <host_port>:<container_port> <image_name>:指定端口映射;
  • docker run -v <host_path>:<container_path> <image_name>:挂载数据卷;
  • docker run -e <key=value> <image_name>:指定容器内部的环境变量;

docker ps:列出容器。

  • docker ps:列出所有正在运行的容器
  • docker ps -a:列出所有容器;
  • docker ps -q:只列出容器的 ID,可以用于其他命令中的参数;

docker stop:停止一个正在运行的容器。

  • docker stop <container_name>:停止指定容器;
  • docker stop <container_name_1> <container_name_2> <container_name_3>:停止多个容器;
  • docker stop $(docker ps -q):停止所有容器;
  • docker stop -t <timeout> <container_name>:指定时间(秒)后停止容器;

docker rm:删除一个或多个容器。

  • docker rm <container_name>:删除指定的容器;
  • docker rm <container_name_1> <container_name_2> <container_name_3>:删除多个容器;
  • docker rm -f <container_name>:强制删除容器;
  • docker rm $(docker ps -aq):删除所有容器;

docker exec:在正在运行的容器中执行命令。

  • docker exec -it <container_name> /bin/bash:进入容器的 Shell 环境;
  • docker exec <container_name> <command>:在容器中执行命令;
  • docker exec -it <container_name> <command>:在容器中以交互模式执行命令;
  • docker exec -u <user> <container_name> <command>:指定执行命令的用户;
  • docker exec -w <workdir> <container_name> <command>:指定工作目录;

仓库管理命令

docker push:将镜像推送到仓库,推送前可使用 docker login <registry_url> 登录到指定的 Docker 镜像仓库中,再推送。

  • docker push <image_name>:上传镜像;
  • docker push <image_name>:<tag>:传镜像并指定标签;
  • docker push <registry_url>/<image_name>:上传镜像到自定义镜像仓库;
  • docker push <registry_url>/<image_name>:<tag>:上传镜像到自定义镜像仓库并指定标签;

docker pull:从仓库拉取镜像。

  • docker pull <image_name>:下载镜像;
  • docker pull <image_name>:<tag>:下载镜像并指定标签;
  • docker pull <registry_url>/<image_name>:下载镜像从自定义镜像仓库;
  • docker pull <registry_url>/<image_name>:<tag>:下载镜像从自定义镜像仓库并指定标签;
  • docker pull <image_name_1> <image_name_2> <image_name_3>:下载多个镜像;

其它命令

docker inspect:查看容器的详细信息。

  • docker inspect <container_name>:查看容器的详细信息;
  • docker inspect <image_name>:查看镜像的详细信息;
  • docker inspect <network_name>:查看网络的详细信息;

docker logs:查看容器的日志输出。

docker-compose:使用 Docker Compose 来管理多个容器的启动、停止和部署。

私有仓库

  1. 安装 Docker 私有仓库;
sh
docker run -d -p 5000:5000 --name registry registry
  1. 推送镜像
sh
docker push localhsot:5000/demo:v1
  1. 推送镜像
sh
docker pull localhsot:5000/demo:v1

注意:

  1. docker 默认使用 https 传输,使用 http 时,需要在本地配置文件中注册仓库地址;
json
"insecure-registries": [
  "localhost:5000",
  "example.com", // 域名访问
  "1.1.1.1" // ip 访问
]

docker-compose

docker-compose 是 Docker 官方提供的一个工具,用于管理多个 Docker 容器的启动、停止、构建、删除等操作。它可以通过编写一个 docker-compose.yml 文件来描述应用程序的服务组件,并通过这个文件来启动、停止、构建和管理这些组件。

docker-compose.yml 常见配置如下:

yml
version: '3'

services:
  web: # 定义服务组件名字
    build: . # 指定 Dockerfile 文件的位置来构建镜像。
    container_name: container_name # 指定容器的名称。
    command: ls # 指定容器启动时执行的命令。
    networks: # 指定容器所在的网络。
      - web
    ports: # 指定容器的端口映射规则。
      - '5000:5000'
    depends_on: # 指定该服务依赖的其他服务。
      - db
  db:
    image: postgres # 指定已经构建好的镜像的名称。
    volumes: # 指定容器和宿主机之间的文件映射关系
      - db-data:/var/lib/postgresql/data
    environment: # 指定容器运行时的环境变量
      POSTGRES_PASSWORD: example

volumes: # 定义主机文件映射
  db-data:

常用命令如下:

  • docker-compose up:构建、创建、启动和连接指定的 Docker Compose 服务组件。
  • docker-compose down:停止并删除正在运行的 Docker Compose 服务组件。
  • docker-compose build:构建 Docker Compose 服务组件所需的镜像。
  • docker-compose push:将 Docker Compose 服务组件所需的镜像推送到镜像仓库。
  • docker-compose pull:从镜像仓库中拉取 Docker Compose 服务组件所需的镜像。
  • docker-compose logs:查看 Docker Compose 服务组件的日志。
  • docker-compose ps:列出当前正在运行的 Docker Compose 服务组件。
  • docker-compose restart:重启 Docker Compose 服务组件。
  • docker-compose exec:在 Docker Compose 服务组件中执行命令。

如果不想操作所有服务组件,可以在命令后跟上服务组件的名字,例如:

sh
docker-compose up web

上述命令只会启动名为 web 的服务组件。