如何在 Linux 上使用 Docker 容器?这篇 Docker 全攻略值得收藏!

360影视 国产动漫 2025-04-07 14:25 5

摘要:在当今的云计算和 DevOps 时代,Docker 已经成为应用部署的标准方式。根据 2023 年 CNCF 调查报告,全球 92% 的组织已在生产环境中使用容器技术。对于 Linux 系统管理员和开发者而言,Docker 提供了:

在当今的云计算和 DevOps 时代,Docker 已经成为应用部署的标准方式。根据 2023 年 CNCF 调查报告,全球 92% 的组织已在生产环境中使用容器技术。对于 Linux 系统管理员和开发者而言,Docker 提供了:

「环境一致性」:彻底解决"在我机器上能运行"的问题「资源高效利用」:比传统虚拟机节省 50-70% 的资源「快速部署」:秒级启动应用环境「隔离安全」:进程级别的隔离保障系统安全「微服务架构」:构建现代化分布式应用的基石

本指南将带您从 Docker 基础概念到生产环境部署,涵盖 100+ 实用命令和真实场景解决方案。

Linux 系统 Docker 安装全攻略系统要求与准备# 检查内核版本(需3.10+)

uname -r

# 检查cgroups和命名空间支持

ls /sys/fs/cgroup/

不同 Linux 发行版安装方法Ubuntu/Debian 系安装# 卸载旧版本

sudo apt-get remove docker docker-engine docker.io containerd runc

# 设置仓库

sudo apt-get update

sudo apt-get install \

ca-certificates \

curl \

gnupg \

lsb-release

# 添加官方GPG密钥

sudo mkdir -p /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# 设置稳定版仓库

echo \

"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \

$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装Docker引擎

sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

# 验证安装

sudo docker run hello-world

RHEL/CentOS 系安装# 卸载旧版本

sudo yum remove docker \

docker-client \

docker-client-latest \

docker-common \

docker-latest \

docker-latest-logrotate \

docker-logrotate \

docker-engine

# 设置仓库

sudo yum install -y yum-utils

sudo yum-config-manager \

--add-repo \

https://download.docker.com/linux/centos/docker-ce.repo

# 安装Docker引擎

sudo yum install docker-ce docker-ce-cli containerd.io docker-Compose-plugin

# 启动Docker

sudo systemctl start docker

sudo systemctl enable docker

# 验证安装

无root权限运行Docker(安全配置)# 创建docker组

sudo groupadd docker

# 添加用户到docker组

sudo usermod -aG docker $USER

# 激活更改

newgrp docker

# 验证非root权限

docker run hello-world

Docker 核心概念Docker 架构

「Docker 守护进程」:管理容器生命周期的后台服务 「Docker 客户端」:命令行接口工具 「Docker 镜像」:只读的应用模板 「Docker 容器」:镜像的运行实例 「Docker 仓库」:镜像存储和分发系统 镜像与容器关系图解++ docker run ++

| Docker镜像 | > | Docker容器 |

| (不可变的模板) | | (可写的实例) |

++ ++

Docker 镜像完全操作手册镜像基础操作# 从Docker Hub拉取镜像

docker pull ubuntu:22.04

# 查看本地镜像列表

docker images

docker image ls # 新语法

# 搜索公共镜像

docker search nginx --filter "is-official=true"

# 删除镜像

docker rmi ubuntu:22.04

docker image rm ubuntu:22.04 # 新语法

# 查看镜像历史

docker history nginx:latest

# 导出/导入镜像

docker save -o nginx.tar nginx:latest

docker load -i nginx.tar

# 查看镜像详细信息

docker inspect nginx:latest

# 清理无用镜像

docker image prune

docker system prune -a # 清理所有未使用资源

# 示例DockerfileFROM ubuntu:22.04LABEL maintainer="yourname@example.com"RUN apt-get update && apt-get install -y \ nginx \ && rm -rf /var/lib/apt/lists/*COPY index.html /var/www/html/EXPOSE 80CMD ["nginx", "-g", "daemon off;"]

构建命令:

# 构建镜像docker build -t my-nginx:v1 .# 带缓存构建docker build --no-cache -t my-nginx:v2 .# 多阶段构建docker build -t my-app:prod --target production .# 查看镜像层信息docker history --no-trunc nginx:latest# 镜像签名验证docker trust inspect --pretty nginx:latest# 镜像漏洞扫描docker scan nginx:latest# 构建时指定平台docker build --platform linux/arm64 -t myapp:arm64 .Docker 容器管理容器生命周期管理# 运行容器(基础)

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

# 带资源限制运行

docker run -d \

--name limited-container \

--memory="512m" \

--cpus="1.5" \

--blkio-weight=500 \

nginx:latest

# 查看运行中的容器

docker ps

docker container ls # 新语法

# 查看所有容器(包括停止的)

docker ps -a

docker container ls -a

# 停止/启动容器

docker stop my-nginx

docker start my-nginx

docker restart my-nginx

# 删除容器

docker rm my-nginx

docker container rm my-nginx # 新语法

# 强制删除运行中的容器

docker rm -f my-nginx

# 查看容器资源使用

docker stats

docker stats --no-stream # 单次统计

# 查看容器进程

docker top my-nginx

# 查看容器日志

docker logs my-nginx

docker logs -f --tail 100 my-nginx # 实时日志

容器交互与调试# 进入运行中的容器

docker exec -it my-nginx /bin/bash

# 在容器内执行单条命令

docker exec my-nginx ls /var/log/nginx

# 从容器复制文件到主机

docker cp my-nginx:/etc/nginx/nginx.conf ./nginx.conf

# 从主机复制文件到容器

docker cp ./custom.conf my-nginx:/etc/nginx/conf.d/

# 查看容器变更

docker diff my-nginx

# 创建检查点(实验性功能)

docker checkpoint create my-nginx checkpoint1

Docker 存储与数据持久化三种数据持久化方案对比类型存储位置生命周期适用场景Bind Mount主机文件系统与主机文件相同开发环境配置文件VolumeDocker管理存储区域独立于容器生产环境数据持久化tmpfs内存容器停止即消失敏感临时数据 数据卷操作命令# 创建数据卷

docker volume create mydata

# 查看数据卷列表

docker volume ls

# 使用数据卷

docker run -d -v mydata:/var/lib/mysql mysql:8.0

# 绑定挂载主机目录

docker run -d -v /host/path:/container/path nginx:latest

# 查看卷详细信息

docker volume inspect mydata

# 删除未使用数据卷

docker volume prune

# 备份数据卷

docker run --rm -v mydata:/volume -v $(pwd):/backup alpine \

tar czf /backup/mydata-$(date +%Y%m%d).tar.gz -C /volume ./

Docker 网络深度配置网络模式对比模式说明适用场景bridge默认NAT网络单机容器通信host共享主机网络命名空间高性能网络需求overlay多主机容器网络Swarm集群macvlan为容器分配MAC地址直接暴露到物理网络none无网络连接特殊安全需求 网络操作命令# 查看网络列表

docker network ls

# 创建自定义桥接网络

docker network create --driver bridge --subnet 192.168.100.0/24 mynet

# 容器连接到指定网络

docker run -d --network=mynet --name web1 nginx:latest

# 查看网络详情

docker network inspect mynet

# 容器连接多个网络

docker network connect mynet existing-container

# 清理未使用网络

docker network prune

# 端口映射检查

docker port web1 80

version: '3.8'services: web: image: nginx:alpine ports: - "8080:80" volumes: - ./html:/usr/share/nginx/html depends_on: - db networks: - frontend db: image: postgres:15 environment: POSTGRES_PASSWORD: example volumes: - db_data:/var/lib/postgresql/data networks: - backendvolumes: db_data:networks: frontend: backend:# 启动服务docker-compose up -d# 查看服务状态docker-compose ps# 查看服务日志docker-compose logs -f web# 执行服务命令docker-compose exec db psql -U postgres# 水平扩展服务docker-compose up -d --scale web=3# 停止服务docker-compose down「安全加固」:# 使用非root用户运行容器docker run -d --user 1000:1000 myapp:prod# 启用内容信任export DOCKER_CONTENT_TRUST=1# 限制容器能力docker run -d --cap-drop ALL --cap-add NET_BIND_SERVICE nginx:latest「资源监控」:# 启用Prometheus监控端点{ "metrics-addr": "0.0.0.0:9323", "experimental": true}「日志管理」:# 配置日志驱动和轮转docker run -d \ --log-driver=json-file \ --log-opt max-size=10m \ --log-opt max-file=3 \ nginx:latest

「问题1:容器启动后立即退出」

# 查看退出状态码docker inspect -f '{{.State.ExitCode}}' container_name# 查看完整日志docker logs container_name

「问题2:端口冲突」

# 查看已占用端口ss -tulnp | grep 8080# 检查容器端口映射docker port container_name

「问题3:存储空间不足」

# 查看Docker磁盘使用docker system df# 清理无用资源docker system prune -a --volumes

「容器技术正在重塑IT基础设施,而您已经掌握了这把钥匙!」

来源:wljslmz一点号

相关推荐