Appearance
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 来管理多个容器的启动、停止和部署。
私有仓库
- 安装 Docker 私有仓库;
sh
docker run -d -p 5000:5000 --name registry registry
- 推送镜像
sh
docker push localhsot:5000/demo:v1
- 推送镜像
sh
docker pull localhsot:5000/demo:v1
注意:
- 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 的服务组件。