nginx的源代码目前在:https://github.com/nginx/nginx/
完成git clone之后,由于版本更新,目前的nginx构建工具被放在了根目录下的auto里面,需要依次执行:
./auto/configure
./make
./make install就可以实现安装。
首先是在configure下会检查一次你当前的依赖库是否完备,如果configure阶段报错,那么根据错误去排查一下缺什么库,然后补齐。
docker相关的主要操作
对于docker来说,如下三个操作是我们比较关心的:
docker进程之间的交互,包括socket交互、pipe交互等(一般只会用socket)
docker服务本身的环境配置与镜像保存(同时也涉及到docker环境的打包)
docker的开机(虚拟机)启动项配置
进程交互
对于docker进程的IP端口使用情况的查询,可以直接使用docker ps来检查当前的IP端口情况。
# 直接的检查当前正在运行的image的端口情况
docker ps
# 在docker的启动命令中检查提供给kernel的启动相关的代理参数设置
ps aux | grep docker对于docker中运行的软件来说,一般都需要使用socket进行docker之间的交互。docker系统调用socket函数后,首先会在本地创建一个独特的IP地址+端口,此时就已经可以正常占用IP,或者可以正常进行客户端侧的connect操作了。
开机启动
对于docker的启动命令、docker镜像的启动命令等信息来说,是通过daemon、dockerfile等文件描述的。
首先是通过systemd启动docker的基础设施:
使用systemctl status docker确定当前docker状态

然后前往/lib/systemd/system/docker.service去修改对应的开机命令

可以看到,ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock命令就是实际的开机命令,这个命令启动了dockerd,并且启用了一个底层容器运行时 containerd 的通信套接字。
然后通过daemon进行相关的docker本体的初始化,这里原环境中就只配了一个镜像源,所以就不多说什么了。
这里还有一个需要注意的事项是,docker的容器和docker本体其实是两个运行在宿主机中的进程,具体在宿主机中,使用ps aux命令可以看到管理所有容器的进程dockerd和一个管理容器本身的,由dockerd控制命名空间资源实现的一个具体到command的进程。
在下文的启动项配置中,可以通过docker的inspect命令来查看具体的IP绑定。
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' [容器ID]结合下面的一个全貌的inspect,可以确定本地的一个IP的位置。
在HostConfig.PortBindings中,就可以看到当前容器尝试建链的host的IP,也即实际docker port查看到的信息。
启动项配置
docker在进行image的run动作的时候,内里其实内置了很多关联参数。比如镜像启动后在镜像内部执行什么命令,镜像启动后在docker暴露出来的IP与端口号是多少等等。
这些具体的参数可以使用docker inspect [docker-id]的方式来查看,包含如下方面:
docker镜像的基本信息,如ID、时间
docker的镜像启动命令,以path、args来描述
镜像的当前状态
镜像的环境变量、log变量
镜像的host配置
其他的参数配置
这里给定一个具体的halo的镜像inspect:
[
{
"Id": "4c12b81217850241079247eba64b7ca3fe2f3bc3e48abebfb3f55ac1d02fac52",
"Created": "2025-06-16T06:19:08.423806044Z",
"Path": "sh",
"Args": [
"-c",
"java -Dreactor.schedulers.defaultBoundedElasticOnVirtualThreads=true ${JVM_OPTS} org.springframework.boot.loader.launch.JarLauncher ${0} ${@}",
"--spring.r2dbc.url=r2dbc:pool:mysql://mysql:3306/halo_rksakh",
"--spring.r2dbc.username=halo_hXG8K4",
"--spring.r2dbc.password=halo_kmRJ55",
"--spring.sql.init.platform=mysql",
"--halo.external-url=http://localhost:8080"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 1998,
"ExitCode": 0,
"Error": "",
"StartedAt": "2026-06-02T13:44:52.716700269Z",
"FinishedAt": "2026-06-02T13:44:51.427036549Z",
"Health": {
"Status": "healthy",
"FailingStreak": 0,
"Log": [
{
"Start": "2026-10-13T11:28:50.409280155+08:00",
"End": "2026-10-13T11:28:50.460831638+08:00",
"ExitCode": 0,
"Output": " % Total % Received % Xferd Average Speed Time Time Time Current\n Dload Upload Total Spent Left Speed\n\r 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\r100 15 100 15 0 0 2770 0 --:--:-- --:--:-- --:--:-- 3000\n{\"status\":\"UP\"}"
},
{
"Start": "2026-10-13T11:29:20.461796136+08:00",
"End": "2026-10-13T11:29:20.515759091+08:00",
"ExitCode": 0,
"Output": " % Total % Received % Xferd Average Speed Time Time Time Current\n Dload Upload Total Spent Left Speed\n\r 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\r100 15 100 15 0 0 3854 0 --:--:-- --:--:-- --:--:-- 5000\n{\"status\":\"UP\"}"
},
{
"Start": "2026-10-13T11:29:50.517126957+08:00",
"End": "2026-10-13T11:29:50.570277609+08:00",
"ExitCode": 0,
"Output": " % Total % Received % Xferd Average Speed Time Time Time Current\n Dload Upload Total Spent Left Speed\n\r 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\r100 15 100 15 0 0 3815 0 --:--:-- --:--:-- --:--:-- 5000\n{\"status\":\"UP\"}"
},
{
"Start": "2026-10-13T11:30:20.571791977+08:00",
"End": "2026-10-13T11:30:20.626344371+08:00",
"ExitCode": 0,
"Output": " % Total % Received % Xferd Average Speed Time Time Time Current\n Dload Upload Total Spent Left Speed\n\r 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\r100 15 100 15 0 0 3608 0 --:--:-- --:--:-- --:--:-- 3750\n{\"status\":\"UP\"}"
},
{
"Start": "2026-10-13T11:30:50.62792087+08:00",
"End": "2026-10-13T11:30:50.679240552+08:00",
"ExitCode": 0,
"Output": " % Total % Received % Xferd Average Speed Time Time Time Current\n Dload Upload Total Spent Left Speed\n\r 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\r100 15 100 15 0 0 1743 0 --:--:-- --:--:-- --:--:-- 1875\n{\"status\":\"UP\"}"
}
]
}
},
"Image": "sha256:f57c0f467fce8a521de872ba73733a29d1e54453296595123c0ecf6a7c89521a",
"ResolvConfPath": "/var/lib/docker/containers/4c12b81217850241079247eba64b7ca3fe2f3bc3e48abebfb3f55ac1d02fac52/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/4c12b81217850241079247eba64b7ca3fe2f3bc3e48abebfb3f55ac1d02fac52/hostname",
"HostsPath": "/var/lib/docker/containers/4c12b81217850241079247eba64b7ca3fe2f3bc3e48abebfb3f55ac1d02fac52/hosts",
"LogPath": "/var/lib/docker/containers/4c12b81217850241079247eba64b7ca3fe2f3bc3e48abebfb3f55ac1d02fac52/4c12b81217850241079247eba64b7ca3fe2f3bc3e48abebfb3f55ac1d02fac52-json.log",
"Name": "/1Panel-halo-lGUB",
"RestartCount": 0,
"Driver": "overlay2",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "docker-default",
"ExecIDs": [
"b23a1987aca8535b9f55414c612874abba74b22ca7a0b92b780ab9fba43925df",
"e0862c33ffd156adbbd8a379c40949a211cd5ee7093b4ab8291b623710e22c1c",
"d67e539ab11d1a35cbd748671a0806e59debf116d6055235f15706ab26cc09a0"
],
"HostConfig": {
"Binds": [
"/opt/1panel/apps/halo/halo/data:/root/.halo2:rw"
],
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {}
},
"NetworkMode": "c8f205d78f9abcb210083979f1ca90319d19d4c8886fc3a668563f5ad78b323d",
"PortBindings": {
"8090/tcp": [
{
"HostIp": "127.0.0.1",
"HostPort": "8080"
}
]
},
"RestartPolicy": {
"Name": "always",
"MaximumRetryCount": 0
},
"AutoRemove": false,
"VolumeDriver": "",
"VolumesFrom": null,
"ConsoleSize": [
0,
0
],
"CapAdd": null,
"CapDrop": null,
"CgroupnsMode": "private",
"Dns": [],
"DnsOptions": [],
"DnsSearch": [],
"ExtraHosts": [],
"GroupAdd": null,
"IpcMode": "private",
"Cgroup": "",
"Links": null,
"OomScoreAdj": 0,
"PidMode": "",
"Privileged": false,
"PublishAllPorts": false,
"ReadonlyRootfs": false,
"SecurityOpt": null,
"UTSMode": "",
"UsernsMode": "",
"ShmSize": 67108864,
"Runtime": "runc",
"Isolation": "",
"CpuShares": 0,
"Memory": 0,
"NanoCpus": 0,
"CgroupParent": "",
"BlkioWeight": 0,
"BlkioWeightDevice": null,
"BlkioDeviceReadBps": null,
"BlkioDeviceWriteBps": null,
"BlkioDeviceReadIOps": null,
"BlkioDeviceWriteIOps": null,
"CpuPeriod": 0,
"CpuQuota": 0,
"CpuRealtimePeriod": 0,
"CpuRealtimeRuntime": 0,
"CpusetCpus": "",
"CpusetMems": "",
"Devices": null,
"DeviceCgroupRules": null,
"DeviceRequests": null,
"MemoryReservation": 0,
"MemorySwap": 0,
"MemorySwappiness": null,
"OomKillDisable": null,
"PidsLimit": null,
"Ulimits": null,
"CpuCount": 0,
"CpuPercent": 0,
"IOMaximumIOps": 0,
"IOMaximumBandwidth": 0,
"MaskedPaths": [
"/proc/asound",
"/proc/acpi",
"/proc/kcore",
"/proc/keys",
"/proc/latency_stats",
"/proc/timer_list",
"/proc/timer_stats",
"/proc/sched_debug",
"/proc/scsi",
"/sys/firmware",
"/sys/devices/virtual/powercap"
],
"ReadonlyPaths": [
"/proc/bus",
"/proc/fs",
"/proc/irq",
"/proc/sys",
"/proc/sysrq-trigger"
]
},
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/b4f51c6f6b58863c15700a888ec72bf35ec4a934c3413e40864dc78b61075b12-init/diff:/var/lib/docker/overlay2/c60d26603f9abe18c2e1849f20703e81d96a5d2eae9d63d46ec8bee7df5c0c75/diff:/var/lib/docker/overlay2/4a12416fdd5ba719aeb199d3b3a65945b6bd2fa59b2f6e004d24cc116eed5e3e/diff:/var/lib/docker/overlay2/a4c95b37cd506bf5fb7204585bfb6910bf2c96014219760d880e6363c0e95ac8/diff:/var/lib/docker/overlay2/7204acbf1c7364e1f7979bd3a1399c9600a03673590609a46254739f31409068/diff:/var/lib/docker/overlay2/e7a05576288dd5dea4bd7201079938d776ae9a5e0bbc812b047e004f3eaab5a3/diff:/var/lib/docker/overlay2/9dfbeb425324d4b7d69a78ccf041e939321036001c64422178470b7ac6b843ea/diff:/var/lib/docker/overlay2/94ac06ca9dff0264a6a41d6f8722a4eabadcd889e654966fa7fb6c22afa98757/diff:/var/lib/docker/overlay2/66bea153657c82a8daea0a042a93bfcddd0b034ab5120478fa68ba33f9161df7/diff:/var/lib/docker/overlay2/de6d752023df38dfdbd7bcf9f0a1935f921cf2649c71e05e314ec3705a2d6a94/diff:/var/lib/docker/overlay2/696664eb23b726891743da1aa6be46c870cc755bbc08e529fab68481e3ba7dd9/diff",
"MergedDir": "/var/lib/docker/overlay2/b4f51c6f6b58863c15700a888ec72bf35ec4a934c3413e40864dc78b61075b12/merged",
"UpperDir": "/var/lib/docker/overlay2/b4f51c6f6b58863c15700a888ec72bf35ec4a934c3413e40864dc78b61075b12/diff",
"WorkDir": "/var/lib/docker/overlay2/b4f51c6f6b58863c15700a888ec72bf35ec4a934c3413e40864dc78b61075b12/work"
},
"Name": "overlay2"
},
"Mounts": [
{
"Type": "bind",
"Source": "/opt/1panel/apps/halo/halo/data",
"Destination": "/root/.halo2",
"Mode": "rw",
"RW": true,
"Propagation": "rprivate"
}
],
"Config": {
"Hostname": "4c12b8121785",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": true,
"AttachStderr": true,
"ExposedPorts": {
"8090/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"JVM_OPTS=",
"PATH=/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"LANG=en_US.UTF-8",
"LANGUAGE=en_US:en",
"LC_ALL=en_US.UTF-8",
"JAVA_VERSION=jdk-21.0.7+6_openj9-0.51.0",
"JAVA_HOME=/opt/java/openjdk",
"JAVA_TOOL_OPTIONS=-XX:+IgnoreUnrecognizedVMOptions -XX:+PortableSharedCache -XX:+IdleTuningGcOnIdle -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,readonly,nonFatal",
"HALO_WORK_DIR=/root/.halo2",
"SPRING_CONFIG_LOCATION=optional:classpath:/;optional:file:/root/.halo2/",
"TZ=Asia/Shanghai"
],
"Cmd": [
"--spring.r2dbc.url=r2dbc:pool:mysql://mysql:3306/halo_rksakh",
"--spring.r2dbc.username=halo_hXG8K4",
"--spring.r2dbc.password=halo_kmRJ55",
"--spring.sql.init.platform=mysql",
"--halo.external-url=http://localhost:8080"
],
"Healthcheck": {
"Test": [
"CMD",
"curl",
"-f",
"http://localhost:8090/actuator/health/readiness"
],
"Interval": 30000000000,
"Timeout": 5000000000,
"StartPeriod": 30000000000,
"Retries": 5
},
"Image": "halohub/halo-pro:2.21.0",
"Volumes": null,
"WorkingDir": "/application",
"Entrypoint": [
"sh",
"-c",
"java -Dreactor.schedulers.defaultBoundedElasticOnVirtualThreads=true ${JVM_OPTS} org.springframework.boot.loader.launch.JarLauncher ${0} ${@}"
],
"OnBuild": null,
"Labels": {
"com.docker.compose.config-hash": "c1fd626c6b5c0ce52f3aa809b8ca741d5f64428eb235a22c8ffc0e3435cbb6cb",
"com.docker.compose.container-number": "1",
"com.docker.compose.depends_on": "",
"com.docker.compose.image": "sha256:f57c0f467fce8a521de872ba73733a29d1e54453296595123c0ecf6a7c89521a",
"com.docker.compose.oneoff": "False",
"com.docker.compose.project": "halo",
"com.docker.compose.project.config_files": "/opt/1panel/apps/halo/halo/docker-compose.yml",
"com.docker.compose.project.working_dir": "/opt/1panel/apps/halo/halo",
"com.docker.compose.service": "halo",
"com.docker.compose.version": "2.28.1",
"createdBy": "Apps",
"maintainer": "johnniang <johnniang@foxmail.com>",
"org.opencontainers.image.created": "2025-06-15T06:15:22.315Z",
"org.opencontainers.image.description": "",
"org.opencontainers.image.licenses": "GPL-3.0",
"org.opencontainers.image.ref.name": "ubuntu",
"org.opencontainers.image.revision": "681e3c4cda94c0633e58e33a86df708e18b23e66",
"org.opencontainers.image.source": "https://github.com/lxware-dev/halo-pro",
"org.opencontainers.image.title": "halo-pro",
"org.opencontainers.image.url": "https://github.com/lxware-dev/halo-pro",
"org.opencontainers.image.version": "2"
}
},
"NetworkSettings": {
"Bridge": "",
"SandboxID": "bdf3acda8ecc10423da31329b010224163efe6f6adcaaeaa81f80aecf800a98e",
"SandboxKey": "/var/run/docker/netns/bdf3acda8ecc",
"Ports": {
"8090/tcp": [
{
"HostIp": "127.0.0.1",
"HostPort": "8080"
}
]
},
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "",
"Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "",
"IPPrefixLen": 0,
"IPv6Gateway": "",
"MacAddress": "",
"Networks": {
"1panel-network": {
"IPAMConfig": null,
"Links": null,
"Aliases": [
"1Panel-halo-lGUB",
"halo"
],
"MacAddress": "02:42:ac:12:00:03",
"DriverOpts": null,
"NetworkID": "c8f205d78f9abcb210083979f1ca90319d19d4c8886fc3a668563f5ad78b323d",
"EndpointID": "f56a40243b2d6779032f4bf13f417aa5bb384838f978b82f8db4fce38b41fd78",
"Gateway": "172.18.0.1",
"IPAddress": "172.18.0.3",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"DNSNames": [
"1Panel-halo-lGUB",
"halo",
"4c12b8121785"
]
}
}
}
}
]