当前位置: 首页 > news >正文

Docker命令备忘录----Linux运维

1. Docker简介

Docker 是一个开源平台,旨在帮助开发人员和运维人员通过容器技术加速应用的开发、测试和部署。它提供了轻量级的隔离环境,使应用程序及其依赖能够快速打包并运行在任何环境中。

Docker的核心组件包括镜像(Image)、容器(Container)、网络(Network)和数据卷(Volume)。这些组件协同工作,使得容器化的应用具有可移植性和可扩展性。

2. Docker安装与基本配置

2.1 安装Docker

在安装Docker之前,确保你的系统已经更新,并且具备安装Docker的条件。以下是以Ubuntu系统为例的安装步骤:

# 更新软件包列表
sudo apt-get update# 安装依赖
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common# 添加Docker的官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -# 添加Docker的APT源
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"# 安装Docker
sudo apt-get update
sudo apt-get install docker-ce# 启动Docker服务
sudo systemctl start docker# 开机自动启动Docker服务
sudo systemctl enable docker

2.2 启动与停止Docker服务

# 启动Docker服务
sudo systemctl start docker# 停止Docker服务
sudo systemctl stop docker# 重启Docker服务
sudo systemctl restart docker# 查看Docker服务状态
sudo systemctl status docker

在成功安装Docker后,你可以通过以下命令来查看安装是否成功:

docker --version

如果显示Docker版本信息,说明安装成功。

3. 容器的生命周期管理

3.1 启动、停止与重启容器

容器是Docker的核心概念,以下是如何管理容器生命周期的常用命令。

# 运行一个容器(以nginx为例)
docker run -d --name my_nginx nginx# 停止一个容器
docker stop my_nginx# 启动一个停止的容器
docker start my_nginx# 重启一个容器
docker restart my_nginx

3.2 进入运行中的容器

有时我们需要进入运行中的容器执行命令,可以通过docker exec命令来进入容器。

# 进入容器并启动一个bash会话
docker exec -it my_nginx /bin/bash

3.3 容器删除与清理

如果容器不再需要,可以删除它以释放系统资源:

# 删除一个容器
docker rm my_nginx# 删除所有停止的容器
docker container prune

4. 镜像管理

Docker镜像是容器运行的基础,了解如何管理镜像是每个运维人员的必修课。

4.1 获取Docker镜像

你可以通过docker pull命令从Docker Hub获取公共镜像:

# 从Docker Hub获取一个nginx镜像
docker pull nginx

4.2 查看本地镜像

查看已经下载的Docker镜像,可以使用以下命令:

docker images

示例输出:

4.3 删除镜像

如果某些镜像不再需要,可以通过以下命令删除:

# 删除指定镜像
docker rmi nginx# 强制删除
docker rmi -f nginx

5. 数据卷与存储

5.1 数据卷的创建与管理

Docker数据卷是用于持久化容器数据的一种机制,允许在容器之间共享数据。

# 创建一个数据卷
docker volume create my_volume# 在容器中挂载数据卷
docker run -d --name my_container -v my_volume:/data nginx

数据卷不会随着容器的删除而自动删除,它提供了一种安全可靠的存储方式。


6. 网络管理

Docker 的网络管理功能非常强大,它提供了多种网络模式以满足不同应用场景的需求。常见的网络模式有:桥接模式(bridge)、主机模式(host)和无网络模式(none)。通过灵活运用这些网络模式,可以实现不同容器之间的通信或隔离。

6.1 查看容器网络

每个容器默认都会被分配一个虚拟网络接口,Docker为所有容器创建了一个默认的桥接网络。你可以使用以下命令查看当前的网络配置:

# 查看所有网络
docker network ls

示例输出:

6.2 创建自定义网络

在默认的桥接网络之外,Docker允许用户创建自定义的网络。自定义网络可以帮助实现更加复杂的网络拓扑结构。例如,你可以创建一个自定义网络,并将多个容器加入到该网络中,让它们可以互相通信。

# 创建一个桥接网络
docker network create my_bridge_network# 将容器连接到该网络
docker run -d --name container1 --network my_bridge_network nginx
docker run -d --name container2 --network my_bridge_network nginx

在此配置下,container1 和 container2 可以通过容器名互相通信。

6.3 检查容器网络配置

你可以使用以下命令查看某个容器的网络配置信息:

# 查看容器网络配置
docker inspect container1 --format='{{json .NetworkSettings.Networks}}'

该命令将输出详细的网络信息,包括容器的IP地址、网络名称等。

6.4 断开容器的网络

如果你希望将容器从某个网络中移除,可以使用以下命令:

# 从网络中断开容器
docker network disconnect my_bridge_network container1

7. 安全管理与日志监控

7.1 容器权限管理

容器默认以root权限运行,这可能会引发安全隐患。为了提升安全性,可以使用--user选项在容器内指定用户权限:

# 以非root用户启动容器
docker run -d --name my_app --user 1000:1000 nginx

此外,还可以通过使用--cap-drop参数去掉容器中不必要的特权能力:

# 去掉容器的NET_ADMIN权限
docker run --cap-drop=NET_ADMIN nginx

7.2 日志管理

容器的日志管理对于排查问题和监控应用运行状态非常重要。你可以使用以下命令查看容器日志:

# 查看容器日志
docker logs my_nginx# 查看最近的10行日志
docker logs --tail 10 my_nginx# 实时查看容器日志
docker logs -f my_nginx

Docker支持多种日志驱动程序,例如json-file(默认)、syslog等。可以通过Docker配置文件或启动时参数指定日志驱动。


8. Docker Compose的使用

Docker Compose 是用于定义和运行多容器Docker应用的工具。它允许通过一个简单的YAML文件来描述应用的服务、网络和卷,并一键启动和管理所有容器。

8.1 安装Docker Compose

Docker Compose可以通过Docker官方源进行安装。以下是安装步骤:

# 在Linux上安装Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose# 赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose# 检查是否安装成功
docker-compose --version

8.2 Docker Compose 基本示例

下面是一个简单的docker-compose.yml文件,它定义了两个服务:一个nginx和一个redis服务。

version: '3'
services:web:image: nginxports:- "80:80"redis:image: redis

使用以下命令启动这些服务:

# 启动所有服务
docker-compose up -d# 查看运行中的服务
docker-compose ps

8.3 多容器编排与管理

Docker Compose允许你通过一个配置文件同时管理多个容器,并简化了容器之间的网络配置。你可以通过修改YAML文件轻松调整服务的数量、网络配置和存储卷的挂载方式。

services:web:image: nginxports:- "8080:80"volumes:- ./html:/usr/share/nginx/htmlapp:image: my_appbuild:context: .dockerfile: Dockerfiledepends_on:- dbdb:image: postgresenvironment:POSTGRES_USER: examplePOSTGRES_PASSWORD: example

使用docker-compose up命令,可以一键启动整个应用的所有服务。


9. 进阶:Dockerfile与自动化构建

Dockerfile是用于定义镜像的文件。通过编写Dockerfile,你可以定义一个自定义的镜像,并根据需求将应用和依赖打包在一起。

9.1 Dockerfile语法详解

Dockerfile通常由一系列指令组成,这些指令定义了如何构建镜像。以下是一个简单的Dockerfile示例,它构建了一个包含nginx的自定义镜像:

# 选择基础镜像
FROM nginx:alpine# 复制本地文件到容器
COPY ./html /usr/share/nginx/html# 暴露80端口
EXPOSE 80# 设置启动命令
CMD ["nginx", "-g", "daemon off;"]

9.2 自动化构建与推送

创建好Dockerfile后,可以使用docker build命令来构建镜像:

# 构建镜像
docker build -t my_nginx .# 查看构建好的镜像
docker images

构建完成后,可以使用docker push命令将镜像推送到Docker Hub:

# 推送镜像到Docker Hub
docker tag my_nginx my_dockerhub_username/my_nginx:latest
docker push my_dockerhub_username/my_nginx:latest

这样,你可以将自定义的镜像共享给其他团队成员,或者在不同环境中快速部署。


10. 常见问题与最佳实践

10.1 性能优化

为了提升Docker容器的运行性能,可以考虑以下优化措施:

  • 使用轻量级基础镜像(例如alpine)来减少镜像体积。
  • 合理配置容器的CPU和内存限制,以避免资源争用。
  • 定期清理不再使用的镜像和容器,避免磁盘空间占用过大。

10.2 容器故障排查

排查容器问题时,除了查看日志,还可以使用以下命令查看容器的详细状态:

# 查看容器详细状态
docker inspect my_container

此外,docker stats命令可以监控容器的资源使用情况:

# 实时查看容器的CPU、内存等资源使用情况
docker stats

原文链接:https://www.toutiao.com/article/7425880582065832487/?app=news_article&timestamp=1730425039&use_new_style=1&req_id=202411010937182BA8490DA00D56757A87&group_id=7425880582065832487&share_token=86195607-D534-4767-84F0-112EA59DA02E&tt_from=weixin&utm_source=weixin&utm_medium=toutiao_ios&utm_campaign=client_share&wxshare_count=1&source=m_redirect&wid=1730425058742

相关文章:

Docker命令备忘录----Linux运维

1. Docker简介 Docker 是一个开源平台,旨在帮助开发人员和运维人员通过容器技术加速应用的开发、测试和部署。它提供了轻量级的隔离环境,使应用程序及其依赖能够快速打包并运行在任何环境中。 Docker的核心组件包括镜像(Image)、…...

Golang new() make var []int 使用的具体区别

一、数组和切片的初始化 1 var []int 格式 func main() {var t1 []intt1 append(t1, 1)fmt.Println(t1) //正常输出 1var t11 []intt11[0] 11 //panic: runtime error: index out of range [0] with length 0fmt.Println(t11)var t12 [1]intt12[0] 12fmt.Println(t12) /…...

【Linux驱动开发】多线程调用驱动时的并发与竞争(原子操作、自旋锁、信号量、互斥锁)

【Linux驱动开发】多线程调用驱动时的并发与竞争(原子操作、自旋锁、信号量、互斥锁) 文章目录 多线程调用驱动原子操作原子变量操作原子位操作调用方法 自旋锁读写锁顺序锁调用方法 信号量互斥锁(互斥体)中断中使用附录&#xf…...

qt QComboBox详解

QComboBox是一个下拉选择框控件,用于从多个选项中选择一个。通过掌握QComboBox 的用法,你将能够在 Qt 项目中轻松添加和管理组合框组件,实现复杂的数据选择和交互功能。 重要方法 addItem(const QString &text):将一个项目添…...

redis做缓存,mysql的数据怎么与redis进行同步(双写一致性)

基于业务做选择,强一致性和允许延迟再加消息队列 强一致性:当修改了数据库的数据同时更新缓存的数据,缓存和数据库的数据保持一致 读操作:缓存命中,直接返回数据,缓存没有命中,查询数据库,写入缓存,设定过期时间 写操作:延迟双删 :先删除缓存,修改数据库,等待延迟(数据库主从节…...

WPF触发器

WPF触发器 触发器(Trigger)通常指的是一种事件驱动机制,用于响应特定的事件或条件。WPF触发器是WPF中一种强大的功能,允许开发者在样式和模板中定义条件逻辑,以响应属性值的变化。WPF提供了多种触发器来实现样式和模板…...

反序列化漏洞的运行原理及防御方法

反序列化漏洞是当前网络安全领域中的一种严重安全威胁,其运行原理和防御方法对于保障应用程序和系统安全至关重要。本文将深入探讨反序列化漏洞的运行原理,并提出有效的防御策略。 ### 反序列化漏洞的运行原理 序列化是指将对象的状态信息转换为可以存储…...

护眼大路灯哪个牌子好?口碑最好的护眼灯品牌​​

护眼大路灯哪个牌子好?作为一名专业的测评师,我发现有大量的家长都反应自己家孩子在学习时经常出现,揉眼睛、频繁眨眼、眼睛痒等问题,而这些问题多半是与不良光线有光,这些现象使我更加关注护眼大路灯的选择&#xff0…...

Redis 初学者指南

Redis 初学者指南 1. 什么是 Redis?2. Redis 的基本概念3. 安装 Redis3.1 使用 Docker 安装3.2 从源码编译安装 4. 基本操作4.1 启动 Redis 服务4.2 连接 Redis 客户端4.3 常用命令 5. Redis 的数据结构5.1 字符串5.2 列表5.3 集合5.4 散列5.5 有序集合 6. 高级特性…...

node.js_npm : 无法加载文件 D:\Program Files\nodejs\npm.ps1

这个错误信息表明 PowerShell 因为执行策略的限制而阻止了 npm.ps1 脚本的运行。PowerShell 的执行策略是一种安全功能,用于限制哪些脚本可以运行,以防止恶意脚本的执行。 要解决这个问题,你可以按照以下步骤操作: 查看当前的执行…...

技术星河中的璀璨灯塔 —— 青云交的非凡成长之路

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...

使用 Git 命令将本地项目上传到 GitLab

步骤详解 1. 在 GitLab 上创建一个新项目 登录你的 GitLab 账号。点击“New project”创建一个新的空项目。为项目设置名称、描述等信息。 2. 关联远程 Git 仓库 1.初始化本地 Git 仓库 git init 2.关联远程仓库: git remote add origin https://gitlab-lizz…...

JavaScript的第十三天

目录 一、使用jQuery操作属性值 操作案例: 表格的全选和反选 二、设置宽高 1、宽高属性 2、使用方式 三、offset() 和position()的区别 1、.offset():获取到document的距离,也就是窗口边…...

el-table 滚动条重置 手动控制滚动条

最近在使用 el-table 的时候,出现一个问题: 表头过长的时候,会有左右滑动的操作,当我们把表格拉到最右侧,这个时候重新请求数据的话,表格位置还是在最右侧,不会恢复原位。 那我们想恢复原位&a…...

详细分析Vue3中的provide和inject基本知识(附Demo)

目录 前言1. 基本知识2. Demo3. 拓展 前言 原先写过一篇父传子,推荐阅读:详细分析Vue3中的props用法(父传子) 实战中也常用这种方式,今天突然发现还有另外一种方式,对此进行深入探讨学习下 1. 基本知识 …...

spring集成kafka

Kafka 是一个分布式流处理平台,广泛用于构建实时数据流管道和流应用程序。它以高吞吐量、可扩展性和可靠性著称。以下是 Kafka 的实现原理详解及其在 Spring Boot 中的集成示例。 一、Kafka 实现原理 1. 架构概述 Kafka 的架构主要由以下几个组件组成&#xff1a…...

el-form表单中含有el-input按回车自动刷新如何阻止

场景: 在Vue.js中使用Element UI的el-input组件时,如果按下Enter键导致页面刷新,这通常是因为表单的默认提交行为被触发了。要避免这种情况,你可以在el-input所在的表单上监听键盘事件,并阻止默认行为。 先解释一下时间…...

Spring Boot2.x教程:(十)从Field injection is not recommended谈谈依赖注入

从Field injection is not recommended谈谈依赖注入 1、问题引入2、依赖注入的三种方式2.1、字段注入(Field Injection)2.2、构造器注入(Constructor Injection)2.3、setter注入(Setter Injection) 3、为什…...

在 Android Studio 上运行 Java 的 main 函数

直接写了个main函数运行的时候提示 这时我们需要在idea目录下找到gradle.xml文件 添加 <option name"delegatedBuild" value"false" />搞定...

【Nas】X-DOC:Mac mini 安装 ZeroTier 并替换 planet 实现内网穿透

【Nas】X-DOC&#xff1a;Mac mini 安装 ZeroTier 并替换 planet 实现内网穿透 1、下载客户端 ZeroTier One2、安装过程3、更换planet备份原planet4、重启服务5、加入网络6、NAT内网穿透 1、下载客户端 ZeroTier One https://www.zerotier.com/download/ 选择 MacOS 适用版本&…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划&#xff1a;基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标&#xff1a;为安全大模型创建高质量、去偏、符合伦理的训练数据集&#xff0c;涵盖安全相关任务&#xff08;如有害内容检测、隐私保护、道德推理等&#xff09;。 1.1 数据收集 描…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障

关键领域软件测试的"安全密码"&#xff1a;Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力&#xff0c;从金融交易到交通管控&#xff0c;这些关乎国计民生的关键领域…...

规则与人性的天平——由高考迟到事件引发的思考

当那位身着校服的考生在考场关闭1分钟后狂奔而至&#xff0c;他涨红的脸上写满绝望。铁门内秒针划过的弧度&#xff0c;成为改变人生的残酷抛物线。家长声嘶力竭的哀求与考务人员机械的"这是规定"&#xff0c;构成当代中国教育最尖锐的隐喻。 一、刚性规则的必要性 …...

Python第七周作业

Python第七周作业 文章目录 Python第七周作业 1.使用open以只读模式打开文件data.txt&#xff0c;并逐行打印内容 2.使用pathlib模块获取当前脚本的绝对路径&#xff0c;并创建logs目录&#xff08;若不存在&#xff09; 3.递归遍历目录data&#xff0c;输出所有.csv文件的路径…...