私有-docker-registry-搭建

简介 这个东西可能并没有你想象中的那么完美, 适合个人使用, 上传后无法删除镜像, 但是有第三方工具帮你删除后面会讲. 如果这几点你都不介意的话, 可以继续往下看了!!! docker 的基础操作我都不会讲, 如果不太了解的话建议去官网学习 必备的程序 docker-ce, docker-compose. 本机搭建 registry 的默认端口为 5000 如果想将 hub.docker.com 上的 alpine 做个镜像. docker pull alpine:latest docker tag alpine:latest localhost:5000/alpine:latest docker push localhost:5000/alpine:latest --- version: "2" services: registry: image: registry:latest restart: always volumes: - registry:/var/lib/registry volumes: registry: 配置前端 registry-frontend 是 registry 的前端, 如果想详细设置可以去 konradkleine/docker-registry-frontend 这里看. 效果图如下: --- version: "2" services: registry: image: registry:latest restart: always volumes: - registry:/var/lib/registry registry-frontend: image: konradkleine/docker-registry-frontend:v2 environment: ENV_DOCKER_REGISTRY_HOST: registry ENV_DOCKER_REGISTRY_PORT: "5000" ENV_MODE_BROWSE_ONLY: "true" depends_on: - registry volumes: registry: 配置域名与认证 我使用的是 caddy 作为我的反向代理服务器, 当然你也可以使用 nginx 等....

八月 19, 2018 · 1 分钟 · Mioto Yaku

Go byte 数组转 string

今天遇到个问题, 如何将 [32]byte 转 string // https://play.golang.org/p/JkK_B5609GN func main() { hs := sha256.Sum256([]byte("hahaha")) fmt.Println(hs) } // ===== // [190 23 140 5 67 235 23 245 243 4 48 33 201 229 252 243 2 133 229 87 164 252 48 156 206 151 255 156 166 24 41 18] ...

三月 11, 2018 · 1 分钟 · Mioto Yaku

Go Slice 原理解析

今天被一道题目恶心到了, 发现不研究这些东西可能真的活不下去了, 狠下心来读了一个多小时的源码, 写下些自己对 Slice 的见解吧. 先说说那个题目. // https://play.golang.org/p/2fA3BylTgtf // 请问 s1 和 s2 的值分别是? func main() { s1 := []int{1, 2, 3} s2 := s1[:0] s2 = append(s2, 4) fmt.Println(s1) fmt.Println(s2) } //========== // [4 2 3] // [4] Slice 定义 先看看 Slice 在 Go 底层的定义 // https://github.com/golang/go/blob/master/src/reflect/value.go#L1806 type sliceHeader struct { Data unsafe.Pointer // Array pointer Len int // slice length Cap int // slice capacity } 原理讲解 第一行 s1 := []int{1, 2, 3} 是将 [1, 2, 3] 的首地址 存入了 Data 中, 设置了 Len 为 3, 设置了 Cap 为 3....

三月 9, 2018 · 3 分钟 · Mioto Yaku

Go HTTP JSONRPC Service

就贴一段代码… package main import ( "bytes" "errors" "io" "log" "net/http" "net/rpc" "net/rpc/jsonrpc" ) type Args struct { A, B int } type Quotient struct { Quo, Rem int } type Arith int func (t *Arith) Multiply(args *Args, reply *int) error { *reply = args.A * args.B return nil } func (t *Arith) Divide(args *Args, quo *Quotient) error { if args.B == 0 { return errors.New("divide by zero") } quo.Quo = args....

三月 6, 2018 · 2 分钟 · Mioto Yaku

基于 Go 的 RESTful API 怎么设计权限控制

其实 RESTful API 实现权限控制的方法很多很多, 比如在每个 Handler 中进行判断, 但是这种写法会导致工作量无限增加, 万一增加了其他的角色还要不停的更改源码, 所以要以尽量优雅的方式来实现这个部分. 比如 Middleware 的方式. ...

二月 22, 2018 · 2 分钟 · Mioto Yaku

openssl 自签证书

最开始主要是想玩玩 Go http 2 Push 的, 但是发现以前那种最简单的自签 Chrome58+ 后就不认了… 查询后才知道 Chrome58+ 后只允许包含SAN(Subject Alternative Name)信息的证书. ...

一月 29, 2018 · 2 分钟 · Mioto Yaku

使用GoBase64标准包遇到的问题

在解析 jwt 中的 Playload 部分的 base64 时遇到了错误. 报错代码 enstr := "eyJBY2NvdW50SWQiOiIxIiwiQ2xpZW50IjoiIiwiRW1haWwiOiJ5YWt1Lm1pb3RvQGdtYWlsLmNvbSIsIk1hc3RlckZsYWciOnRydWUsImV4cCI6MTU0ODc0NTY5OSwidHlwZSI6ImVtcGxveWVlcyJ9" // {"AccountId":"1","Client":"","Email":"yaku.mioto@gmail.com","MasterFlag":true,"exp":1548745699,"type":"employees"} debytes, err := base64.StdEncoding.DecodeString(enstr) if err := nil { // ... // err output: illegal base64 data at input byte xxx } // ... ...

一月 29, 2018 · 1 分钟 · Mioto Yaku

[译] 在Ubuntu 17.10服务器上配置静态IP地址

原文: https://websiteforstudents.com/configuring-static-ips-ubuntu-17-10-servers/ Ubuntu 17.10 的时候网络配置方法完全改变了, 是否听说过 NetPlan?可能并没有吧~, NetPlan 是 Ubuntu 17.10 中引入的一种新的网络配置工具,用于管理网络设置. NetPlan 的配置文件是 YAML 格式的, 所以配置起来也不算麻烦~ NetPlan 取代了以前在 /etc/network/interfaces 以前用来配置Ubuntu网络接口的文件. 现在你必须使用 /etc/netplan/*.yaml 来配置 以下是简短的例子教你使用 NetPlan 来配置 Ubuntu 的静态网络. 新的配置文件目录在 /etc/netplan 文件夹中, 使用名为 01-netcfg.yaml 的文件作为第一的配置文件. 一下是 DHCP 的默认配置. # This file describes the network interfaces available on your system # For more information, see netplan(5). network: version: 2 renderer: networkd ethernets: ens33: dhcp4: yes dhcp6: yes 如果需要应用, 就执行以下命令. sudo netplan apply 配置静态IP # This file describes the network interfaces available on your system # For more information, see netplan(5)....

十二月 5, 2017 · 1 分钟 · Mioto Yaku

使用docker自动部署hexo

使用这种实现自动部署 hexo 必须有台自己的服务器, 如果没有的话我也没办法~~ 原理 我实现的原理其实很简单. 当 source 被提交后, 触发 webhook 然后通过执行 bash script 自动进行编译部署 实现 给 hexo 准备个仓库, 例: github.com/xxxx/hexo-source, 如果你有私有仓库 如 gogs gitlib 等都可以 在 hexo 的根目录创建一个 deploy.sh 的脚本 #/bin/bash set -ev export TZ='Asia/Shanghai' npm install hexo-cli -g npm install hexo g -d 制作 node-caddy 的 docker, 当然也可以使用我已经写好的. yakumioto/node-caddy, 并编写 Caddyfile, 因为我使用的是自己部署的 Gogs 所以引用了 key :80 { gzip git { repo git@git.mioto.me:yakumioto/mioto.me.git branch master key /root/.ssh/id_rsa hook /webhook miotoyaku then bash ....

十一月 26, 2017 · 1 分钟 · Mioto Yaku

Go32位系统计算大于4GB文件sha1遇到的问题

文件大于 4GB 以下方法一定行不通, 32位操作系统 最大的寻址空间就是 4GB package main import ( "crypto/sha1" "fmt" "io/ioutil" "log" ) func main() { bytes, err := ioutil.ReadFile("file.txt") if err != nil { log.Fatal(err) } h := sha1.New() h.Write(bytes) fmt.Printf("% x", h.Sum(nil)) } 以下方法可以算出大于 4GB 文件的 sha1, 但是如果直接表面理解代码, 给人的感觉是无法运行的 io.Copy(h, f) 这里给人的感觉也是一次性读取文件到 h 变量中, “给人一种把 整个文件读取到内存的感觉” package main import ( "crypto/sha1" "fmt" "io" "log" "os" ) func main() { f, err := os.Open("file.txt") if err != nil { log....

十一月 25, 2017 · 1 分钟 · Mioto Yaku