Walk in Starlight
  • 首页
  • 分类
    • 默认分类
    • 混口饭吃
    • 都学杂了
    • 简单生活
  • 归档
  • 关于
  • 登录
    • 登录

搭建Docker私有仓库Registry-v2

 December 23, 2015      混口饭吃      访问: 5,702 次      评论     sealinger

环境说明:Centos 7.1 64Bit + Docker 1.9.1,仓库的存储以使用本地磁盘为例。

一、安装配置registry server v2

官方部署指南:Deploying a registry server 

由于v1版本的registry要被官方废弃了,所以我们选择安装v2版本。(注:v2版本需要TLS加密连接)

1、Get a certificate(为域名TLS访问配置证书)

创建一个 certs 目录:

$ mkdir -p certs

然后将仓库域名在权威机构申请的证书 crt 文件放入并命名为certs/domain.crt,将 key 文件放入并命名为  certs/domain.key。

如果使用私有证书,可以这么创建:

$ mkdir -p certs && openssl req \
   -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key \
   -x509 -days 365 -out certs/domain.crt

为了让 docker 客户端信任私有证书,需要将证书文件放入使用该仓库的所有 docker 客户端的服务器上:

以仓库所在的 docker 本机为例:

$ sudo mkdir /etc/docker/certs.d/docker-hub.yourdomain.com:5000/ -p
$ sudo cp certs/domain.crt /etc/docker/certs.d/docker-hub.yourdomain.com\:5000/ca.crt

 

2、Native basic auth(配置登陆认证,本例使用 htpasswd 方式)

使用 htpasswd 命令生成密码文件前,需要先安装 httpd-tools 。另外 htpasswd 授权必须配合TLS一同使用,并且只支持 bcrypt 格式的密码。

创建 htpasswd 密码文件,并添加一个用户user1

$ mkdir auth
$ htpasswd -cB auth/htpasswd user1

再添加一个用户user2

$ htpasswd -B htpasswd user2

 

3、启动 registry 容器(本例网络使用 host 模式)
$ docker pull registry:2
$ docker run -d --net=host --restart=always --name registry \
   -v `pwd`/data:/var/lib/registry \     (注:仓库的数据目录)
   -v `pwd`/auth:/auth \
   -e "REGISTRY_AUTH=htpasswd" \
   -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
   -v `pwd`/certs:/certs \
   -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
   -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
   registry:2

 

4、启动成功,测试一下
$ docker pull ubuntu
$ docker tag ubuntu docker-hub.yourdomain.com:5000/ubuntu:latest
$ docker login -u user1 -p yourpasswd -e "your@email-address.com" docker-hub.yourdomain.com:5000
$ docker push docker-hub.yourdomain.com:5000/ubuntu:latest
$ docker pull docker-hub.yourdomain.com:5000/ubuntu:latest

- 阅读剩余部分 -

Pipework配置Docker容器macvlan网络

 December 13, 2015      混口饭吃      访问: 7,579 次      2 条评论     sealinger

一、macvlan 介绍(some-notes-on-macvlanmacvtap)

一般来说,我们在自定义Docker与外部网络通信的网络,除了NAT,还有Linux Bridge、Open vSwitch、MacVLAN几种选择。MacVLAN相对于前两者,拥有更好的性能。

macvlan可以看做是物理网卡的子接口,每个macvlan子接口有其自己的MAC地址(跟物理网卡的也不同),而且可以为每个macvlan子接口设置IP地址。

即在同一个物理网卡上设置多个不同的IP+MAC地址的子接口,我们称macvlan子接口所依附的物理网卡为lower device。

MacVLAN有4种模式,参考这里。 VEPA需要接入交换机支持hairpin mode。相对而言,Bridge mode更加常用。

 

macvlan可以工作在四种模式下:

  • VEPA(Virtual Ethernet Port Aggregator)mode:default 模式,If the lower device receives data from a macvlan in VEPA mode, this data is always sent "out" to the upstream switch or bridge, even if it's destined for another macvlan in the same lower device.

  • Brideg mode:this works almost like a traditional bridge, in that data received on a macvlan in bridge mode and destined for another macvlan of the same lower device is sent directly to the target (if the target macvlan is also in bridge mode), rather than being sent outside.

  • Private mode:this is essentially like VEPA mode, but with the added feature that no macvlans on the same lower device can communicate, regardless of where the packets come from (so even if inter-VM traffic is sent back by a hairpin switch or an IP router, the target macvlan is prevented from receiving it).

  • Passthru mode:this mode was added later, to work around some limitation of macvlans (more details  here ).

MACVLAN工作方式补充:

有时我们可能需要一块物理网卡绑定多个 IP 以及多个 MAC 地址,虽然绑定多个 IP 很容易,但是这些 IP 会共享物理网卡的 MAC 地址,可能无法满足我们的设计需求,所以有了 MACVLAN 设备,其工作方式如下:

MACVLAN 会根据收到包的目的 MAC 地址判断这个包需要交给哪个虚拟网卡。单独使用 MACVLAN 好像毫无意义,但是配合容器的 network namespace 使用,我们可以构建这样的网络:

由于 macvlan 与 eth0 处于不同的 namespace,拥有不同的 network stack,这样使用可以不需要建立 bridge 在 virtual namespace 里面使用网络。

- 阅读剩余部分 -

CentOS 7安装Docker简易指南

 December 4, 2015      混口饭吃      访问: 2,793 次      评论     sealinger

0、Centos 7 安装

最小安装 + 基本开发包(Minimal Install + Development Tools) 即可。

1、升级内核
1)升级内核
# wget http://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-ml-4.2.5-1.el7.elrepo.x86_64.rpm
# rpm -ivh kernel-ml-4.2.5-1.el7.elrepo.x86_64.rpm
2)grub2启动项配置

查看启动项

# cat /boot/grub2/grub.cfg |grep menuentry
 
menuentry 'CentOS Linux (4.2.5-1.el7.elrepo.x86_64) 7 (Core)' --class centos ...
menuentry 'CentOS Linux (3.10.0-229.20.1.el7.x86_64) 7 (Core)' --class centos ...

# cat /boot/grub2/grubenv     //这里记录了默认启动项
# GRUB Environment Block
saved_entry=CentOS Linux (3.10.0-229.20.1.el7.x86_64) 7 (Core)

 

修改默认启动内核为4.2.5:

# grub2-set-default 'CentOS Linux (4.2.5-1.el7.elrepo.x86_64) 7 (Core)'
 
# grub2-editenv list
saved_entry=CentOS Linux (4.2.5-1.el7.elrepo.x86_64) 7 (Core)


3)开启 User namespaces

# grubby --args="user_namespace.enable=1" --update-kernel=/boot/vmlinuz-4.2.5-1.el7.elrepo.x86_64
 
检查一下,应该已经在 boot command line 上加上启动参数了:
# grep user_namespace /boot/grub2/grub.cfg
 
# reboot


2、关闭SELinux
# vi /etc/selinux/config 
SELINUX=disabled

# reboot


3、关闭firewalld(以免和docker创建iptables规则冲突)

改用传统的iptables-service 来管理iptables规则

# systemctl stop firewalld
# systemctl disable firewalld

# yum install iptables-services
# systemctl disable iptables.service  //不需要启用这个服务,docker会自动启动iptables


4、安装docker
# wget -qO- https://get.docker.com/ | sh

 

5、配置和启动Docker
1)配置docker服务开机自动启动:
# systemctl list-unit-files |grep [d]ocker
# systemctl enable docker.service
2)配置docker启动参数:

官网的建议方法如下:(好处是不用修改docker的systemd配置文件,这样在docker升级后不用重新修改该文件)

# mkdir /etc/systemd/system/docker.service.d/

# vi /etc/systemd/system/docker.service.d/docker.conf   (注意这个文件名,不能是 docker 或者 docker.service )

[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd:// --storage-driver=overlay
(这段启动命令从 /usr/lib/systemd/system/docker.service 拷贝而来,再加入我们需要的启动参数即可)


# systemctl daemon-reload 

# systemctl start docker


老方法(不建议了):

*************************************************************************************************

# vi /usr/lib/systemd/system/docker.service 
 
[Service]
EnvironmentFile=-/etc/sysconfig/docker  (加入这一行)
Type=notify
ExecStart=/usr/bin/docker daemon -H fd:// $OPTIONS  (加入$OPTIONS)
 
# vi /etc/sysconfig/docker 

OPTIONS="--storage-driver=overlay"
 
# systemctl daemon-reload
 
# systemctl start docker

*************************************************************************************************

6、常用命令做成脚本(方便我们查看容器的PID和IP)
# vi /usr/local/bin/docker-pid 
 
#!/bin/sh
exec docker inspect --format '{{ .State.Pid }}' "$@"
 
--
 
# vi /usr/local/bin/docker-ip
 
 
#!/bin/sh
exec docker inspect --format '{{ .NetworkSettings.IPAddress }}' "$@"
 
# chmod 755 /usr/local/bin/docker-*
7、启动第一个容器试试(hello-world)
# docker run hello-world


附:官方提供了内核环境的检查脚本 docker/contrib/check-config.sh ( wget raw_file )

Win7开机后svchost.exe占用内存和CPU过高

 September 16, 2015      都学杂了      访问: 11,092 次      评论     sealinger

如题,Win7系统开机后,系统响应缓慢,检查任务管理器发现某个 svchost.exe 进程占用内存和CPU过高,严重的还会经常导致打开的某些程序失去响应。

svchost.exe 是用来启动系统服务的,所以某个 svchost.exe 占用内存过大,可能就是它启动的那个服务占用内存过大,所以只要停止并禁用那个服务就行了。

搜索寻找解决方案,百度经验上的文章提示一般来说占用内存最大的服务是 Superfetch 。关闭 Superfetch 服务(修改启动方式为“手动”)即可解决问题,看了下我电脑该服务已经是关闭(手动启动)了的。

无奈继续研究,终于发现,元凶是 Windows Update(Windows自动更新服务),当它检查可用的系统更新时,承载它的 svchost.exe 进程的资源占用率快速飙升(内存占用率从24M飙升至1G),把它关闭,再重新启动系统就好了!

解决办法为:

【开始菜单】 --》【控制面板】 --》【系统和安全】 --》【Windows Update】 下面的“启用或禁用自动更新”,将更新方式修改为“从不检查更新”:

- 阅读剩余部分 -

关于 Out of Socket memory 的解释

 August 28, 2015      混口饭吃      访问: 4,136 次      评论     sealinger

主要是想跟大家分享一下对 Linux 内核报 Out of Socket memory 错误的相关研究,涉及几个内核参数的讲解:

  • cat /proc/net/sockstat

  • net.ipv4.tcp_mem = 4631232   6174976    9262464

  • net.ipv4.tcp_max_orphans = 262144

  • net.ipv4.tcp_orphan_retries = 0

------- 正文开始:------------------

举一个网上看到的例子:

一台 Nginx server,到晚上高峰 messages 出现大量的如下信息:

Apr 23 22:43:21 rs1 kernel: […] Out of socket memory

两种情况内核会出发 "Out of socket memory" 的信息:

  1. 有很多的孤儿套接字(orphan sockets) net.ipv4.tcp_max_orphans(常见)

  2. tcp socket 用尽了内核所定义的内存限制 net.ipv4.tcp_mem(不常见)

- 阅读剩余部分 -

拍了一个新域名: gesha.net

 August 26, 2015      简单生活      访问: 2,408 次      评论     sealinger

.io 域名太贵了,yunn.io 过期后不打算续费了。于是在 sitetrader.net 拍了一个域名 getsha.net,今天已经过户到自己名下了,纪念一下。 :-)



PS:为什么拍这个域名?因为我在公司的花名是格沙,哈哈~~

    1. «
    2. 1
    3. 2
    4. 3
    5. 4
    6. 5
    7. 6
    8. ...
    9. 23
    10. »

优质VPS主机推荐

最近回复

  • sealinger: 我补充在后面了,你参考下。
  • nilin: 最后一句话,怎么操作啊,使得容器和宿主机互通
  • sealinger: 可能吧。。验证码还没搞定,哈哈

最新文章

  • Charles 之 SSL Proxying
  • 系统重启后Nginx的Max open files limit被重置为默认的问题
  • tmpwatch与find命令清理旧文件的注意
  • 关于Nginx在URL末尾不加斜杠时的自动重定向
  • Nginx在upstream中配置域名的动态解析问题
  • CentOS 6.7下Caffe的编译安装过程
  • vsftpd-虚拟用户配置
  • 关于sar命令的一点技巧
  • AWS EC2:扩展EBS卷的存储空间
  • PDF文件表单里输入文字后不显示的问题解决
  • Docker实践技巧(0)
  • RHEL7/CentOS7系统配置和管理变化汇总
  • 搭建Docker私有仓库Registry-v2
  • Pipework配置Docker容器macvlan网络
  • CentOS 7安装Docker简易指南
  • Win7开机后svchost.exe占用内存和CPU过高
  • 关于 Out of Socket memory 的解释
  • 拍了一个新域名: gesha.net
  • 【DNS】权威NS的记录如何做CDN智能解析
  • Enhanced Intel SpeedStep® Technology on Linux
  • [转]tcp数据重传时间细节探秘及数据中心优化
  • UEditor for Typecho插件安装笔记
  • Cacti修改采集精度为1分钟
  • Debian下减少snmpd的日志输出详细度
  • 将VPS从Vultr洛杉矶节点迁到日本东京节点
  • [转]Traceroute网络排障实用指南(2)
  • [转]Traceroute网络排障实用指南(1)
  • 《TCP/IP详解-卷1》 要点笔记(3)
  • 《TCP/IP详解-卷1》 要点笔记(2)
  • 《TCP/IP详解-卷1》 要点笔记(1)
  • 利用iTunes将wav转成mp3格式
  • Godaddy续费域名无法支付的问题解决
  • 库克:身为同性恋我感到自豪
  • curl命令自动跳转follow HTTP redirects
  • [转]一致性hash算法( consistent hashing )
  • 不翻墙如何访问Google | gfsoso.com | wen.lu
  • typecho永久链接设置(nginx+php)
  • 如何解决nginx+php报错“No input file specified”
  • Linux Kernel: buffers和cached的区别
  • yum安装vim冲突一例解决
  • [Typecho插件]升级Google Analytics到Universal Analytics
  • 不解压浏览tar.gz文件列表
  • squid的forwarded_for 配置
  • [转]如此心机的老婆,不教出一个优秀的女儿才怪了~~
  • 三星国行Galaxy S4 GT-I9500官方Android 4.3固件ZCUFML1 ROOT教程
  • 汽车助手类(记录加油和保养情况)APP(for iOS)推荐
  • Debian初学者笔记(5)—四个小备忘
  • Android手机抓包工具shark for root抓包参数
  • Wireshark 1.8/1.10应用程序无法正常启动(0xc000007b)
  • 电脑连接手机adb shell老提示error:device offline

标签云

debian nginx tcp/ip docker typecho network linux fuckgfw dns hardware cacti amazon aws vsftpd caffe Charles

友情链接

  • 釜底网
  • Typecho主题
  • Typecho插件

其它

  • 文章 RSS
  • 评论 RSS
  • SiteUptime Report

优质VPS主机推荐


  • © 2010-2021 Walk in Starlight | Designed by Fomde | Powered by Typecho | Hosted by Vultr