跳到主要内容

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

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

查看所有标签

国内 Docker 配置 atomhub 镜像仓库

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

Docker Hub 镜像被禁,在国内可以使用下面这个镜像源,目前只有一些基础镜像

编辑 Docker 配置文件: 打开或创建 /etc/docker/daemon.json 文件

{
"registry-mirrors": [
"https://atomhub.openatom.cn"
]
}

重启 Docker 服务: 为使配置生效,请执行以下命令:

sudo systemctl daemon-reload
sudo systemctl restart docker

官网地址

https://atomhub.openatom.cn/

试过这个源目前是可以使用的,因为里面有华为,所以相信未来也一定可以继续使用!

Go 的 GOPROXY 和 GONOPROXY 的配置和使用

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

GOPROXY 的使用

GOPROXY 环境变量用于指定 Go 模块代理服务器的 URL。Go 模块代理服务器是一种提供 Go 包及其依赖的中间服务器,可以加速包下载和确保包的可用性。您可以配置多个代理,使用逗号分隔。例如,如果第一个代理返回 404 或 410 错误,Go 工具链将自动尝试列表中的下一个代理。这种机制确保了即使某个代理服务不可用,模块获取操作也可以继续进行。

搭建自己的代理服务:https://zhuanlan.zhihu.com/p/706537626

默认的 GOPROXY 设置

默认情况下,GOPROXY 被设置为 https://proxy.golang.org,direct。这里的 direct 关键字告诉 Go 工具链

如果你的 GOPROXY 环境变量包含了 direct 关键词,并且列出的代理服务器(例如 proxy.golang.org)没有找到你需要的模块(如 github.com/sirupsen/logrus),那么 Go 工具链会尝试直接从模块的源地址,即 GitHub 上的 github.com/sirupsen/logrus 仓库,获取这个模块

配置直连模式

通过设置 GOPROXY=direct,开发者可以让所有的 go get 命令绕过代理,直接从源代码托管站点下载模块。这对于在公司内部网络环境中工作,且需要直接访问内部 Git 服务器(如 GitLab)上的私有模块时特别有用。

模块验证和 GONOSUMDB 配置

为了确保下载的模块未被篡改,Go 提供了模块校验和功能。GONOSUMDB 环境变量允许指定哪些模块不应进行校验和检查。例如,设置 GONOSUMDB=gitlab.mycorp.com 表明所有托管在 gitlab.mycorp.com 上的模块都不需要进行校验和验证。

配置 GOPRIVATE 和 GONOPROXY

GOPRIVATEGONOPROXY 环境变量用于定义不通过公共代理或不进行校验和验证的私有模块的模式。这些设置对于管理企业内部或敏感的私有模块非常有用,确保这些模块的使用不会被公开或误用。

Linux 使用 rsync 传输文件

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

配置 SSH 登录

在本地机器生成 SSH 密钥(如果还没有的话)

ssh-keygen -t rsa

按照提示进行操作

将公钥复制到远程机器: 使用 ssh-copy-id 命令将你的公钥添加到远程服务器的 ~/.ssh/authorized_keys 文件中:

ssh-copy-id username@B_machine_IP

按提示操作,你会看到Number of key(s) added: 1表示添加成功,完成这一步后,你应该可以无需密码通过 SSH 访问远程服务器。

使用 rsync

确认 rsync 安装:确保两台机器都安装了 rsync

执行 rsync 命令

rsync -avzP /path/to/source/folder/ username@B_machine_IP:/path/to/destination/folder/
  • -a 表示归档模式,确保文件的属性和权限被保留。
  • -v 表示详细模式,会显示传输过程的详细信息。
  • -z 表示启用压缩,减少数据传输量。

docker 查看 volume 位置

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

列出所有卷:首先确保卷 logs 已被正确创建。

docker volume ls

检查卷的详情:使用以下命令来查看 logs 卷的详细信息,包括它的实际存储路径。

docker volume inspect logs 卷名

这个命令将返回一个包含卷详细信息的 JSON 数组。其中的 "Mountpoint" 键值对应的值就是卷在宿主机上的存储路径。例如:

[
{
"CreatedAt": "2024-06-20T13:47:04+08:00",
"Driver": "local",
"Labels": {
"com.docker.compose.project": "mysql-redis",
"com.docker.compose.version": "2.27.1",
"com.docker.compose.volume": "mysql"
},
"Mountpoint": "/var/lib/docker/volumes/mysql-redis_mysql/_data",
"Name": "mysql-redis_mysql",
"Options": null,
"Scope": "local"
}
]

在这个示例中,logs 卷的存储路径是 /var/lib/docker/volumes/mysql-redis_mysql/_data。您可以通过访问这个路径来查看和管理存储在卷中的日志文件。

Docker 提示Too many requests You have reached your pull rate limit

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

Docker Hub 为了管理资源消耗,对镜像的拉取次数设有限制。对于未认证的用户,这一限制较低,而对于已认证的用户,限制相对较高。一旦超出这个限制,就会收到 HTTP 状态码 429(Too Many Requests)

Docker Hub 登录

最简单的方法是登录到您的 Docker Hub 账户。通过执行下面的命令来登录

docker login

登录后,Docker Hub 将提高您的 API 调用频率限制,已认证的用户每 6 小时 200 个拉取请求

其他方法

升级 Docker Hub 账户

如果您是高频用户,建议考虑升级到 Docker Hub 的付费账户。付费账户提供更高的数据拉取限额,满足更频繁的开发需求。

使用其他镜像仓库

考虑使用其他公共镜像仓库,如 Google Container Registry (GCR)、Amazon Elastic Container Registry (ECR),或者建立您自己的私有镜像仓库。这些选择可以分散对 Docker Hub 的依赖,减少受限的风险。

本地缓存常用镜像

尽量缓存您经常使用的镜像。当您的 CI/CD 流程或开发环境需要使用这些镜像时,直接从本地缓存拉取,减少对 Docker Hub 的请求。

Linux 安装 MinIO

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

官网地址

https://min.io/download?license=agpl&platform=docker## Docker 安装

创建一个 docker-compose.yml

services:
minio:
image: quay.io/minio/minio
container_name: minio
ports:
- "9000:9000"
- "9001:9001" # MinIO的管理界面(Console)端口
volumes:
- minio_data:/data
- minio_config:/root/.minio
environment:
MINIO_ROOT_USER: admin # 设置MinIO的用户名
MINIO_ROOT_PASSWORD: admin123456 # 设置MinIO的密码
MINIO_REGION: "cn-north-1"
MINIO_BROWSER: "on" # 是否开启浏览器访问
command: server /data --console-address ":9001"
healthcheck:
test:
[
"CMD",
"curl",
"-f",
"http://localhost:9000/minio/health/live"
]
interval: 30s
timeout: 20s
retries: 3
networks:
- minio_network
volumes:
minio_data:
minio_config:
networks:
minio_network:
driver: bridge

监控单机Docker容器使用cAdvisorPrometheus和Grafana

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

docker-compose.yml

services:
prometheus:
image: prom/prometheus:v2.53.0
container_name: prometheus
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
ports:
- "59090:9090"
networks:
- monitor-net
restart: unless-stopped
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--web.enable-lifecycle'
depends_on:
- cadvisor
logging:
driver: json-file
options:
max-size: "200m"
max-file: "10"
grafana:
image: grafana/grafana:10.4.4
container_name: grafana
volumes:
- grafana_data:/var/lib/grafana
- ./grafana.ini:/etc/grafana/grafana.ini # Grafana 配置文件
environment:
GF_SECURITY_ADMIN_PASSWORD: admin123456 # 管理员密码
GF_USERS_ALLOW_SIGN_UP: "false" # 禁止用户自行注册
ports:
- "53000:3000"
networks:
- monitor-net
restart: unless-stopped
depends_on:
- prometheus
logging:
driver: json-file
options:
max-size: "200m"
max-file: "10"
cadvisor:
image: gcr.io/cadvisor/cadvisor
container_name: cadvisor
volumes:
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
ports:
- "58080:8080"
networks:
- monitor-net
restart: unless-stopped
logging:
driver: json-file
options:
max-size: "100m"
max-file: "5"
volumes:
prometheus_data:
driver: local
grafana_data:
driver: local
networks:
monitor-net:
driver: bridge

prometheus.yml

scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['prometheus:9090'] # 使用 Docker Compose 服务名和内部端口
- job_name: 'cadvisor'
scrape_interval: 5s
static_configs:
- targets: ['cadvisor:8080'] # 使用 Docker Compose 服务名和内部端口

grafana 配置

添加数据源:prometheus

设置 prometheus 的 Connection 为 http://prometheus:9090 保存

面板使用

a99b4cb38396d462a5825c43f5c55e8d

Docker 镜像优化策略

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

1. 选择小型基础镜像

选择 Alpine Linux 等小型基础镜像,因其体积小巧,有助于减少最终镜像的大小。

2. 最小化层的数量

通过合并多个 RUN 指令,减少镜像层数,例如将更新、安装和清理步骤合并到一个 RUN 中执行。

RUN apt-get update && \
apt-get install -y package1 package2 && \
rm -rf /var/lib/apt/lists/*

3. 清理不必要的文件

在安装软件包后,清理缓存和临时文件,移除不必要的包,以减少镜像的体积,配合多阶段构建。

4. 使用多阶段构建

通过多阶段构建,只在最终镜像中包含运行应用所必需的文件和依赖,从而减少镜像大小。

# Build stage
FROM golang:1.16 as builder
WORKDIR /app
COPY . .
RUN go build -o myapp .

# Final stage
FROM alpine:latest
COPY --from=builder /app/myapp /myapp
ENTRYPOINT ["./myapp"]

5. 使用.dockerignore 文件

利用 .dockerignore 文件排除不必要的文件和目录,防止它们被添加到镜像中。

6. 优化指令顺序

通过优化 Dockerfile 中指令的顺序,使得不经常变更的指令尽量放在前面,以利用 Docker 的构建缓存。

7. 精简健康检查指令

确保健康检查(HEALTHCHECK)指令尽可能轻量,不增加额外的负担。

8. 选择性拷贝文件

在使用 COPY 指令时,只拷贝必需的文件,避免引入不必要的数据。

9. 有效利用构建缓存

合理安排 Dockerfile 中的指令,以最大限度地复用构建缓存,减少不必要的重建过程。

10. 审查软件包安装

定期审查和更新 Dockerfile,移除不再需要的依赖,保持镜像的轻量级。

11. 压缩应用程序文件

对静态资源进行压缩处理,如使用 Gzip 压缩,以减小文件占用的空间。

12. 使用非 root 用户

指定非 root 用户运行容器,减少对安全特性的依赖,可能带来的额外文件或库。

通过实施以上策略,可以有效控制 Docker 镜像的大小,提升容器的启动速度和运行效率,降低资源消耗,优化容器的整体性能。