Docker 容器命令大全:启动、停止、重启、镜像管理、备份、Docker compose,工作中常用的都帮你总结好了!

戳下方名片,关注并星标

回复“1024”获取2TB学习资源!

👉体系化学习:运维工程师打怪升级进阶之路 4.0

—   特色专栏  —

MySQL / PostgreSQL / MongoDB

ElasticSearch Hadoop Redis

Kubernetes / Docker / DevOps

Kafka / RabbitMQ / Zookeeper 

监控平台 / 应用与服务 / 集群管理

Nginx / Git / Tools OpenStack

‌大家好,我是民工哥!

Docker 容器作为轻量级、可移植的虚拟化技术,它已成为现代应用开发、部署和运维的核心工具。

以现代应用的“操作系统”著称,也是 DevOps 和云原生技术的基石。

Docker 特性与优点

“轻量、标准化、可移植”是 Docker 容器化技术的核心优势。

关键特性

轻量级:共享主机内核,无需完整操作系统,秒级启动速度,资源占用率低。相比 VM,容器启动时间缩短 90%+,资源利用率提升 3-5 倍。

标准化与一致性:通过 Dockerfile 定义镜像,确保开发、测试、生产环境完全一致。

可移植性:同一镜像可在 Linux、Windows、MacOS 上运行,无需修改代码。无缝集成 Kubernetes、AWS ECS 等云平台,实现混合云/多云部署。

快速扩展与弹性:结合 Kubernetes,轻松实现秒级扩容(如应对流量高峰)。

安全性:每个容器拥有独立的进程、网络和文件系统,避免冲突。

优点

提升开发效率:无需手动配置依赖,镜像即环境。

降低运维成本:通过 Docker Compose 或 Kubernetes,实现一键部署、升级和回滚。

加速交付周期:与 Jenkins、GitLab CI 等工具无缝对接,实现持续集成与交付。

强可靠性:镜像不可变,避免配置漂移导致的故障。单个容器崩溃不影响其他容器,系统稳定性提升。

支持微服务架构:每个微服务运行在独立容器中,互不干扰。不同服务可使用不同技术栈(如 Java、Python、Go)。

对比传统虚拟化的优势
特性传统虚拟机(VM)Docker 容器
启动时间

分钟级

秒级

资源占用

高(需完整 OS)

低(共享主机内核)

隔离性

强(硬件级隔离)

中(进程级隔离)

扩展性

复杂(需手动配置)

简单(自动编排)

适用场景

多租户、安全隔离

微服务、DevOps、CI/CD

Docker容器化适用场景
  • 微服务架构:将单体应用拆分为多个独立容器,提升可维护性。

  • DevOps 流水线:实现开发、测试、生产环境的一致性。

  • CI/CD 集成:与 Jenkins、GitLab CI 等工具结合,加速交付。

  • 混合云/多云部署:支持跨云平台迁移,避免厂商锁定。

  • 大数据与 AI:运行 Spark、TensorFlow 等框架,提升资源利用率。

因此,无论是运维、开发还是测试都需要掌握一定的Docker命令的基本使用,这样我们可以进行快速部署、管理容器化应用等操作,提高工作效率。

下面详细给大家介绍 Docker 容器的启动、停止、重启方法,包括使用 dockerstop、dockerkill 和 dockerrestart 命令,以及日常工作中常用的 Docker 命令,如 dockerps、dockerlogs、dockerexec等。以及容器数据备份、DockerCompose等内容。

容器启动、停止、重启方法

启动容器

启动已停止的容器

#命令基本语法格式
docker start <container_id_or_name>

示例:

docker start my_docker

创建并启动容器

#命令基本语法格式
docker run [options] <image_name> [command]

常用选项:

-d:后台运行容器。
--name:指定容器名称。
-p:端口映射(如 -p 8080:80)。
-v:挂载数据卷。

示例:

docker run -d --name my_container -p 8080:80 nginx
停止容器

优雅停止容器(发送 SIGTERM 信号,允许进程清理资源):

#命令基本语法格式
docker stop <container_id_or_name>

示例:

docker stop my_container

强制停止容器(发送 SIGKILL 信号,立即终止进程):

#命令基本语法格式
docker kill <container_id_or_name>

示例:

docker kill my_container
重启容器

重启已运行的容器

#命令基本语法格式
docker restart <container_id_or_name>

示例:

docker restart my_container

常用 Docker 命令

查看 Docker 容器信息
#查看docker容器版本
docker version
#查看docker容器信息
docker info
#查看docker容器帮助
docker --help
查看运行中的容器
#列出所有运行中的容器
docker ps

#列出所有容器(包括已停止的
docker ps -a
查看容器日志

实时查看容器日志

#命令基本语法格式
docker logs -f <container_id_or_name>

示例:

docker logs -f my_container

查看最近 N 行日志

#命令基本语法格式
docker logs --tail N <container_id_or_name>

示例:

docker logs --tail 100 my_container
进入容器执行命令

进入正在运行的容器

#命令基本语法格式
docker exec -it <container_id_or_name> /bin/bash

或:

#命令基本语法格式
docker exec -it <container_id_or_name> /bin/sh

示例:

docker exec -it my_container /bin/bash
Docker 镜像管理

镜像查看

#列出本地images
docker images

#含中间映像层
docker images -a

#只显示镜像ID
docker images -q

#含中间映像层
docker images -qa  

#显示镜像摘要信息(DIGEST列)
docker images --digests

#显示镜像完整信息
docker images --no-trunc

镜像下载

#基本语法格式
docker pull [选项] [镜像名[:标签]]

示例:

#下载最新版本的 Nginx 镜像:
docker pull nginx
#等价于:
docker pull nginx:latest

#下载特定版本的 Ubuntu 镜像:
docker pull ubuntu:20.04

镜像搜索

#搜索仓库nginx镜像
docker search nginx

# --filter=stars=600:只显示 starts>=600 的镜像
docker search --filter=stars=600 nginx

# --no-trunc 显示镜像完整 DESCRIPTION 描述
docker search --no-trunc nginx

# --automated :只列出 AUTOMATED=OK 的镜像
docker search  --automated nginx

镜像删除

#基本语法格式
docker rmi [选项] 镜像名或镜像ID

示例

#删除指定名称的镜像
docker rmi nginx
如果镜像有多个标签,docker rmi 默认会尝试删除所有标签。

#通过镜像ID删除镜像
docker rmi <镜像ID>
docker rmi abc123def456

#强制删除镜像
#如果镜像被容器使用,默认情况下无法删除。可以添加 -f 参数强制删除:
docker rmi -f nginx

#删除所有未使用的镜像
docker image prune

#删除所有未使用的镜像、网络、容器等(危险操作,需谨慎)
docker system prune -a

容器数据备份

导出容器为镜像

将容器保存为镜像

docker commit <container_id_or_name> <new_image_name>

示例:

docker commit my_container my_image
导出容器数据卷

备份容器数据卷到本地文件

docker run --rm -v <container_volume>:/backup -v $(pwd):/data busybox tar czvf /data/backup.tar.gz -C /backup .

示例:

  • 假设容器数据卷挂载在 /var/lib/mydata,本地目录为 /home/user/backup

docker run --rm -v /var/lib/mydata:/backup -v /home/user/backup:/data busybox tar czvf /data/backup.tar.gz -C /backup .
导入容器数据

从备份文件恢复数据

docker run --rm -v <local_directory>:/restore -v $(pwd):/data busybox tar xzvf /data/backup.tar.gz -C /restore

Dockerfile

Dockerfile 是一个文本文件,其中包含了一系列构建 Docker 镜像的指令。通过 Dockerfile,可以自动化地构建镜像,确保镜像的一致性和可重复性。

Dockerfile 通常由以下部分组成:

  • 基础镜像:指定镜像的基础环境。

  • 维护者信息(可选):镜像的作者信息。

  • 环境变量(可选):设置环境变量。

  • 工作目录:指定容器内的工作目录。

  • 复制文件:将主机文件复制到容器中。

  • 安装依赖:安装应用程序所需的依赖。

  • 暴露端口:容器监听的端口。

  • 启动命令:指定容器启动时运行的命令。

常用指令

FROM #指定基础镜像。
LABEL #为镜像添加元数据(如作者、版本等)。
RUN #执行命令,通常用于安装依赖或配置环境。
COPY #将主机文件复制到容器中。
ADD #类似于 COPY,但支持自动解压归档文件(如 .tar.gz)。
WORKDIR #设置工作目录,后续的指令(如 RUN、CMD)将在此目录下执行。
ENV #设置环境变量。
EXPOSE #容器监听的端口。
VOLUME #声明匿名卷,用于数据持久化。
CMD #指定容器启动时运行的默认命令。
ENTRYPOINT #指定容器启动时运行的命令。
USER #指定运行命令的用户。
ARG #定义构建时变量,用于在构建过程中传递参数。
ONBUILD #定义一个触发器,当其他镜像以此镜像为基础镜像时执行。

简单示例

# 使用官方 Python 3.9 镜像作为基础镜像
FROM python:3.9-slim

# 设置工作目录
WORKDIR /app

# 复制当前目录下的所有文件到容器中的 /app 目录
COPY . /app

# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt

# 暴露端口(仅用于文档说明)
EXPOSE 5000

# 启动命令
CMD ["python", "app.py"]

#构建镜像
docker build -t my-python-app .

#运行容器
docker run --rm my-python-app

Dockerfile 是构建 Docker 镜像的核心工具,通过合理编写 Dockerfile,可以实现镜像的自动化构建和高效管理。掌握 Dockerfile 的常用指令和最佳实践,可以帮助你构建出更安全、更稳定、更高效的 Docker 镜像。

Docker Compose

Docker Compose 是用于定义和运行多容器 Docker 应用的工具,通过 docker-compose.yml 文件配置服务、网络和卷。Docker Compose 极大地简化了多容器应用的部署和管理,特别是在开发、测试和预生产环境中。

Docker Compose 的核心功能
  • 定义多容器应用:通过一个 YAML 文件描述多个服务(容器)及其依赖关系。

  • 一键启动和停止:使用简单的命令即可启动、停止或重启整个应用。

  • 环境隔离:为每个服务指定不同的环境变量、配置和依赖。

  • 网络管理:自动创建和管理服务之间的网络连接。

  • 卷管理:方便地挂载卷,实现数据的持久化。

docker-compose.yml 文件结构

docker-compose.yml文件通常包含以下部分:

version  #指定 Compose 文件的版本。
services #定义应用中的服务(容器)。
networks #定义自定义网络。
volumes #定义自定义卷。
secrets和configs #管理敏感信息和配置文件。
基本配置示例 (docker-compose.yml)
version: '3.8'

services:
web:
    image:nginx:latest
    ports:
      -"8080:80"
    volumes:
      -./html:/usr/share/nginx/html
    networks:
      -mynetwork

app:
    build:./app
    environment:
      -FLASK_ENV=development
    depends_on:
      -db
    networks:
      -mynetwork

db:
    image:postgres:13
    environment:
      POSTGRES_USER:user
      POSTGRES_PASSWORD:password
      POSTGRES_DB:mydb
    volumes:
      -db_data:/var/lib/postgresql/data
    networks:
      -mynetwork

networks:
mynetwork:

volumes:
db_data:

基本操作命令

#启动服务
bashdocker-compose up -d

#停止服务
docker-compose down

#重启服务
docker-compose restart

#查看服务状态
docker-compose ps

#查看日志
docker-compose logs
#添加服务名称可以查看特定服务的日志,例如 docker-compose logs web。

#构建镜像
docker-compose build

#执行命令
docker-compose exec <service_name> <command>
##例如,进入 app 容器的交互式终端
docker-compose exec app bash

总结与建议

启动与停止:使用 docker startdocker stop 和 docker restart 管理容器生命周期。

日志与执行:通过 docker logs 和 docker exec 调试和操作容器。

数据备份:利用 tar 等工具结合容器卷实现数据备份与恢复。

Docker Compose:简化多容器应用管理,推荐使用 docker-compose 管理复杂服务。

通过掌握这些命令和工具,可以高效地管理 Docker 容器,提升开发运维效率。

👍 如果你喜欢这篇文章,请点赞并分享给你的朋友!

公众号读者专属技术群

构建高质量的技术交流社群,欢迎从事后端开发、运维技术进群(备注岗位,已在技术交流群的请勿重复添加微信好友)。主要以技术交流、内推、行业探讨为主,请文明发言。广告人士勿入,切勿轻信私聊,防止被骗。

扫码加我好友,拉你进群

运维工程师疯传的开源神器!实现文件秒级传输

告别选型焦虑!主流对象存储方案大比拼:本地存储、OSS、MinIO、Ceph、Apache Ozone 与 OpenIO

告别 Docker 依赖!是时候拥抱 Dockerless 了

再有谁说不会 k8s 四种 Service 类型!就把这个给他扔过去

一款免费、强大的文件同步神器,全平台支持,太香了!

GitHub 屏蔽所有中国 IP 访问

喂饭级教程!Docker 容器网络配置全攻略

栽了!使用盗版 VMware 被告了

开发都认为运维工程师很 Low 吗?

突发!微软合资公司「微创」中国区关停

为什么 it 外包永远在招人?

原以为是宝塔的平替,没想到是个王者!太牛逼了

Nginx 防火墙这样配:IP 自动封禁 + CC 攻击防护

PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下在看,加个星标,这样每次新文章推送才会第一时间出现在你的订阅列表里。点在看支持我们吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值