跳到主要内容

115 篇博文 含有标签「开发工具与环境」

开发工具和环境配置相关文章

查看所有标签

curl 参数和使用

· 阅读需 2 分钟
素明诚
Full stack development

基本参数介绍

注意curl 命令中的参数是区分大小写的

参数描述
-A 或 --user-agent在请求中设置 User-Agent。
-b 或 --cookie传递 cookie 到服务器或从文件中读取 cookie 数据。
-c 或 --cookie-jar把服务器发送的所有 cookies 写入这个文件。
-d 或 --data发送 POST 请求的数据。
-e 或 --referer在请求中包含一个 'referer' 头,用来模拟用户从指定的链接访问。
-F 或 --form模拟提交表单。
-H 或 --header添加自定义头部到请求中。
-i 或 --include输出时包括协议头信息。
-I 或 --head只获取文档的 HTTP 头部。
-k 或 --insecure允许 curl 执行“不安全”的 SSL 连接和传输。
-L 或 --location跟随重定向。
-o 或 --output将输出保存到文件而不是打印到标准输出。
-O 或 --remote-name使用 URL 的最后一部分作为文件名保存下载的文件。
-s 或 --silent静默模式。不输出任何东西。
-T 或 --upload-file上传文件。
-u 或 --user使用指定的用户和密码进行认证。
-v 或 --verbose让 curl 提供更多信息,用于调试。
-X 或 --request指定请求的命令(如 GET、POST)。
-# 或 --progress-bar使用进度条显示文件传输进度。

获取网页内容并保存到文件

curl -o google.html http://www.google.com

这里使用 -o 参数将 www.google.com 的首页内容保存到 google.html 文件中。

发送 POST 请求

curl -d "username=example&password=secret" http://www.google.com/login

使用 -d 参数提供表单数据,向 www.google.com/login 发送 POST 请求。

添加请求头

curl -H "Content-Type: application/json" -H "Authorization: Bearer TOKEN" http://www.google.com/api

使用 -H 添加自定义请求头,这里添加了 Content-TypeAuthorization 两个头部信息。

使用 HTTPS 并忽略证书验证

curl -k https://localhost/api

使用 -k 参数忽略 SSL 证书验证,适用于开发环境或自签名证书的情况。

wget 基本用法

· 阅读需 2 分钟
素明诚
Full stack development

wget 命令中的参数也是区分大小写的。这是大多数 UNIX 和 Linux 命令行工具的通用特性

wget 参数列表

参数描述
-O 或 --output-document指定下载文件的存储名字。
-c 或 --continue断点续传,继续未完成的下载。
-r 或 --recursive递归下载,例如下载整个网站。
-l 或 --level限定递归下载的深度。
--no-parent递归下载时,不下载父目录中的链接。
-i 或 --input-file从文件中读取 URL 列表进行批量下载。
--limit-rate限制下载速度,例如 --limit-rate=100k 限制速度为每秒 100KB。
--no-clobber避免下载重复的文件,即如果文件已存在则不会再次下载。
--http-user 和 --http-password用于网站需要认证的下载。
-q 或 --quiet安静模式,不输出任何东西。
--show-progress显示下载进度条。
--header向请求中添加 HTTP 头部,如 --header "Cookie: name=value"。

基本下载

下载单个文件,并保存为原始名称

wget http://example.com/somefile.txt

下载并重命名文件

下载文件并以不同的名称保存

wget -O myfile.txt http://example.com/somefile.txt

递归下载网站

下载整个网站,限制目录深度为 3

wget -r -l 3 http://example.com

断点续传

如果下载中断,可以使用断点续传继续下载

wget -c http://example.com/bigfile.zip

限制下载速度

下载文件时限制带宽

wget --limit-rate=200k http://example.com/bigfile.zip

配置 Git 走本地代理

· 阅读需 1 分钟
素明诚
Full stack development

配置 Git 使用 SOCKS5 代理

如果您的软件代理是 SOCKS5 代理,可以通过以下命令配置 Git 使用 SOCKS5 代理(假设代理地址是127.0.0.1,端口是7890

git config --global http.proxy 'socks5://127.0.0.1:7890'
git config --global https.proxy 'socks5://127.0.0.1:7890'

配置 Git 使用 HTTP 代理

如果您使用的是 HTTP 代理,配置方法类似(假设代理地址是127.0.0.1,端口是7890

git config --global http.proxy 'http://127.0.0.1:7890'
git config --global https.proxy 'http://127.0.0.1:7890'

验证配置

配置完成后,您可以通过查看 Git 配置来验证代理设置是否成功

git config --global --get http.proxy
git config --global --get https.proxy

取消代理配置

如果您想取消 Git 的代理配置,可以使用以下命令

git config --global --unset http.proxy
git config --global --unset https.proxy

配置后 clone 项目会更快一些

72dfc04f3d66b3140b841d5d22f33670

docker-compose 配置卷示例

· 阅读需 2 分钟
素明诚
Full stack development

示例

version: '3.8'

services:
mysql:
image: mysql:8.0.36
container_name: tcm-mysql
environment:
MYSQL_ROOT_PASSWORD: 123114
MYSQL_DATABASE: tcm_department_syndrome # 设置数据库名称
ports:
- "3306:3306"
volumes:
- my_db:/var/lib/mysql
restart: always

redis:
image: redis:6.2.6
container_name: tcm-redis
ports:
- "6379:6379"
volumes:
- my_redis:/data
restart: always

volumes:
my_db:
my_redis:

卷驱动(Volume Driver)

本地驱动local 表示使用 Docker 自带的本地卷驱动来管理卷。这是最常见的卷驱动,用于在宿主机的文件系统上创建和管理卷。

其他驱动选项:Docker 还支持其他类型的卷驱动,例如 azuregcpaws 等,这些驱动允许你将数据存储在远程的云存储服务上。

命名卷位置

在 Docker 中,命名卷 my_dbmy_redis 用于数据持久化,确保数据不会因为容器的删除而丢失。命名卷通常存储在 Docker 的默认卷存储位置,这个位置依赖于 Docker 在宿主机上的安装配置。

对于 Linux 系统

Docker 通常将卷数据存储在 /var/lib/docker/volumes/ 目录下。你可以在该目录下找到以卷名命名的子目录,例如:

  • /var/lib/docker/volumes/my_db/_data 用于 mysql 服务的数据。
  • /var/lib/docker/volumes/my_redis/_data 用于 redis 服务的数据。

查看卷的实际位置

使用 Docker 命令来查找每个卷的确切存储位置

docker volume inspect my_db
docker volume inspect my_redis

fd4f966765ca36274af8a8435f7ec47a

git 操作远程分支

· 阅读需 1 分钟
素明诚
Full stack development
# 列出所有远程仓库的简短名称
git remote

# 显示所有远程仓库的详细信息,包括URL
git remote -v

# 添加一个新的远程仓库,并命名
git remote add origin https://github.com/user/repo.git

# 删除一个远程仓库
git remote remove origin

# 从远程仓库下载新分支与数据
git fetch origin

# 从远程仓库拉取数据并自动合并到当前分支
git pull origin master

# 将本地分支的更新推送到远程仓库
git push origin master

# 显示某个远程仓库的详细信息
git remote show origin

# 删除远程仓库的分支
git push origin --delete feature

Docker 配置代理

· 阅读需 2 分钟
素明诚
Full stack development

创建 systemd 服务覆盖文件

为了避免直接修改原始的 systemd 服务文件

  1. 打开终端。
  2. 运行以下命令来为 docker.service 创建或编辑一个覆盖文件
sudo systemctl edit docker.service

这个命令会打开一个文本编辑器,允许你为 Docker 服务添加或修改配置。

添加环境变量

在打开的编辑器中,添加以下内容以设置环境变量,使用您的代理服务器地址和端口替换 127.0.0.1:7890

[Service]
Environment="HTTP_PROXY=socks5://127.0.0.1:7890"
Environment="HTTPS_PROXY=socks5://127.0.0.1:7890"

保存并关闭编辑器。systemd 会自动保存这些更改到 /etc/systemd/system/docker.service.d/override.conf 文件,这是一个专门为覆盖原始服务配置的文件。

重新加载 systemd 配置

修改 systemd 配置后,需要重新加载配置,使更改生效

sudo systemctl daemon-reload

这一步确保 systemd 读取了最新的服务配置。

重启 Docker 服务

最后,重启 Docker 服务以应用新的代理设置

sudo systemctl restart docker

验证代理设置是否生效

完成上述步骤后,可以检查 Docker 服务的环境变量是否正确设置。使用以下命令查看服务的当前状态和环境变量

systemctl status docker.service

在输出中,应当能看到设置的环境变量 HTTP_PROXYHTTPS_PROXY

npm 设置源 淘宝阿里腾讯华为网易中科清华

· 阅读需 2 分钟
素明诚
Full stack development

永久更改源

设置淘宝源

npm config set registry https://registry.npmmirror.com

设置阿里云源

npm config set registry https://npm.aliyun.com

设置腾讯云源

npm config set registry https://mirrors.cloud.tencent.com/npm/

设置华为云源

npm config set registry https://mirrors.huaweicloud.com/repository/npm/

设置网易源

npm config set registry https://mirrors.163.com/npm/

设置中科院大学开源镜像站

npm config set registry https://mirrors.ustc.edu.cn/npm/

设置清华大学开源镜像站

npm config set registry https://mirrors.tuna.tsinghua.edu.cn/npm/

恢复使用官方 npm 源

npm config set registry https://registry.npmjs.org

查看当前使用的源

要查看您当前使用的是哪个源,可以运行

npm config get registry

这将显示当前配置的源 URL。

使用.npmrc 文件配置源

您也可以在项目的根目录或您的用户目录中创建或修改 .npmrc 文件,直接添加或修改源设置

registry=https://registry.npmmirror.com

这种方法适合在项目级别设置源,不影响全局配置。

使用 nrm 管理源

nrm 是一个 npm 源管理器,可以帮助您快速切换不同的源。首先,您需要安装 nrm

npm install -g nrm

然后,您可以使用 nrm 来切换源

列出所有可用的源

nrm ls

切换到淘宝源

nrm use taobao

切换回官方源

nrm use npm

Docker Compose 命令详解

· 阅读需 4 分钟
素明诚
Full stack development

docker-compose up

此命令用于创建、重建、启动和连接容器。在前台运行时,会显示所有服务的启动日志。

Creating network "myapp_default" with the default driver
Creating volume "myapp_dbdata" with default driver
Creating myapp_web_1 ... done
Creating myapp_db_1 ... done
Attaching to myapp_web_1, myapp_db_1

docker-compose down

默认情况下,docker-compose down 不会 删除由 docker-compose.yml 文件中定义的卷(即那些通过 volumes: 部分指定的卷)。这些卷会保留以便将来重用,除非您手动删除它们。

Stopping myapp_web_1 ... done
Stopping myapp_db_1 ... done
Removing myapp_web_1 ... done
Removing myapp_db_1 ... done
Removing network myapp_default

docker-compose build

如果有 build 的配置会重新构建服务。

db uses an image, skipping
Building web
Step 1/3 : FROM node:10
---> 123abc
Step 2/3 : ADD . /code
---> Using cache
---> 456def
Step 3/3 : RUN npm install
---> Running in 789ghi

docker-compose ps

显示与配置中定义的服务相关的容器。

     Name                   Command              State           Ports
---------------------------------------------------------------------------------
myapp_web_1 nginx -g daemon off; Up 0.0.0.0:80->80/tcp,:::80->80/tcp
myapp_db_1 docker-entrypoint.sh postgres Up 5432/tcp

docker-compose start

启动一个或多个已停止的容器。

Starting db_1 ... done
Starting web_1 ... done

docker-compose stop

停止正在运行的容器。

Stopping myapp_web_1 ... done
Stopping myapp_db_1 ... done

docker-compose restart

重启服务。

Restarting myapp_web_1 ... done
Restarting myapp_db_1 ... done

docker-compose logs

查看服务的日志输出。

Attaching to myapp_web_1, myapp_db_1
web_1 | Example app listening at http://localhost:3000
db_1 | 2021-01-01 12:00:00.000 UTC [1] LOG: database system is ready to accept connections

docker-compose pull

拉取服务依赖的镜像。

Pulling db (postgres:latest)...
latest: Pulling from library/postgres
Digest: sha256:abc123
Status: Downloaded newer image for postgres:latest

docker-compose push

将服务中涉及的镜像推送到 Docker Hub 或其他镜像仓库。

Pushing api (myregistry.com/myapp/api)...
The push refers to repository [docker.io/myapp/api]
5f70bf18a086: Pushed

docker-compose exec

如果您的 docker-compose.yml 定义中某个服务配置为多个容器实例,执行 docker-compose exec 命令将默认选择由该服务创建的第一个容器。如果需要在特定的容器上执行命令,通常需要通过 Docker 的底层命令来处理

$ docker-compose exec db psql -U postgres

psql (12.2)
Type "help" for help.

postgres=#

docker-compose run

使用一个服务以一次性模式执行命令。

$ docker-compose run web env

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=8b1b53f6cfa9

docker-compose rm

删除所有(停止状态的)服务容器。

Going to remove myapp_web_1, myapp_db_1
Are you sure? [yN] y
Removing myapp_web_1 ... done
Removing myapp_db_1 ... done

docker-compose config

验证并查看配置。

services:
db:
image: postgres
restart: always
web:
build: .
ports:
- "5000:5000"
version: '3.0'

docker-compose kill

kill 不会删除容器,也不会删除容器的网络配置或者挂载的卷。这意味着您可以使用 docker-compose start 命令再次启动这些容器,而其环境配置和数据将保持不变。这使得 kill 命令非常适用于需要快速停止服务而不希望丢失任何数据的场景

Killing myapp_web_1 ... done
Killing myapp_db_1 ... done

docker-compose pause

对容器使用 pause 命令时,Docker 会使用 Linux 内核的 cgroups 功能来暂停容器中所有的进程。这意味着这些进程会立即停止执行,所有的 CPU 操作将会被冻结,但是容器的内存状态保持不变。容器中的进程就像是被“冻结”在某个特定的时刻。

这个功能特别适用于需要临时释放系统资源(如 CPU 使用率)但又不想结束或重启容器的情况。例如,如果您运行的某个服务暂时不需要处理任务,但您希望保留其当前的状态,可以暂停该服务,之后再恢复其运行,恢复时容器会从暂停时的状态继续运行。

砸瓦鲁多~

Pausing myapp_web_1 ... done
Pausing myapp_db_1 ... done

docker-compose unpause

恢复服务中已暂停的容器。

Unpausing myapp_web_1 ... done
Unpausing myapp_db_1 ... done

docker-compose port

打印绑定的公开端口。

$ docker-compose port web 5000
0.0.0.0:49153

docker-compose top

显示运行的容器中的进程。

myapp_web_1
UID PID PPID C STIME TTY TIME CMD
root 2618 2595 0 10:00 ? 00:00:02 nginx: master process nginx -g daemon off;

使用自定义配置文件

如果您有一个不是标准命名(即非 docker-compose.yml)的配置文件,比如叫 custom-compose.yaml,您可以这样运行 docker-compose 命令:

docker-compose -f custom-compose.yaml up

整理不易,求关注

docker-compose 配置字段详解

· 阅读需 2 分钟
素明诚
Full stack development

version

指定 docker-compose 文件使用的版本,这会决定你可以使用的配置选项和行为。

version: '3.8'

services

定义应用中的服务,每个服务都会成为一个容器。这是 docker-compose.yml 文件的核心部分。

services:
web:
image: nginx:latest
ports:
- "80:80"
db:
image: postgres:latest
environment:
POSTGRES_DB: example

build

构建镜像的配置。可以指定 Dockerfile 的位置和构建上下文路径。不建议在这里做构建,建议在外面使用 Dockerfile 实现

services:
app:
build:
context: .
dockerfile: Dockerfile
args:
ARG1: value1

image

指定服务使用的镜像名称和标签。

services:
redis:
image: "redis:alpine"

ports

映射端口。格式为 [宿主机端口]:[容器端口]

services:
web:
ports:
- "4000:80"

volumes

挂载卷,用于数据持久化和共享数据。

services:
db:
volumes:
- "dbdata:/var/lib/postgresql/data"
volumes:
dbdata:

environment

设置环境变量,可以用来配置容器内应用。

services:
web:
environment:
- DEBUG=1

depends_on

指定服务启动的依赖关系,确保服务按照特定的顺序启动。

services:
web:
depends_on:
- db

networks

定义网络,用于连接各个服务。服务只能通过网络互相访问。

services:
web:
networks:
- frontend
db:
networks:
- backend
networks:
frontend:
backend:

command

覆盖容器启动后默认执行的命令。

services:
myservice:
command: ["python", "app.py"]

使用 links 可以使得一个服务容器能够安全地访问另一个服务的容器,通过其服务名作为主机名。links 也可以为链接的服务提供别名,使得在源容器内部可以通过别名来访问目标容器。

services:
web:
links:
- db:database

restart

配置服务的重启策略。

services:
web:
restart: always

healthcheck

定义健康检查,用于确定服务的健康状态。

services:
web:
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 1m30s
timeout: 10s
retries: 3
start_period: 40s

logging

配置日志记录选项。

services:
web:
logging:
driver: syslog
options:
syslog-address: "tcp://192.168.0.42:123"

这些是 docker-compose.yml 文件中最常见的配置项,通过这些配置,用户可以详终定义和管理容器化应用的行为。每个选项都提供了控制和调整容器运行环境的灵活性,使得 docker-compose 成为管理容器应用的强大工具。

Docker 的 Layer 是什么详解

· 阅读需 3 分钟
素明诚
Full stack development

Docker 镜像由多个层组成,每个层代表镜像构建过程中的一个步骤。当执行 Dockerfile 中的指令(如 FROM, RUN, COPY 等)时,每条指令基本上都会创建一个新的层。这些层按顺序叠加,每一层都是前一层的基础上进行的更改。

例如,我们在构建镜像的时候

  1. FROM ubuntu:20.04 创建了一个基础层,包括 Ubuntu 20.04 的所有文件。
  2. RUN apt-get update && apt-get install -y nginx 添加了一个新层,包含了安装 Nginx 后的变化。
  3. COPY . /app 又添加了一层,将应用代码复制到镜像中。

层的好处

重用和缓存

使用层可以提高资源的重用。如果多个镜像基于同一个基础镜像,它们都可以重用这个基础镜像的层,节省存储空间,并加快镜像的下载和部署速度。Docker 会缓存每一层,当重新构建镜像时,如果某一层之前已被构建并且指令没有变化,Docker 会重用这个缓存层。

效率和速度

分层也允许更快的迭代开发。因为每次只需要重新构建那些发生变化的层。这使得构建、测试和推送更改到生产变得更快。

减少风险

每一层的独立性有助于安全性,因为可以精确控制和审查每一层的内容,从而降低引入不安全或不稳定代码的风险。

层的存储机制

在技术上,Docker 使用联合文件系统(Union File System)来组合多个层,使它们看起来如同一个单一的文件系统。这意味着虽然物理上层与层之间是分开存储的,但在逻辑上用户会看到一个整合后的文件系统。

层的存储大小和共享

层是以增量方式存储的。例如,如果第一层占用 1MB,第二层相对于第一层又增加了 1MB 的内容,那么这两层的总大小就是 2MB。如果第二层是修改第一层中的内容,则这部分空间不会简单相加,而是取决于修改后的文件大小。

多个镜像可以共享相同的底层层。如果你有多个镜像都基于同一个操作系统镜像(例如 ubuntu:20.04),那么这个操作系统层只需要在物理存储上保存一次,而所有基于它的镜像都可以使用这同一层。