惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Threatpost
aimingoo的专栏
aimingoo的专栏
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
Tailwind CSS Blog
J
Java Code Geeks
博客园_首页
Google Online Security Blog
Google Online Security Blog
Hugging Face - Blog
Hugging Face - Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
I
Intezer
P
Palo Alto Networks Blog
V
Vulnerabilities – Threatpost
雷峰网
雷峰网
O
OpenAI News
SecWiki News
SecWiki News
小众软件
小众软件
酷 壳 – CoolShell
酷 壳 – CoolShell
美团技术团队
N
News | PayPal Newsroom
Project Zero
Project Zero
Forbes - Security
Forbes - Security
IT之家
IT之家
A
Arctic Wolf
WordPress大学
WordPress大学
Jina AI
Jina AI
T
Tor Project blog
博客园 - 三生石上(FineUI控件)
S
Secure Thoughts
Google DeepMind News
Google DeepMind News
Attack and Defense Labs
Attack and Defense Labs
博客园 - 聂微东
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Privacy International News Feed
Cloudbric
Cloudbric
G
GRAHAM CLULEY
博客园 - 叶小钗
H
Hacker News: Front Page
腾讯CDC
量子位
Help Net Security
Help Net Security
人人都是产品经理
人人都是产品经理
C
Cyber Attacks, Cyber Crime and Cyber Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
宝玉的分享
宝玉的分享
爱范儿
爱范儿
L
Lohrmann on Cybersecurity
Hacker News - Newest:
Hacker News - Newest: "LLM"
Recorded Future
Recorded Future
C
CERT Recently Published Vulnerability Notes

Hi, I Am I

[I Am I 年度简报] — 不知终日梦为鱼 初探 ESP32-CAM QQ 聊天记录 MHT 文件转 HTML [I Am I 年度简报] - 草木本无意,荣枯自有时。 Hexo 中实现 Live Photos 支持 写在当下 NKCTF 2024 1z_F0r3ns1c5 Writeup 春秋杯冬季赛 2023 Writeup [I Am I 年度简报] - 2023 某内网渗透内部赛 Writeup 强网拟态 2023 Writeup Github Actions 自动化部署 Hexo 浅析CobaltStrike流量解密 陇剑杯 2023 Writeup CTF线下赛AWDP总结 ISCC 2023 Writeup ISCC 2023 实战题 Writeup CISCN 2023 Writeup 福建闽盾杯网络空间安全大赛 2023 Writeup 天一永安杯宁波市网络安全大赛 2023 Writeup 贵阳大数据及网络安全精英对抗赛 2023 Writeup 红明谷杯 2023 Writeup Confetti 带来有仪式感的鼓励 记一次 JS 逆向密码加密 [I Am I 年度简报] – 2022 PHP 读取 Excel 文件内容并写入数据库 从0开始的 MoeCTF 开发之路 观安杯 2022 Writeup 利用微信服务号实现早安自动化 Cloudflare批量拉黑IP脚本 蓝帽杯 2022 Writeup 为你的网站添加 Do you like me 小组件 ISCC 2022 Writeup CISCN 2022 Writeup ISCC 2022 实战题 Writeup CTF线下赛AWD攻防总结 [I Am I 年度简报] – 2021 记一次 CNVD 通用型漏洞证书挖掘 Google Adsense 收款流程 使用 Digispark 开发板制作 BadUSB 在 Vue 中使用 Axios 获取钉钉群直播回放的 M3U8 地址 Flask 框架学习记录 关于 Ten·API 防火墙的配置 关于最近 关于 Burp Suite 调教这档事 ISCC 2021 Writeup 记一次 CTF 环境和动态独立靶机部署 各大平台图集解析思路 情话总雷同,恨意千万种 HackThisSite Basic Writeup [I Am I 年度简报] - 2020 Kali 设置中文语言和更换镜像源 使用 Python 下载哔哩哔哩视频 PHP使用 CURL 发送网络请求 PHP蓝奏云直链解析源码 从0开始写一个短视频去水印接口 Windows+Ubuntu 双系统之美化 GRUB Windows+Ubuntu 双系统安装 树莓派安装 Aria2 实现24小时不间断的下载机 抖音无水印解析最新PHP源码 API-Admin Ten·API管理后台 树莓派安装 DLNA 实现流媒体服务器 [I Am I 年度简报] - 2019 Hello Hexo Goindex 将 Google Drive 打造成网盘 自用博客评论邮件通知美化模板 使用 IFTTT 长久保留 Google Voice 号码 Telegram MTProxy 代理一键安装脚本 三分钟学会搭建我的世界基岩版服务器 PHP跳转QQ聊天窗口源码 推荐几款开源HTML5(Web)框架 谷歌新出浏览器 Chromium 可以直接翻墙 Live2D!为你的网站添加看板娘 为你的网站添加Gittalk评论 网站数据离奇丢失...... Lsky Pro(兰空图床)—又一款单纯的图床程序 LOL明天解封ヾ(◍°∇°◍)ノ゙ 唔~本站受到DDOS攻击 [I Am I 年度简报] – 2018 死肥宅也要谈恋爱之早安晚安自动化 1024,Hello,world! 宝塔面板 Bt.cn 专业版破解教程 Uptime >>16 years 震惊!坐在家里竟然可以日入百万 免费获取一年的 .ooo 域名 PHP 调用 新浪API 生成短网址 思杰马克丁成 Adobe 中国授权经销商 畅言商业广告上线-去除畅言评论广告 使用网易云音乐官方接口解析VIP音乐 PHP获取QQ昵称和头像API 坦白说查发送人QQ新方法(已失效) 日常水一波 通过微博图片地址溯源上传者 WordPress 评论夜间自动改为必须审核 十步叫你如何无损修复硬盘锁(mbr病毒) [I Am I 年度简报] – 2017 密码破解与心理学 网页屏蔽各种按键的代码分享 网络安全技术专业术语
Docker 学习笔记
2021-01-26 · via Hi, I Am I

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。

最近用 Docker 的次数越来越多了,在此记录一下常用的命令。

核心概念

在使用之前,需要理解几个基本概念。

镜像(Image)

镜像是一个只读模板,包含应用程序运行所需的环境、依赖和配置文件,可以理解为一个运行环境的 快照。容器就是基于镜像创建的运行实例。

镜像通常采用分层结构构建,便于复用和节省存储空间。

容器(Container)

容器是镜像的运行实例,是一个轻量级、隔离的运行环境。

它共享宿主机内核,启动速度快、资源占用少,并通过 NamespaceCgroups 实现进程级隔离。

仓库(Repository)

仓库是镜像存储与分发的位置,例如:Docker Hub

可以通过 docker pull 从仓库拉取镜像,也可以搭建私有仓库用于企业内部使用。

Docker 架构

Docker 采用 C/S 架构:

客户端(docker CLI)
→ Docker Daemon(后台服务)
→ 镜像仓库

用户通过 CLI 发送命令,由 Docker Daemon 负责镜像构建、容器运行和资源管理,如本地无镜像则会自动从远程仓库拉取。


安装 Docker

安装 Docker 主要有以下几种方法,适用于不同的操作系统和需求:

通用安装脚本

推荐用于 CentOS 7、Debian、Ubuntu

curl -sSL https://get.docker.com/ | sh

国内镜像加速

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

配置 Docker

设置开机自启

systemctl start docker
systemctl enable docker

更换镜像源

为了提高拉取镜像的速度,建议配置国内的镜像源:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://mirror.ccs.tencentyun.com"
  ]
}
EOF

sudo systemctl daemon-reload
sudo systemctl restart docker
docker info

Docker 常用命令

以下是一些基本的 Docker 命令,用于管理容器和镜像:

镜像操作

docker -v                     # 查看版本
docker search nginx           # 搜索镜像
docker pull nginx             # 拉取镜像
docker images                 # 查看本地镜像
docker rmi 镜像ID              # 删除镜像
docker history nginx          # 查看镜像分层历史
docker save -o nginx.tar nginx   # 导出镜像
docker load -i nginx.tar         # 导入镜像

构建镜像(不使用缓存):

docker build --no-cache -t mynginx .

容器操作

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

常用参数说明:

  • --name 指定容器名称
  • -d 后台运行
  • -p 端口映射(宿主机:容器)
  • -P 随机端口映射
  • -it 交互模式
  • --rm 容器停止后自动删除
  • -e 传递环境变量
  • --restart 设置重启策略

其他命令

docker ps               # 查看当前正在运行的容器
docker ps -a            # 查看所有容器(包括已停止的容器)
docker ps -q            # 只显示容器ID(静默模式)
docker ps -n 5          # 显示最近创建的5个容器

docker stop 容器名      # 停止正在运行的容器(优雅停止,发送 SIGTERM 信号)
docker start 容器名     # 启动一个已经停止的容器
docker restart 容器名   # 重启容器(先 stop 再 start)

docker rm 容器名        # 删除已停止的容器(运行中的容器需要先 stop)
docker rm -f 容器名     # 强制删除运行中的容器

docker exec -it 容器名 bash  
# 进入正在运行的容器内部
# -i  保持标准输入开启
# -t  分配一个伪终端
# bash  在容器中启动 bash 终端(如果没有 bash,可改为 sh)

docker attach 容器名     # 连接到容器主进程

docker logs 容器名       # 查看日志
docker logs -f 容器名    # 实时查看日志

docker stats             # 查看容器资源使用情况
docker top 容器名        # 查看容器内部进程
docker inspect 容器名    # 查看容器详细信息

数据持久化(Volume)

容器删除后数据会丢失,因此必须使用数据卷。

目录挂载

docker run -d \
-p 8080:80 \
-v /data/www:/usr/share/nginx/html \
nginx

查看数据卷

docker volume ls

删除数据卷

docker volume rm 卷名

Docker 网络管理

查看网络

docker network ls

默认网络模式:

  • bridge(默认):为容器分配独立网络空间,通过 NAT 与宿主机通信,适合大多数场景
  • host:容器与宿主机共享网络栈,不进行端口映射,性能高但隔离性降低
  • none:不配置网络,容器没有任何网络功能

创建自定义网络

docker network create mynet

指定网络运行

docker run -d --network=mynet nginx

网络连接与断开

docker network connect 网络名 容器名
docker network disconnect 网络名 容器名

自定义网络下容器可以通过容器名互相访问。


日志与调试

查看日志

docker logs 容器名

实时查看日志

docker logs -f 容器名

限制日志大小(生产环境建议)

docker run -d \
--log-opt max-size=10m \
--log-opt max-file=3 \
nginx

容器运行高级参数

环境变量

docker run -d \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql

自动重启

docker run -d \
--restart=always \
nginx

重启策略:

  • no:默认,不自动重启容器
  • always:始终重启容器(即使手动停止后也会尝试重启)
  • on-failure:容器异常退出时重启,可指定失败次数
  • unless-stopped:除非手动停止,否则自动重启

资源限制

docker run -d \
--memory="512m" \
--cpus="1.0" \
nginx

指定 CPU 核心:

--cpuset-cpus="0,1"

时间同步

-v /etc/localtime:/etc/localtime:ro

Dockerfile 基础

Dockerfile 用于自定义镜像。

FROM nginx:latest
COPY ./html /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

常见指令:

  • FROM:指定基础镜像,Dockerfile 必须以 FROM 开头
  • RUN:在构建镜像时执行命令(生成新的镜像层)
  • COPY:将本地文件复制到镜像中
  • ADD:类似 COPY,但支持自动解压和远程 URL
  • WORKDIR:设置工作目录,后续命令默认在该目录执行
  • EXPOSE:声明容器对外暴露的端口(仅说明用途,不会自动映射)
  • CMD:容器启动时默认执行的命令(可被覆盖)
  • ENTRYPOINT:容器启动时的固定入口命令(通常不被覆盖)

构建镜像:

docker build -t mynginx .

Docker Compose

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。

安装

curl -L "https://github.com/docker/compose/releases/download/v2.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

yml 文件编写

version: '3'
services:
  php:
    image: php:7.2-apache
    volumes:
      - ./www:/var/www/html
    ports:
      - "8080:80"

启动:

docker compose up -d

停止并删除:

docker compose down

查看状态:

docker compose ps

查看日志:

docker compose logs -f

Docker 清理与空间管理

查看磁盘占用

docker system df

清理无用资源

docker system prune

清理所有未使用镜像(慎用):

docker system prune -a

批量操作命令

docker stop $(docker ps -aq)
docker rm $(docker ps -aq)
docker rmi $(docker images -q)

按条件删除:

docker rmi `docker images | grep nginx | awk '{print $3}'`