阅读视图

发现新文章,点击刷新页面。

使用 SlimToolkit 打造更小的容器镜像

现在容器技术很火,镜像又肥又大,部署较慢不说,安全风险还蹭蹭往上窜,简直让人头大!SlimToolkit 就像一位经验老道的镜像瘦身大师,能把镜像体积缩小到令人咋舌的程度,最多能瘦 30 倍!

到底是啥

简单来说,SlimToolkit 就是一个开源的镜像减肥专家,它能智能分析镜像,找出那些又大又没用的文件、库和依赖,然后干净利落地咔嚓下,统统删掉!

就像一位技艺精湛的雕塑家,将冗余的部分精雕细琢,留下最精髓的部分。

之前叫 DockerSlim,现在已经是云原生计算基金会沙盒项目了,实力是杠杠的!

它的核心思想就是原封不动优化,通过动态、静态分析,自动识别并移除镜像里垃圾文件。

支持 Docker 以及 Kubernetes,各种类云原生工具,妥妥全能选手!

不只瘦身,还可以提供命令行工具,方便检查、调试、管理镜像,简直贴心到家!

SlimToolkit 的绝活

  1. 镜像瘦身大法:这是它的看家本领!它能像一位经验丰富的裁缝,精准剪裁镜像,去除冗余部分。如一个基于 Ubuntu 的 Python 应用,原本约 438MB,经过它的一通操作,能瘦到 16.8MB,足足瘦了 26 倍!

  2. 安全防护专家:它不仅能瘦身,还可以增强安全性!它可以自动生成 Seccomp 和 AppArmor 安全配置文件,像给容器穿上了一层坚不可摧的盔甲,限制系统调用,防止各种安全漏洞入侵。再也不用担心容器被黑客攻破了!

  3. 动态分析、调试:它就像一位经验丰富的侦探,可以创建一个临时容器模拟运行环境,通过 HTTP 探针等方式收集运行数据,分析应用程序行为,确保瘦身后的镜像依然可以正常工作。而且,它还提供调试工具,在优化后的容器中运行调试命令,排查问题方便!

  4. 无缝集成:它就像一位老练的管家,能无缝集成到开发和部署流程中。不用改动 Dockerfile 或构建工具,只需在构建过程中添加 SlimToolkit 的优化步骤即可。还支持各种 CI/CD 工具,如 Jenkins、GitHub Actions 等,自动化部署 so easy!

上手玩转

先安装 SlimToolkit。SlimToolkit 提供了多种安装方式,含直接下载二进制文件、使用脚本安装或通过 Docker 运行。对于大多数的用户,使用脚本安装是最简单方式:

1
curl -sL https://raw.githubusercontent.com/slimtoolkit/slim/master/scripts/install-slim.sh | sudo -E bash -

优化容器镜像。假设已经有一个 Docker 镜像,如一个基于 Python 的 Web 应用。可使用以下命令对镜像进行优化:

1
slim build my/sample-python-app

SlimToolkit 会自动创建一个临时容器,运行动态分析,并生成优化后镜像。优化后的镜像名称会自动加上.slim 后缀,例如:

1
my/sample-python-app.slim

验证优化效果。优化完成后可以使用以下命令查看优化后镜像大小:

1
docker images

SlimToolkit 的优势

  1. 自动与智能化:它能够自动识别容器中不必要的部分,并且进行优化,无需开发者手动修改 Dockerfile 或者删除文件。这种自动化不仅节省了时间,还减少了人为错误的可能性。

  2. 安全:通过生成 Seccomp 和 AppArmor 的配置文件,SlimToolkit 为容器提供了额外的安全保障。这些配置文件能够限制容器系统调用,防止潜在安全威胁,而无需开发者深入了解安全框架细节。

  3. 无缝集成:SlimToolkit 设计目标是无缝集成到现有的开发和部署流程中。它支持多种容器运行时和 CI/CD 工具,能够轻松集成到自动化构建和部署流程中。开发者无需改变现有的工具链或工作流程,即可享受 SlimToolkit 带来的优化效果。

  4. 开源:完全开源,社区活跃,有问必答!

零基础Docker入门指南

1 前言

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

特点

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

2 快速安装

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

2.1 Ubuntu

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

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

1
sudo apt update

安装必要的依赖包

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

添加阿里云 GPG 密钥

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

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

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

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

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

启动Docker服务

1
sudo systemctl start docker

验证安装是否成功

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

2.2 Debian

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

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

1
sudo apt-get update

安装必要的依赖包

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

添加阿里云 GPG 密钥

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

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

1
2
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

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

启动Docker服务

1
sudo systemctl start docker

验证安装是否成功

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

2.3 CentOS

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

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

1
sudo yum update -y

安装必要的依赖包

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

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

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

安装 Docker Engine

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

启动Docker服务

1
sudo systemctl start docker

验证安装是否成功

1
2
3
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 镜像

1
docker pull nginx

运行 Nginx 容器

1
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 镜像

1
docker pull mysql

运行 MySQL 容器

1
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 二进制文件

1
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 执行权限

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

验证安装是否成功

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

5.2 使用示例

创建并进入一个测试目录

1
mkdir composetest & cd composetest

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

1
vim docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 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 的数据

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

1
docker-compose up -d

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

image-20240605182752361

6 写在最后

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

Docker 安装轻量级 git 仓库 gitea

简介

Gitea 是一个基于 Go 语言开发的自托管 Git 服务软件,它提供了类似于 GitHub、GitLab 等平台的功能。它可在自己的服务器上部署,能够完全控制和管理自己的 Git 仓库和数据。它被广泛用于个人项目、小型团队和企业内部的代码托管和协作。由于其轻量级和易于安装的特点,Gitea 也适用于资源有限的环境或私有部署需求。

命令安装

由于容器使用 git 用户运行,因此挂载的目录需要先创建并修改权限。

mkdir -p /home/docker/gitea && chown -R 1000:1000 /home/docker/gitea

然后运行安装命令即可:

docker run -d 
--name gitea 
-p 3000:3000 
-p 2222:2222 
-v /home/docker/gitea/data:/var/lib/gitea 
-v /home/docker/gitea/config:/etc/gitea 
-v /etc/timezone:/etc/timezone:ro 
-v /etc/localtime:/etc/localtime:ro 
--restart always 
gitea/gitea:1.20.4-rootless

设置反代

1.宝塔新建网站,PHP版本选择纯静态

2.找到反向代理,添加反向代理,URL为ip+端口

3.反代设置完成,可以通过网站访问了。

Docker 安装jellyfin媒体服务器软件

简介

Jellyfin 是一个开源的媒体服务器软件,可以在各种操作系统上运行,包括 Windows、Linux、macOS等。

与其他商业的媒体服务器软件相比,Jellyfin具有许多优点,如完全自由和开源、无需订阅费用、提供广泛的支持和社区以及可自定义的用户界面等。它还支持许多流媒体协议,如DLNA、Emby和Plex等。

手动安装

1.进入宝塔面板找到Docker ,并且安装Docker管理器 。
2.找到镜像,点击从仓库中拉取。
3.选择官方镜像库,输入:jellyfin/jellyfin  ,接着等待获取成功。
4.找到容器,并且创建新的容器,镜像选择刚刚获取成功的镜像。
5.容器端口输入8096,服务器端口自定义。

命令安装

搭建代码如下

docker run -d 
--name jellyfin 
--net=host 
-v /home/docker/jellyfin/config:/config  
-v /home/docker/jellyfin/cache:/cache 
-v /home/docker/jellyfin/media:/media 
--restart always 
--privileged=true 
jellyfin/jellyfin

设置反代

1.宝塔新建网站,PHP版本选择纯静态

2.找到反向代理,添加反向代理,URL为ip+端口

3.反代设置完成,可以通过网站访问了。

❌