【Docker】Docker Compose(容器编排)

一、什么是 Docker Compose

docker-composeDocker 官方的开源项目,使用 python 编写,实现上调用了 Docker 服务的 API 进行容器管理及编排,其官方定义为定义和运行多个 Docker 容器的应用

docker-compose 中有两个非常重要的概念:

  1. 服务(service)一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
  2. 项目(project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义,整个 docker-compose.yml 定义一个项目。

Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。

通过 compose 可以方便的管理多个服务


二、生活案例

docker compose 就像航母一样,有舰载机、防空导弹,舰载机、导弹就是一个个容器。


 三、为什么要 Docker Compose  

Docker 是一个轻量化的应用程序,Docker 官方推荐每个 Docker 容器中只运行一个进程如果一个应用需要涉及到 MySQL、nginx 等环境, 那么就需要分别为应用、数据库和 nginx 创建单独的 docker 容器,然后再分别启动容器。

如果构建好 Docker 之后,每次启动应用都至少需要 docker run 三次或者写一些脚本来实现,这样会比较繁琐。另外,这些 docker 容器都是分散独立的,也不方便镜像管理。

既然这些 docker 容器都是为了同一个应用服务,就应该把它们放到一起,这就引出了 docker-compose 来解决这类型的问题。


四、Docker Compose 的安装

安装 docker 的时候,我已经安装了 docker-compose,安装的组件包名称为 docker-compose-plugin。

检查安装是否成功:


五、Docker Compose 的功能

1、使用步骤

Compose 使用的步骤:

  • 使用 docker-compose.yml 定义构成应用程序的服务,这样它们就可以在隔离环境中一起运行。
  • 执行 docker compose up 命令来启动并运行整个应用程序。

2、核心功能

Compose 具有管理应用程序整个生命周期的命令:

  • 启动,停止和重建服务
  • 查看正在运行的服务的状态
  • 流式传输运行服务的日志输出
  • 在服务上运行一次性命令

六、Docker Compose 使用场景

1、单主机部署

快速搭建一个单节点开发或者测试环境,方便使用。


2、不同环境隔离

通过指定 project 来运行不同的环境,实现隔离的目的。


七、Docker Compose 文件(docker-compose.yml

1、文件语法版本

目前官方支持三个大版本, 即 Version 1Version 2 Version 3, 其中 Version 1 已经被废弃掉了。当前最新的版本是 3.8,它支持的 Docker Engine 版本不得低于 19.03.0。后面的学习主要是基于 3.8 版本的 Compose file 语法进行讲解,其他版本的介绍可以参考:

https://docs.docker.com/compose/compose-file/compose-versioning/


2、文件基本结构及常见指令

version: "3.8" # 定义版本, 表示当前使用的 docker-compose 语法的版本services: # 服务, 可以存在多个
servicename: # 服务名字, 它也是内部 bridge 网络可以使用的 DNS name, 如果不是集群模式相当于 docker run 的时候指定的一个名称#集群(Swarm)模式是多个容器的逻辑抽象image: # 必选,镜像的名字command: # 可选,如果设置,则会覆盖默认镜像里的 CMD 命令environment: # 可选,等价于 docker container run 里的 --env 选项设置环境变量volumes: # 可选,等价于 docker container run 里的 -v 选项 绑定数据卷networks: # 可选,等价于 docker container run 里的 --network 选项指定网络ports: # 可选,等价于 docker container run 里的 -p 选项指定端口映射expose: # 可选,指定容器暴露的端口 build: #构建目录depends_on: #服务依赖配置env_file: #环境变量文件
servicename2:image: command: networks: ports: 
servicename3:#...volumes: # 可选,等价于 docker volume create
networks: # 可选,等价于 docker network create

(1)常见字段格式语法

A. image

指定容器运行的镜像。

以下格式都可以:

image: redis
image: redis:5
image: 
redis@sha256:0ed5d5928d4737458944eb604cc8509e245c3e19d02ad83935398
bc4b991aac7
image: library/redis
image: docker.io/library/redis
image: my_private.registry:5000/redis


B. command
覆盖容器启动的默认命令。
command: ["bundle", "exec", "thin", "-p", "3000"]
command: bundle exec thin -p 3000


C. entrypoint
覆盖容器默认的 entrypoint
entrypoint: /code/entrypoint.sh

也可以是以下格式:

entrypoint:- php- -d- zend_extension=/usr/local/lib/php/extensions/no-debug-nonzts-20100525/xdebug.so- -d- memory_limit=-1- vendor/bin/phpunit


D. environment

添加环境变量。您可以使用数组或字典、任何布尔值,布尔值需要用引号引起来,以确保 YML 解析器不会将其转换为 True False

#map 语法
environment:RACK_ENV: developmentSHOW: "true"USER_INPUT:
#数组语法
environment:- RACK_ENV=development- SHOW=true- USER_INPUT


E. networks

指定容器运行的网络:

配置容器网络:

services:frontend:image: awesome/webappnetworks:- front-tier- back-tiermonitoring:image: awesome/monitoringnetworks:- adminbackend:image: awesome/backendnetworks:back-tier:aliases:- databaseadmin:aliases:- mysqlnetworks:front-tier:back-tier:admin:

配置网络驱动和子网信息:

services:frontend:image: awesome/webappnetworks:front-tier:ipv4_address: 172.16.238.10networks:front-tier:ipam:driver: defaultconfig:- subnet: "172.16.238.0/24"


F. volumes
将主机的数据卷或者文件挂载到容器里。
#短语法
services:db:image: postgres:latestvolumes:- "/localhost/postgres.sock:/var/run/postgres/postgres.sock"- "/localhost/data:/var/lib/postgresql/data"#完整语法
services:backend:image: awesome/backendvolumes:- type: volume#命名卷source: db-datatarget: /datavolume:nocopy: true#绑定卷- type: bindsource: /var/run/postgres/postgres.socktarget: /var/run/postgres/postgres.sockvolumes:db-data:


G. ports

指定端口映射。以下格式都可以:

#完整语法
ports:- target: 80host_ip: 127.0.0.1published: 8080protocol: tcpmode: host- target: 80host_ip: 127.0.0.1published: 8000-9000protocol: tcpmode: host
#短语法
ports:- "3000"- "3000-3005"- "8000:8000"- "9090-9091:8080-8081"- "49100:22"- "127.0.0.1:8001:8001"- "127.0.0.1:5000-5010:5000-5010"- "6060:6060/udp"


H. expose

暴露端口,但不映射到宿主机,只被连接的服务访问。

仅可以指定内部端口为参数:

expose:- "3000"- "8000"


I. build

指定为构建镜像上下文路径:

例如 webapp 服务,指定为从上下文路径 ./dir/Dockerfile 所构建的镜像:

version: "3.7"
services:webapp:build: ./dir

或者,作为具有在上下文指定的路径的对象,以及可选的 Dockerfile args

version: "3.7"
services:webapp:build:context: ./dirdockerfile: Dockerfile-alternateargs:buildno: 1labels:- "com.example.description=Accounting webapp"- "com.example.department=Finance"- "com.example.label-with-empty-value"
  • context:上下文路径。
  • dockerfile:指定构建镜像的 Dockerfile 文件名。
  • args:添加构建参数,这是只能在构建过程中访问的环境变量。
  • labels:设置构建镜像的标签。

J. depends_on
设置依赖关系。
  • docker compose up:以依赖性顺序启动服务。在以下示例中,先启动 db redis ,才会启动 web
  • docker compose up SERVICE:自动包含 SERVICE 的依赖项。在以下示例中,docker compose up web 还将创建并启动 db redis
  • docker compose stop:按依赖关系顺序停止服务。在以下示例中,web db redis 之前停止。
version: "3.7"
services:web:build: .depends_on:- db- redisredis:image: redisdb:image: postgres

可以指定条件,healthy 需要配置 healthcheck 来完成。

services:web:build: .depends_on:db:condition: service_healthyredis:condition: service_startedredis:image: redisdb:image: postgres

health check 样例


K. env_file
从文件添加环境变量。可以是单个值或列表的多个值。
env_file: .env

也可以是列表格式:

env_file:- ./common.env- ./apps/web.env- /opt/secrets.env


八、Docker Compose 命令清单

官网参考地址:https://docs.docker.com/compose/reference/

命令清单如下:


1、命令格式

对于 Compose 来说,大部分命令的对象既可以是项目本身,也可以指定为项目中的服务或者容器。如果没有特别的说明,命令对象将是项目,这意味着项目中所有的服务都会受到命令影响。

docker-compose 命令的基本的使用格式为:

docker compose [OPTIONS] COMMAND [ARGS...]


2、常见选项说明

  • -f,--file 指定使用的 Compose 模板文件,默认为 docker-compose.yml,可以多次指定。
  • -p,--project-name 指定项目名称,默认将使用所在目录名称作为项目名。


3、常见命令说明

(1)up

该命令的作用十分强大,它会尝试自动完成包括构建镜像、(重新)创建服务、启动服务并关联服务相关容器的一系列操作,可以直接通过该命令来启动一个项目。

docker compose up [options] [SERVICE...]

  • -d 在后台运行服务容器,推荐在生产环境下使用该选项。
  • --force-recreate 强制重新创建容器,不能与 --no-recreate 同时使用。
  • --no-recreate 如果容器已经存在了,则不重新创建,不能与 --force-recreate 同时使用。


(2)down

停止所有容器,并删除容器和网络。

docker compose down [options] [SERVICE...]

  • -v,--volumes 删除容器同时删除目录映射。 


(3)run

该命令可以在指定服务容器上执行相关的命令。

  • -d:后台运行容器。
  • --name NAME:为容器指定一个名字。
  • --entrypoint CMD:覆盖默认的容器启动指令。
  • -e KEY=VAL:设置环境变量值,可多次使用选项来设置多个环境变量。
  • -u, --user="":指定运行容器的用户名或者 uid。
  • --rm:运行命令后自动删除容器。
  • -p,--publish=[]:映射容器端口到本地主机。


九、操作案例

1、Docker Compose 基本操作

(1)创建 compose 目录


(2)进入 prj15 目录,创建 docker-compose.yml 文件


(3)输入内容


(4)输入 docker config 会做检查


(5)创建首页目录,编辑首页内容


(6)启动服务


(7)通过页面访问


(8)停止服务


(9)启动服务


(10)删除服务


十、综合案例

1、Docker Compose 部署自定义服务

编写一个简单的案例,nginx 反向代理到我们的一个 springboot 微服务,微服务访问我们的 msyql 数据库查询用户信息。


(1)设计数据非常简单的一个表信息,写入两条数据,文件为 init.sq

数据初始化脚本:


(2)创建一个 springboot 应用,配置 maven 项目

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.8</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.bit</groupId><artifactId>demojdbc</artifactId><version>0.0.1-SNAPSHOT</version><name>demojdbc</name><description>demojdbc</description><properties><java.version>8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.49</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

(3)添加启动类

package com.bit.demojdbc;import org.springframework.boot.SpringApplication;
import
org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class DemojdbcApplication {public static void main(String[] args) {SpringApplication.run(DemojdbcApplication.class, args);}
}

(4)配置数据库信息

注意本地测试的时候红色部分调整为 ip 地址,而我们实际的服务使用的 mysql 的一个服务名称。

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://mysql:3306/test
spring.datasource.username=root
spring.datasource.password=root

(5)配置用户控制器,简单配置,不再去涉及 mapper 那些内容通过 jdbc 直接完成操作

package com.bit.demojdbc;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/user")
public class UserController {@AutowiredJdbcTemplate jdbcTemplate;@RequestMapping("/list")@ResponseBodypublic Object Users(){return jdbcTemplate.queryForList("select * from users");}
}

(6)编译打包


(7)进入打包的目录,本地测试正常启动

PS D:\src\bit\demojdbc\target> java -jar .\demojdbc-0.0.1-SNAPSHOT.jar.   ____          _           __ _ _/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/  ___)| |_)| | | | | || (_| |  ) ) ) )'  |____| .__|_| |_|_| |_\__, | / / / /
==========|_|==============|___/=/_/_/_/
::  Spring Boot ::                (v2.7.8)2023-04-26 00:21:41.578 INFO 23736 --- [ main] com.bit.demojdbc.DemojdbcApplication : Starting DemojdbcApplication v0.0.1-SNAPSHOT using Java 1.8.0_202 on maxhou with PID 23736 (D:\src\bit\demojdbc\target\demojdbc-0.0.1-SNAPSHOT.jar started by facea in D:\src\bit\demojdbc\target)
2023-04-26 00:21:41.580 INFO 23736 --- [ main] com.bit.demojdbc.DemojdbcApplication : No active profile set, falling back to 1 default profile: "default"
2023-04-26 00:21:43.877 INFO 23736 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2023-04-26 00:21:43.886 INFO 23736 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2023-04-26 00:21:43.886 INFO 23736 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.71]
2023-04-26 00:21:43.989 INFO 23736 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2023-04-26 00:21:43.989 INFO 23736 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2356 ms
2023-04-26 00:21:44.671 INFO 23736 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2023-04-26 00:21:44.687 INFO 23736 --- [ main] com.bit.demojdbc.DemojdbcApplication : Started DemojdbcApplication in 3.457 seconds (JVM running for 3.804)

(8)本地测试正常访问


(9) 创建目录


(10)编写 docker-compose.yml


(11)创建工程目录和卷目录


(12)将 nginx 的反向代理配置 xyl.conf 放入到 ./nginx/conf.d

其中内容为: 

 


(13)将数据库初始化文件 init.sql 放入到 ./mysql/initdb 目录


(14)将应用 jar 包放入到 ./app 目录


(15)启动项目


(16)浏览器访问 nginx

可以看到用户信息正常返回:

到此完成了我们的 nginx 服务,后台服务和数据的完整的一个应用。


2、Docker Compose 部署 WordPress

(1)什么是 WordPress

WordPress 是使用 PHP 语言开发的博客平台,用户可以在支持 PHP MySQL 数据库的服务器上架设属于自己的网站,也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一款个人博客系统,并逐步演化成一款内容管理系统软件,它是使用 PHP 语言和 MySQL 数据库开发的,用户可以在支持 PHP MySQL 数据库的服务器上使用自己的博客。

WordPress 有许多第三方开发的免费模板,安装方式简单易用。不过要做一个自己的模板,则需要你有一定的专业知识。比如你至少要懂的标准通用标记语言下的一个应用 HTML 代码、CSSPHP 等相关知识。

WordPress 官方支持中文版,同时有爱好者开发的第三方中文语言包,如 wopus 中文语言包。WordPress 拥有成千上万个各式插件和不计其数的主题模板样式。


(2)部署 WordPress

A. 编写 Docker Compose


B. 运行站点


C. 访问 web 页面


D. 配置参数,点击安装


E. 登录


G. 进入后台


H. 删除,释放空间


十一、常见问题

1、uprun start 之间有什么区别

通常我们想要 docker compose up用于 up 启动或重新启动 docker-compose.yml。

  • 在默认的 “附加” 模式下,会看到来自所有容器的所有日志。
  • 在 分离” 模式(-d)中,启动容器后 Compose 退出,但容器继续在后台运行。

docker compose run 命令用于运行 一次性” 或 临时” 任务。它需要您要运行的服务名称,并且只为正在运行的服务所依赖的服务启动容器。用于 run 运行测试或执行管理任务,例如从数据卷容器中删除或添加数据。该 run 命令的作用类似于 docker run -ti 它打开容器的交互式终端并返回与容器中进程的退出状态匹配的退出状态。

docker compose start 命令仅对重新启动先前创建但已停止的容器有用,它从不创建新容器。


2、如何在同一主机上运行 Compose 文件的多个副本

Compose 使用项目名称为项目的所有容器和其他资源创建唯一标识符。要运行项目的多个副本,请使用 -p 命令行选项COMPOSE_PROJECT_NAME 环境变量设置自定义项目名称


3、可以控制服务启动顺序吗?

可以控制启动顺序。通过依赖指定,并且可以配合 healthcheck 等健康检查成功以后再启动。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/403431.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

趣映 v2.3.8 高级版 剪映替代品 解锁会员功能

看到名字&#xff0c;想必很多网友会联想到剪映&#xff0c;没错&#xff0c;趣映也是一款类似剪映的视频编辑工具。趣映为用户提供了全面的视频编辑和制作&#xff0c;更专注于动画视频制作的软件。功能齐全&#xff0c;操作简单&#xff0c;可以帮助用户从灵感创作到成片输出…

MYSQL----表的创建

1.创建表 create table 表名&#xff08; field1 datetype, field2 datetype, field3 datetype &#xff09; 1.field字段名&#xff0c;也就是属性&#xff0c;相当于java类里面的成员属性 2.datetype 数据类型 3.最后一个字段的定义&#xff0c;结束没有逗号 4.字段的定义在…

【学习总结】JVM篇

JVM JVM基础知识 主力机型 HotSpot VM HotSpot虚拟机时OpenJDK和OracleJDK中默认的Java虚拟机。它最初并非由Sun公司所开发&#xff0c;而是由一家名为“Longview Technologies”的小公司设计。Sun公司注意到这款虚拟机在即时编译等多个方面有着优秀的理念和实际成果&#…

解决问题:Arcgis10.8“数据“-“导出至CAD“时就卡死了

问题现象&#xff1a;我们在使用Arcgis10.8软件&#xff0c;执行 “数据导出至CAD”操作时&#xff0c;会出现卡死的情况&#xff0c;步骤如下图所示&#xff1a; 解决方案&#xff1a;在菜单栏依次选择“地理处理”-“地理处理选项”&#xff0c;然后在“后台处理”和“发生错…

金价多次尝试刷新最高纪录,美国零售销售数据是绊马索

金价一直在试探新高&#xff0c;该纪录为每盎司2,485美元。而且&#xff0c;强劲的美国零售销售报告正在阻止金价的上涨。 由于强大的阻力&#xff0c;金价无法继续上涨。一周的净空头头寸大增。 发布了强于预期的美国零售销售报告后&#xff0c;金价承受了压力。期望的50个基…

递归--数据结构--黑马

递归 总结一句话&#xff0c;上手直接多刷Leetcode&#xff0c;比看这个更有用。 定义 递归是一种解决计算问题的方法&#xff0c;其中解决方案取决于同一类问题的更小子集。 例如&#xff0c;单链表递归遍历的例子&#xff1a; void f(Node node) {if (node null) {retu…

Ubuntu18.04 配置EtherCAT主站IGH SOEM

IGH IGH 是开源的EtherCAT 主站软件 一、安装依赖 sudo apt update sudo apt install build-essential linux-headers-$(uname -r) mercurial autoconf libtool 也不知道安装的完全不完全 uname -r 可以查看内核&#xff0c;我安装的ubuntu18.04的内核版本是 5.4.0-84-gen…

Koa商城项目-轮播图模块(后端)

前言 通过这次独自做前后端发现有很多需要提升的地方&#xff0c;很多细节处理不到位。下面简单看一下本人自己做的效果吧~~ Git地址 https://gitee.com/ah-ah-bao/koa_system 效果图 后端逻辑分析 首先编写route->banner.router.js /*** author: zxb* date: 2024-08-06…

k8s 部署polardb-x集群

前言 体验了基于源码构建的部署polardb-x 单机部署&#xff0c;当然也想体验性能更好的完全分布式集群。这边文章将重点介绍如何部署polardb-x集群 简介 PolarDB-X 是一款面向超高并发、海量存储、复杂查询场景设计的云原生分布式数据库系统。其采用 Shared-nothing 与存储计…

二叉树详解(1)

文章目录 目录1. 树的概念及结构1.1 树的相关概念1.2 树的表示1.3 树在实际中的运用&#xff08;表示文件系统的目录树结构&#xff09; 2. 二叉树的概念及结构2.1 概念2.2 特殊的二叉树2.3 二叉树的存储结构 3. 二叉树的顺序结构及实现3.1 二叉树的顺序结构3.2 堆的概念及结构…

Ubuntu基础使用

1.首先我们先获取ubuntu的操作相同其中也分为4部分&#xff1a; 1.云服务器。在服务器里面我们可以去选择3种服务器分别为阿里云&#xff0c;腾讯云&#xff0c;华为云&#xff0c;这3个&#xff0c;有服务器才可以进去进行操作。 2.双系统。双系统有一个特点就是只能同时启动一…

机器学习:线性回归算法(一元和多元回归代码)

1、线性回归 1、数据准备&#xff1a; 描述如何获取和准备数据。 2、图像预处理&#xff1a; 包括图像读取。 3、将数据划分为训练集和测试集。 4、计算数据的相关系数矩阵。 5、模型训练&#xff1a; 详细说明如何使用线性回归算法训练模型&…

AI视频创作原理

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…

打卡学习Python爬虫第二天|Web请求过程刨析

一、服务器渲染 服务器端渲染&#xff08;Server-Side Rendering&#xff0c;简称SSR&#xff09;是一种网页渲染技术。在这种技术中&#xff0c;服务器在接收到客户端的请求后&#xff0c;会生成页面的初始HTML内容&#xff0c;并将其发送给客户端。客户端浏览器接收到这些HT…

Go Roadmap-Basics中文笔记

Go Roadmap-Basics 地址&#xff1a;https://roadmap.sh/golang 简介&#xff1a;Github star No.6 学习路线 Go 中译版 Learn the Basics Go特点&#xff1a;静态类型&#xff0c;运行速度快&#xff0c;编译语言&#xff0c;编译速度快&#xff0c;自动垃圾回收&#xff…

Linux中查看修改系统系统时间

当我们项目部署在Linux中&#xff0c;随着服务器运行时间变长&#xff0c;会出现Linux服务器时间变快或者变慢的情况&#xff0c;有些系统对时间准确性要求比较高&#xff0c;笔者有碰到某天服务器突然无法调用第三方接口&#xff0c;最终排查后系统时间超过15分钟&#xff0c;…

SAR靶机笔记

SAR 靶机笔记 概述 SAR 是 Vulnhub 上的靶机&#xff0c;大家可以去 vulnhub 网站上去进行下载。 这里有链接&#xff1a; https://download.vulnhub.com/sar/sar.zip 一丶常规的 nmap 扫描 1&#xff09;主机发现 sn 只做 ping 扫描&#xff0c;不做端口扫描 nmap -sn …

Linux - 基础工具使用

文章目录 一、yum1、介绍2、功能3、语法4、使用 二、rzsz1、安装rzsz的指令2、介绍3、使用 三、vim基础使用1、介绍2、基础使用 四、gcc/g使用1、生成可执行文件过程2、语法3、常用选项4、编译过程5、动静态库6、包含头文件的多文件编译7、链接外部库 一、yum 1、介绍 Linux中…

类和对象(下)(1)

类和对象&#xff08;下&#xff09; 再探构造函数 我们之前在实现构造函数的时候&#xff0c;初始化成员变量使用的方式都是在函数体内进行赋值&#xff0c;其实构造函数初始化成员变量还有一种方式&#xff1a;初始化列表。 初始化列表不只是为了写得方便&#xff0c;还能解…

构建具有音频功能的中英翻译器:一个Python应用程序的旅程

在当今的全球化世界中&#xff0c;语言翻译工具变得越来越重要。作为一名软件开发者&#xff0c;我最近完成了一个有趣的项目&#xff1a;一个结合了翻译、文字转语音和数据管理功能的中英翻译器。在这篇博客中&#xff0c;我将分享这个应用程序的主要特性和开发过程中的一些见…