本文我们将学习的是 Linux 中的包管理器以及强大的 systemctl
命令,并了解 systemd
在管理系统服务中的作用。
Linux 中的包管理器
包管理器是在 Linux 系统中安装、更新和删除软件报的重要工具。它们提供集中的软件包存储库并处理依赖关系,确保顺利高效的软件安装。
APT(Advanced Package Tool)
APT(高级打包工具)是一种广泛使用的包管理系统,主要用于 Ubuntu 等基于 Debian 的发行版。它提供了一个用户友好的命令行界面来与软件包管理系统交互。
使用 APT,可以执行各种操作,包括软件包的安装、更新和删除。APT 自动解决依赖关系,确保正确安装所有必需的软件包。
YUM(Yellowdog Updater Modified)
YUM(Yellowdog 更新程序修改版)是另一种流行的包管理系统,用于 CentOS 等基于 Red Hat(红帽)的发行版。它简化了软件包管理和依赖关系处理。
YUM 提供了用户管理包的命令行界面。可以使用 YUM 命令搜索包、安装、更新和删除它们。它负责解决包依赖性,确保安装过程顺利进行。
APT 和 YUM 都极大地简化了管理关键包的过程,使在不同 Linux 发行版上工作的 DevOps 工作变得高效且无忧。
Systemctl 和 Systemd
systemctl
是一个命令行实用程序,用于管理采用systemd init
系统的 Linux 发行版中的系统服务。systemd
是一个系统和服务管理器,提供进程管理、日志记录和服务依赖项等高级功能。
systemd
取代了传统的 sysv init
系统,并提供增强的功能和对系统服务的控制。它支持并行服务启动、高效的依赖关系管理以及更好的监控和日志记录功能。
与 systemctl
和 systemd
相关的关键概念如下:
- 服务单元(Service Uints) :
systemd
使用服务单元(扩展名为.service
的配置文件)来定义和管理服务。这些单元描述了服务的属性和行为。 - 服务管理(Service Management) :
systemctl
提供诸如start
、stop
、restart
、enable
和disable
等命令来管理服务。这些命令允许我们控制系统中服务的生命周期和行为。 - 系统状态(System status) :可以使用
systemctl status
获取服务的详细信息,包括其当前状态、启用或禁用状态以及最近的日志条目。该功能有助于排除故障和监控服务。
systemctl
和 systemd
提供了一种现代且高效的方法来管理 Linux 系统上的服务。它们在管理服务方面提供了更大的控制力、灵活性和一致性,是沃尔玛你能够更轻松地处理各种与服务相关的任务。
使用包管理安装 Docker 和 Jenkins
下面,我们将通过使用包管理器在 Ubuntu 上安装 Docker 和 Jenkins,加深我们对包管理器的知识的实践。
在 Ubuntu 上安装 Docker
使用 APT 在 Ubuntu 上安装 Docker,可按照以下步骤操作:
设置存储库
- 更新
apt
软件包索引并安装软件包以允许apt
通过 Https 使用存储库:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
- 添加 Docker 的官方 GPG 密钥:
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a r /etc/apt/keyrings/docker.gpg
- 使用以下命令设置存储库:
echo
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" |
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- 更新
apt
包索引:
sudo apt-get update
- 安装 Docker 引擎,containerd 和 Docker Compose:
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
- 启动 Docker:
sudo systemctl start docker
在 Ubuntu 上安装 Jenkins
使用 APT 在 Ubuntu 上安装 Jenkins,可按照以下步骤操作:
- Jenkins 需要 Java 才能运行,因此我们将更新 Debian apt 存储库,安装 OpenJDK 11,并使用以下命令检查安装:
sudo apt update
sudo apt install openjdk-11-jre
java -version
openjdk version "11.0.20.1" 2023-08-24
OpenJDK Runtime Environment (build 11.0.20.1 1-post-Ubuntu-0ubuntu122.04)
OpenJDK 64-Bit Server VM (build 11.0.20.1 1-post-Ubuntu-0ubuntu122.04, mixed mode, sharing)
- 接下来,我们就可以使用以下命令安装 Jenkins 长期支持版本:
sudo wget -O /usr/share/keyrings/jenkins-keyring.asc
https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key
echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc]
https://pkg.jenkins.io/debian-stable binary/ | sudo tee
/etc/apt/sources.list.d/jenkins.list > /dev/null
sudo apt-get update
sudo apt-get install jenkins
- 启动 Jenkins 服务:
sudo systemctl start jenkins
- 在系统启动自动启动 jenkins:
sudo systemctl enable jenkins
- jenkins 现在应该已安装并在你的 ubuntu 系统上运行了。你可以通过打开浏览器输入:
http://localhost:8080
来访问它。
检查 Docker 服务的状态
现在 Docker 已经安装,我们可以使用 systemctl
检查 Docker 服务的状态。
要检查 Docker 服务的状态,可以运行以下命令:
代码语言:javascript复制systemctl status docker
输出将显示有关 Docekr 服务当前状态的信息,包括它是否正在运行,已启动以及任何最近的日志信息。
代码语言:javascript复制root@huang-ubuntu:~# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2023-11-28 15:03:29 UTC; 24min ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 1630 (dockerd)
Tasks: 7
Memory: 24.3M
CPU: 713ms
CGroup: /system.slice/docker.service
└─1630 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Nov 28 15:03:27 huang-ubuntu systemd[1]: Starting Docker Application Container Engine...
Nov 28 15:03:27 huang-ubuntu dockerd[1630]: time="2023-11-28T15:03:27.874467315Z" level=inf>Nov 28 15:03:27 huang-ubuntu dockerd[1630]: time="2023-11-28T15:03:27.876008569Z" level=inf>Nov 28 15:03:28 huang-ubuntu dockerd[1630]: time="2023-11-28T15:03:28.367600524Z" level=inf>Nov 28 15:03:29 huang-ubuntu dockerd[1630]: time="2023-11-28T15:03:29.139869418Z" level=inf>Nov 28 15:03:29 huang-ubuntu dockerd[1630]: time="2023-11-28T15:03:29.200860701Z" level=inf>Nov 28 15:03:29 huang-ubuntu dockerd[1630]: time="2023-11-28T15:03:29.201228267Z" level=inf>Nov 28 15:03:29 huang-ubuntu dockerd[1630]: time="2023-11-28T15:03:29.279347015Z" level=inf>Nov 28 15:03:29 huang-ubuntu systemd[1]: Started Docker Application Container Engine.
停止 Jenkins 服务
下面,我们来停止 jenkins 服务并查看下前后的状态显示。
要停止 Jenkins 服务,请运行以下命令:
代码语言:javascript复制sudo systemctl stop jenkins
在停止 Jenkins 之前显示的状态:
代码语言:javascript复制root@huang-ubuntu:~# systemctl status jenkins.service
● jenkins.service - Jenkins Continuous Integration Server
Loaded: loaded (/lib/systemd/system/jenkins.service; enabled; vendor preset: enabled)
Active: activating (start) since Tue 2023-11-28 15:29:59 UTC; 1min 11s ago
Main PID: 5995 (java)
Tasks: 41 (limit: 2221)
Memory: 150.0M
CPU: 16.078s
CGroup: /system.slice/jenkins.service
└─5995 /usr/bin/java -Djava.awt.headless=true -jar /usr/share/java/jenkins.war>
Nov 28 15:30:13 huang-ubuntu jenkins[5995]: d981ea8b31ef481c9957d0f9798bed39
Nov 28 15:30:13 huang-ubuntu jenkins[5995]: This may also be found at: /var/lib/jenkins/sec>Nov 28 15:30:13 huang-ubuntu jenkins[5995]: ***********************************************>Nov 28 15:30:13 huang-ubuntu jenkins[5995]: ***********************************************>Nov 28 15:30:13 huang-ubuntu jenkins[5995]: ***********************************************>Nov 28 15:30:13 huang-ubuntu jenkins[5995]: WARNING: An illegal reflective access operation>Nov 28 15:30:13 huang-ubuntu jenkins[5995]: WARNING: Illegal reflective access by org.codeh>Nov 28 15:30:13 huang-ubuntu jenkins[5995]: WARNING: Please consider reporting this to the >Nov 28 15:30:13 huang-ubuntu jenkins[5995]: WARNING: Use --illegal-access=warn to enable wa>Nov 28 15:30:13 huang-ubuntu jenkins[5995]: WARNING: All illegal access operations will be >
在停止 Jenkins 之后显示的状态:
代码语言:javascript复制root@huang-ubuntu:~# systemctl stop jenkins.service
root@huang-ubuntu:~# systemctl status jenkins.service
○ jenkins.service - Jenkins Continuous Integration Server
Loaded: loaded (/lib/systemd/system/jenkins.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Tue 2023-11-28 15:33:44 UTC; 1s ago
Process: 6150 ExecStart=/usr/bin/jenkins (code=exited, status=143)
Main PID: 6150 (code=exited, status=143)
Status: "Jenkins stopped"
CPU: 14.866s
Nov 28 15:33:43 huang-ubuntu jenkins[6150]: at jenkins.model.Jenkins.<init>(Jenkins>Nov 28 15:33:43 huang-ubuntu jenkins[6150]: at hudson.model.Hudson.<init>(Hudson.ja>Nov 28 15:33:43 huang-ubuntu jenkins[6150]: at hudson.model.Hudson.<init>(Hudson.ja>Nov 28 15:33:43 huang-ubuntu jenkins[6150]: at hudson.WebAppMain$3.run(WebAppMain.j>Nov 28 15:33:43 huang-ubuntu jenkins[6150]: Caused: hudson.util.HudsonFailedToLoad
Nov 28 15:33:43 huang-ubuntu jenkins[6150]: at hudson.WebAppMain$3.run(WebAppMain.j>Nov 28 15:33:43 huang-ubuntu jenkins[6150]: 2023-11-28 15:33:43.957 0000 [id=24] INF>Nov 28 15:33:44 huang-ubuntu systemd[1]: jenkins.service: Deactivated successfully.
Nov 28 15:33:44 huang-ubuntu systemd[1]: Stopped Jenkins Continuous Integration Server.
Nov 28 15:33:44 huang-ubuntu systemd[1]: jenkins.service: Consumed 14.866s CPU time.
了解 systemctl 和 service
systemctl
和 service
都是用于管理 Linux 上的服务的命令行实用程序。但是,它们之间存在一些差异:
systemctl
是用于管理使用systemd
的 Linux 发行版中的服务的主要命令行实用程序。它提供了更高级的特性和功能,例如服务依赖性管理和改进的日志记录。service
是一个向后兼容的命令。适用于systemd
和旧版SysV init
系统。它在许多系统上仍然可用,但逐渐被systemctl
取代。
为了比较特定服务的 systemctl
和 service
的输出,我们以 Docker 为例。
运行以下命令,实用 systemctl
和 service
检查 Docker 服务的状态:
systemctl status docker
service docker status
观察上面命令的输出中的差异(如果有,有可能是一样的)。那么将帮助你了解 systemctl
和 service
之间的差异以及它们在不同 Linux 发行版中的用法。
以上就是本文介绍的内容,我们学习了 Linux 中的包管理器,以及使用 apt 安装了 Docker 和 Jenkins,并了解systemctl
和 system
两个命令,并执行了与服务管理相关的各种任务。