【Docker】全面掌握Docker命令超详细入门教程:从基础到实战部署一文概括!

4,501 阅读9分钟

在这里插入图片描述

1. Docker简介

Docker是一种开源的容器化平台,它允许开发者将应用程序及其依赖项打包到一个轻量级、可移植的容器中。这些容器可以在任何支持Docker的环境中运行,无论是本地开发环境、测试环境还是生产环境。

体验最新GPT系列模型、支持自定义助手、文件上传等功能:ChatMoss & ChatGPT-AI中文版

容器与虚拟机的区别:

  • 轻量级:容器共享宿主机的操作系统内核,而虚拟机则需要完整的操作系统,导致虚拟机更为笨重。
  • 启动速度:容器启动速度极快,通常在秒级,而虚拟机启动可能需要数分钟。
  • 资源利用率:容器更高效地利用系统资源,因为它们共享宿主机的内核。

通过Docker,开发者可以实现“一次构建,处处运行”的目标,大大提升了开发和部署效率。 在这里插入图片描述

2. Docker安装与配置

在深入学习Docker命令之前,首先需要在您的开发环境中安装并配置Docker。以下以Ubuntu为例介绍安装步骤:

安装步骤

  1. 更新现有的软件包列表

    sudo apt-get update
    
  2. 安装必要的软件包,允许apt通过HTTPS使用仓库

    sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
    
  3. 添加Docker的官方GPG密钥

    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    
  4. 添加Docker的APT仓库

    sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
    
  5. 更新APT包列表,并安装Docker

    sudo apt-get update
    sudo apt-get install docker-ce
    
  6. 验证Docker安装是否成功

    sudo docker run hello-world
    

    如果看到“Hello from Docker!”的消息,则表示安装成功。

配置Docker用户权限

为避免每次使用Docker命令都需要sudo,可以将当前用户添加到docker组:

sudo usermod -aG docker ${USER}

然后重新登录以使更改生效。 在这里插入图片描述

3. 基本Docker命令详解

掌握Docker的基本命令是使用Docker的第一步。以下将介绍几组常用的Docker命令,帮助您快速上手。

体验最新GPT系列模型、支持自定义助手、文件上传等功能:ChatMoss & ChatGPT-AI中文版

docker run

docker run命令用于创建并启动一个新的容器。其基本语法如下:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

常用选项:

  • -d:后台运行容器,返回容器ID。
  • -it:以交互模式运行容器,常用于调试或进入容器内部。
  • --name:为容器指定一个名称。
  • -p:映射容器端口到宿主机端口,例如-p 8080:80

示例:

docker run -d --name my-nginx -p 8080:80 nginx

此命令将以后台模式运行一个名为my-nginx的Nginx容器,并将容器的80端口映射到宿主机的8080端口。

在这里插入图片描述

docker ps

docker ps命令用于列出当前运行的容器。默认情况下,只显示正在运行的容器。

常用选项:

  • -a:显示所有容器,包括已停止的。
  • -q:只显示容器ID。

示例:

docker ps -a

此命令将列出所有容器,无论其当前状态如何。

docker stopdocker start

用于停止和启动容器。

停止容器:

docker stop [CONTAINER_ID或NAME]

启动容器:

docker start [CONTAINER_ID或NAME]

示例:

docker stop my-nginx
docker start my-nginx

docker exec

docker exec命令允许在运行中的容器内执行命令,常用于进入容器内部进行操作。

基本语法:

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

常用选项:

  • -it:以交互模式进入容器。

示例:

docker exec -it my-nginx /bin/bash

此命令将打开一个交互式的bash shell,让您可以在my-nginx容器内执行命令。

4. 镜像管理命令

镜像是Docker容器的基础,理解如何管理镜像对于高效使用Docker至关重要。

docker build

docker build命令用于根据Dockerfile构建镜像。

基本语法:

docker build [OPTIONS] PATH | URL | -

常用选项:

  • -t:为构建的镜像指定标签。

示例:

docker build -t my-app:latest .

此命令将在当前目录下查找Dockerfile,并构建一个标签为my-app:latest的镜像。

在这里插入图片描述

docker pulldocker push

用于从Docker仓库拉取和推送镜像。

拉取镜像:

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

示例:

docker pull nginx:latest

此命令将从Docker Hub拉取最新版本的Nginx镜像。

推送镜像:

docker push [OPTIONS] NAME[:TAG]

示例:

docker push my-repo/my-app:latest

在推送之前,确保您已登录到目标Docker仓库,并且镜像标签正确。

docker images

docker images命令用于列出本地存储的所有镜像。

基本语法:

docker images [OPTIONS] [REPOSITORY[:TAG]]

示例:

docker images

此命令将显示所有本地镜像的列表,包括仓库名、标签、镜像ID、创建时间和大小。

docker rmi

docker rmi命令用于删除本地镜像。

基本语法:

docker rmi [OPTIONS] IMAGE [IMAGE...]

示例:

docker rmi my-app:latest

此命令将删除标签为my-app:latest的镜像。

5. 容器管理命令

除了镜像管理,容器的管理同样重要。以下介绍一些常用的容器管理命令。

docker rm

docker rm命令用于删除一个或多个容器。

基本语法:

docker rm [OPTIONS] CONTAINER [CONTAINER...]

常用选项:

  • -f:强制删除正在运行的容器。
  • -v:删除与容器关联的卷。

示例:

docker rm my-nginx

此命令将删除名为my-nginx的容器。如果容器正在运行,需要使用-f选项强制删除。

docker logs

docker logs命令用于查看容器的日志输出,常用于调试和监控。

基本语法:

docker logs [OPTIONS] CONTAINER

常用选项:

  • -f:跟随日志输出。
  • --tail:仅显示最近的指定行数。

示例:

docker logs -f my-nginx

此命令将实时显示my-nginx容器的日志输出。

docker inspect

docker inspect命令用于获取容器或镜像的详细信息,输出为JSON格式。

基本语法:

docker inspect [OPTIONS] NAME|ID [NAME|ID...]

示例:

docker inspect my-nginx

此命令将显示my-nginx容器的详细配置信息,包括网络设置、挂载卷、环境变量等。

6. 网络与存储命令

Docker提供了强大的网络和存储管理功能,以下介绍相关命令。

docker network

docker network命令用于管理Docker网络,支持创建、自定义和删除网络。

常用子命令:

  • create:创建一个新的网络。
  • ls:列出所有网络。
  • rm:删除一个或多个网络。

示例:

docker network create my-network
docker network ls
docker network rm my-network

docker volume

docker volume命令用于管理数据卷,帮助持久化容器数据。

常用子命令:

  • create:创建一个新的数据卷。
  • ls:列出所有数据卷。
  • rm:删除一个或多个数据卷。
  • inspect:获取数据卷的详细信息。

示例:

docker volume create my-volume
docker volume ls
docker volume rm my-volume

7. 高级Docker命令

掌握高级命令可以让您更高效地使用Docker,以下介绍几个常用的高级命令。

docker-compose

docker-compose是一个用于定义和管理多容器Docker应用程序的工具。通过docker-compose.yml文件,您可以一次性启动、停止和管理多个相关的容器。

基本语法:

docker-compose [OPTIONS] COMMAND [ARGS...]

常用命令:

  • docker-compose up:启动并运行所有服务。
  • docker-compose down:停止并移除所有服务。
  • docker-compose build:构建或重建服务。

示例:

# docker-compose.yml
version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example

使用以下命令启动应用:

docker-compose up -d

docker swarm

docker swarm是Docker的原生集群管理和编排工具,允许您将多个Docker主机组成一个集群,并在其上部署服务。

基本命令:

  • docker swarm init:初始化一个新的Swarm集群。
  • docker swarm join:将节点加入到Swarm集群。
  • docker service create:在Swarm上创建一个新服务。
  • docker service ls:列出所有服务。
  • docker service rm:删除服务。

示例:

docker swarm init
docker service create --name my-service -p 80:80 nginx
docker service ls

在这里插入图片描述

8. 常见问题与解决方案

在使用Docker的过程中,可能会遇到各种问题。以下列出一些常见问题及其解决方案。

问题1:docker run命令失败,提示“Cannot connect to the Docker daemon”

解决方案:

  • 确认Docker服务是否正在运行:

    sudo systemctl status docker
    
  • 如果未运行,启动Docker服务:

    sudo systemctl start docker
    
  • 确认当前用户是否在docker组中。如果没有,添加用户到docker组:

    sudo usermod -aG docker ${USER}
    

    然后重新登录。

问题2:删除镜像时报错“image is being used by running container”

解决方案:

  • 停止并删除使用该镜像的容器:

    docker stop [CONTAINER_ID或NAME]
    docker rm [CONTAINER_ID或NAME]
    
  • 然后重新删除镜像:

    docker rmi [IMAGE_ID或NAME]
    

问题3:容器内无法访问外部网络

解决方案:

  • 检查容器的网络配置,确保其连接到了正确的Docker网络。
  • 确认宿主机的防火墙设置允许容器访问外部网络。
  • 使用docker inspect查看容器的网络设置,必要时重新配置网络。

9. 实战案例:使用Docker进行应用部署

为了更好地理解Docker命令的实际应用,以下通过一个实战案例展示如何使用Docker部署一个简单的Web应用。

体验最新GPT系列模型、支持自定义助手、文件上传等功能:ChatMoss & ChatGPT-AI中文版

案例描述

我们将部署一个基于Nginx和MySQL的Web应用,使用Docker Compose进行编排。

步骤1:创建项目目录

mkdir docker-web-app
cd docker-web-app

步骤2:编写docker-compose.yml

version: '3'

services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - db

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: mydb
    volumes:
      - db-data:/var/lib/mysql

volumes:
  db-data:

步骤3:创建Nginx配置文件

在项目目录下创建nginx.conf

events { }

http {
    server {
        listen 80;
        location / {
            return 200 'Hello from Docker!';
            add_header Content-Type text/plain;
        }
    }
}

步骤4:启动应用

docker-compose up -d

步骤5:验证部署

在浏览器中访问http://localhost:8080,应看到“Hello from Docker!”的消息。

步骤6:查看容器状态

docker-compose ps

步骤7:停止和删除应用

docker-compose down

更多实用文章

【IDER、PyCharm】免费AI编程工具完整教程:ChatGPT Free - Support Key call AI GPT-o1 Claude3.5

【VScode】VSCode中的智能编程利器,全面揭秘ChatMoss & ChatGPT中文版

【OpenAI】获取OpenAI API Key的多种方式全攻略:从入门到精通,再到详解教程!!