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

推荐订阅源

The GitHub Blog
The GitHub Blog
L
Lohrmann on Cybersecurity
T
Threatpost
T
Threat Research - Cisco Blogs
C
Cybersecurity and Infrastructure Security Agency CISA
S
Schneier on Security
Engineering at Meta
Engineering at Meta
Scott Helme
Scott Helme
博客园 - 三生石上(FineUI控件)
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
V
Visual Studio Blog
I
Intezer
L
LangChain Blog
Apple Machine Learning Research
Apple Machine Learning Research
S
Securelist
C
Cyber Attacks, Cyber Crime and Cyber Security
B
Blog RSS Feed
M
MIT News - Artificial intelligence
V
Vulnerabilities – Threatpost
T
The Exploit Database - CXSecurity.com
NISL@THU
NISL@THU
Cisco Talos Blog
Cisco Talos Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
Know Your Adversary
Know Your Adversary
H
Hackread – Cybersecurity News, Data Breaches, AI and More
阮一峰的网络日志
阮一峰的网络日志
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
The Cloudflare Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Vercel News
Vercel News
Stack Overflow Blog
Stack Overflow Blog
The Hacker News
The Hacker News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
The Register - Security
The Register - Security
Simon Willison's Weblog
Simon Willison's Weblog
Security Latest
Security Latest
C
Cisco Blogs
量子位
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
P
Proofpoint News Feed
Cyberwarzone
Cyberwarzone
Y
Y Combinator Blog
C
CERT Recently Published Vulnerability Notes
T
Tenable Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
AWS News Blog
AWS News Blog
Project Zero
Project Zero
D
Darknet – Hacking Tools, Hacker News & Cyber Security
A
Arctic Wolf
K
Kaspersky official blog

爱吃猫的鱼

当身体被强制暂停 盘点开发者眼里的赛博大善人(一) 博客系统 FlecBlog 现已正式开源 Windows 注册表原理与实战指南 GitHub Actions 自动化部署全攻略 自研博客系统打造极致极简创作体验 2025 年度总结 替代 Alist 的多存储文件列表程序 OpenList 高通 410 随身 WiFi 刷入 Debian 利用 BAT 脚本实现高效自动化部署方案 B7c61c40 全面详解开箱即用的 AI 工具 Cursor 2024 年度总结 使用 Hexo 多种部署方法搭建个人网站 利用 Termux 让安卓手机成为专属家庭服务器 全面详细的常用Linux命令汇总(2) Follow:信息浏览聚合,万物皆可订阅 QRcodeGen项目介绍,基于Python打造二维码生成新利器 Nginx 可视化编辑工具 Nginx UI 安装和使用 深入探究电子邮件三大协议 使用Ventoy集成多PE打造强大U盘 Xterminal:颜值高、功能强,追求卓越体验的SSH工具 高效利用 GitHub 搜索,精准快速获取所需 IDM:广受欢迎的高速下载管理器 让Meting API解锁音乐开发新可能 服务器最佳搭档,宝塔和1Panel的部署与选择 FinalShell:功能强大的服务器管理和远程连接工具 掌握Markdown技巧,轻松应对写作需求 C3dc4fa3 玩转npm:从基础到实践的全面指南 GitHub Desktop:让代码托管不再高深莫测 85af4b3 推荐10个有趣的摸鱼网站,让快乐简单起来 F34ad695 E2f1455b 503a6294 22ea4c20 A43ddadb Ba7d8a84 Caffd8d6 20820ccd E3ddac0 88040fa7 Ca1756cf Aa5669ee 78084f29 98b56a65 Efba7c23
零基础Docker入门指南
Talen · 2024-06-14 · via 爱吃猫的鱼

1 前言

Docker 是一个开源的应用容器引擎,它允许开发者将应用程序及其依赖打包到一个轻量级、可移植的容器中。这些容器可以在任何支持 Docker 的 Linux 机器上运行,无需担心环境差异带来的问题。Docker 的设计理念是“一次构建,到处运行”,这意味着一旦应用在 Docker 容器中构建完成,它就可以在任何安装了 Docker 的机器上无缝运行。

特点

  • 轻量级:不需要模拟硬件,它共享宿主机的内核,因此比虚拟机更轻量。
  • 可移植性:可以在不同的环境中运行,无论是本地开发环境、测试环境还是生产环境。
  • 快速部署:可以快速启动和停止,这使得部署和扩展应用变得非常迅速。
  • 安全性:提供了良好的隔离,每个容器都是独立的,不会互相干扰。

2 快速安装

Docker 在不同系统的安装方式略有不同但基本相似,以下就用几个常用系统作为演示。

2.1 Ubuntu

使用 Ubuntu 22.04 LTS,理论上各版本可通用

更新系统软件包索引,如果较慢可以更换镜像源

安装必要的依赖包

BASH

sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

添加阿里云 GPG 密钥

BASH

curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

添加阿里云 APT 软件源,在国内不推荐使用官方源,如需使用官方源请添加官方 GPG 密钥

BASH

sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# 过程需要使用一次回车键

更新软件包索引并安装 Docker Engine

BASH

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io

启动Docker服务

BASH

sudo systemctl start docker

验证安装是否成功

BASH

docker --version
# 出现版本号即为安装成功
# Docker version 26.1.3, build b72abbb

2.2 Debian

使用 Debian 12.5,理论上各版本可通用

更新系统软件包索引,如果较慢可以更换镜像源

安装必要的依赖包

BASH

sudo apt-get install -y apt-transport-https ca-certificates curl gnupg2 software-properties-common

添加阿里云 GPG 密钥

BASH

curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

添加阿里云 APT 软件源,在国内不推荐使用官方源,如需使用官方源请添加官方 GPG 密钥

BASH

echo "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 过程需要使用一次回车键

更新软件包索引并安装 Docker Engine

BASH

sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io

启动Docker服务

BASH

sudo systemctl start docker

验证安装是否成功

BASH

docker --version
# 出现版本号即为安装成功
# Docker version 26.1.3, build b72abbb

2.3 CentOS

使用 CentOS Stream 9,理论上 CentOS 7.x 也可以使用

更新系统软件包索引,如果较慢可以更换镜像源

安装必要的依赖包

BASH

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

从国内服务器上下载存储库,在国内不推荐使用官方库

BASH

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装 Docker Engine

BASH

sudo yum install -y docker-ce docker-ce-cli containerd.io

启动Docker服务

BASH

sudo systemctl start docker

验证安装是否成功

BASH

docker --version
# 出现版本号即为安装成功
# Docker version 26.1.3, build b72abbb

3 常用命令

镜像管理命令

  • docker pull:从Docker Hub或其他仓库拉取镜像
  • docker images:列出本地所有镜像
  • docker rmi:删除指定的镜像
  • docker build:从 Dockerfile 构建新的镜像
  • docker commit:将容器保存为新的镜像
  • docker tag:给镜像打标签
  • docker push:将镜像推送到仓库
  • docker search:在 Docker Hub 上搜索镜像

容器管理命令

  • docker run:创建并运行一个新的容器
  • docker start:启动一个已停止的容器
  • docker stop:停止一个正在运行的容器
  • docker restart:重启一个容器
  • docker pause:暂停一个或多个容器的所有进程
  • docker unpause:恢复一个或多个容器的所有进程
  • docker kill:强制停止一个或多个容器
  • docker rm:删除一个或多个容器
  • docker ps:列出当前运行的容器
  • docker ps -a:列出所有容器,包括已停止的
  • docker inspect:查看容器的详细信息
  • docker exec:在容器内运行命令
  • docker logs:获取容器的日志
  • docker cp:在容器与宿主机间复制文件

网络管理命令

  • docker network ls:列出所有网络
  • docker network create:创建新网络
  • docker network connect:连接容器到网络
  • docker network disconnect:从网络断开容器
  • docker network rm:删除网络。

卷管理命令

  • docker volume ls:列出所有卷
  • docker volume create:创建新卷
  • docker volume inspect:查看卷的详细信息
  • docker volume rm:删除卷

系统信息命令

  • docker version:显示 Docker 版本信息
  • docker info:显示 Docker 系统信息

4 使用示例

4.1 Nginx

拉取 Nginx 镜像

运行 Nginx 容器

BASH

docker run --name nginx-test -p 8080:80 -d nginx
  • --name nginx-test:设置容器名称
  • -p 8080:80: 映射容器服务的 80 端口到宿主机的 8080 端口
  • -d nginx: 设置容器在在后台一直运行

若在浏览器成功访问 IP:8080 即为安装成功,注意需要放行对应端口

image-20240605155040664

3.2 MySQL

拉取 MySQL 镜像

运行 MySQL 容器

BASH

docker run -it --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
  • -it:启动一个交互式 shell
  • -p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口
  • -e MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码
  • -d mysql: 设置容器在在后台一直运行

使用 Navicat Premium 工具测试是否安装成功,注意需要放行对应端口

image-20240605175605003

5 Docker Compose

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose 可以使用 YML 文件来配置应用程序需要的所有服务,然后使用一个命令就可以从 YML 文件配置中创建并启动所有服务。

5.1 安装

下载 Docker Compose 二进制文件

BASH

sudo curl -L "https://githubfast.com/docker/compose/releases/download/v2.27.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

赋予 Docker Compose 执行权限

BASH

sudo chmod +x /usr/local/bin/docker-compose

验证安装是否成功

BASH

docker-compose --version
# 出现版本号即为安装成功
# Docker Compose version v2.27.1

5.2 使用示例

创建并进入一个测试目录

BASH

mkdir composetest & cd composetest

创建并编辑 docker-compose.yml 文件

BASH

vim docker-compose.yml

YML

# docker-compose.yml
services:  # 在这个配置文件中,定义了两个服务 nc(Nextcloud) 和 db(PostgreSQL)
  nc:  # Nextcloud
    image: nextcloud:apache  # 指定容器使用的镜像为 nextcloud:apache
    environment:  # 设置环境变量,包括数据库的连接信息
      - POSTGRES_HOST=db  # 指定数据库服务的名称
      - POSTGRES_PASSWORD=nextcloud  # 数据库密码
      - POSTGRES_DB=nextcloud  # 数据库名
      - POSTGRES_USER=nextcloud  # 数据库用户名
    ports:  # 映射容器服务的 80 端口到宿主机的 80 端口
      - 80:80
    restart: always  # 指定容器总是重启
    volumes:  # 挂载卷 nc_data 到容器内 /var/www/html 目录,用于持久化 Nextcloud 的数据
      - nc_data:/var/www/html
  db:  # PostgreSQL
    image: postgres:alpine  # 指定容器使用的镜像为 postgres:alpine
    environment:  # 设置环境变量,包括数据库的配置信息
      - POSTGRES_PASSWORD=nextcloud  # 数据库密码
      - POSTGRES_DB=nextcloud  # 数据库名
      - POSTGRES_USER=nextcloud  # 数据库用户名
    restart: always  # 指定容器总是重启
    volumes:  # 挂载卷 db_data 到容器内 /var/lib/postgresql/data 目录,用于持久化数据库的数据
      - db_data:/var/lib/postgresql/data
    expose:  # 暴露容器的5432端口
      - 5432
volumes:  # 卷
  db_data:  # 定义了一个名为 db_data 的卷,用于存储数据库的数据
  nc_data:  # 定义了一个名为 nc_data 的卷,用于存储 Nextcloud 的数据

构建应用并在后台执行该服务

等待构建完成后,在浏览器访问 IP:80 成功出现下图即为成功,注意需要放行对应端口

image-20240605182752361

6 写在最后

Docker 是一个强大的工具,它简化了应用的部署和管理过程。无论是开发者还是系统管理员,学习 Docker 都将大大提升工作效率。本文侧重于如何安装 Docker,如需深入学习推荐使用官方文档:https://docs.docker.com/guides/

零基础Docker入门指南

https://blog.talen.top/posts/869715fc