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 容器 启动时间 资源占用 隔离性 扩展性 适用场景
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 start
、docker stop
和 docker restart
管理容器生命周期。
日志与执行:通过 docker logs
和 docker exec
调试和操作容器。
数据备份:利用 tar
等工具结合容器卷实现数据备份与恢复。
Docker Compose:简化多容器应用管理,推荐使用 docker-compose
管理复杂服务。
通过掌握这些命令和工具,可以高效地管理 Docker 容器,提升开发运维效率。
推荐本站淘宝优惠价购买喜欢的宝贝:
本文链接:https://hqyman.cn/post/10858.html 非本站原创文章欢迎转载,原创文章需保留本站地址!
休息一下~~