0%

介绍

系统服务/lib/systemd/system

用户服务(需要登陆后才能执行)/usr/lib/systemd/system

Systemd服务文件以.service结尾

######注:ubuntu是在/etc/systemd/system/

常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#查看所有启动的服务
systemctl list-units --type=service
#重启
systemctl restart nginx.service
#查看状态
systemctl status nginx.service
#启动
systemctl start nginx.service
#开机启动
systemctl enable nginx.service
#关闭开机启动
systemctl disable nginx.service
#重新扫描变动
systemctl daemon-reload
#查看所有的服务
systemctl list-unit-files

配置文件解释

普通服务文件命名规则serverName.service

带参数服务文件命名规则serverName@.service,使用时systemctl start serverName@%i其中%i为动态参数,一般为配置文件名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[Unit] #服务说明
#描述
Description=Shadowsocks-Libev Custom Client Service for %I
Documentation=man:ss-local(1)
#描述服务类别
After=network.target

[Service] #服务运行参数设置
#运行形式forking 后台形式、simple 普通模式?
Type=simple
#全局变量配置文件
#EnvironmentFile=/etc/sysconfig/shadowsocks-libev
# "$CONFFILE"配置在全局变量配置文件shadowsocks-libev,见附件
#ExecStart=/usr/bin/ss-local -c "$CONFFILE" $DAEMON_ARGS

CapabilityBoundingSet=CAP_NET_BIND_SERVICE
#服务的具体运行命令
ExecStart=/usr/bin/ss-local -c /etc/shadowsocks-libev/%i.json
#ExecReload=为重启命令
#ExecStop=为停止命令
User=nobody
Group=nobody
LimitNOFILE=32768

[Install]
WantedBy=multi-user.target

实战

残酷,革命尚未成功

vim /usr/lib/systemd/system/dropbox.service添加一个用户登陆后启动的服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[Unit]
Description=Dropbox as a system service user

[Service]
Type=forking
ExecStart=/usr/bin/dropbox start
ExecStop=/usr/bin/dropbox stop
User=nobody
Group=nobody
# 'LANG' might be unnecessary, since systemd already sets the
# locale for all services according to "/etc/locale.conf".
# Run `systemctl show-environment` to make sure.
#Environment=LANG=en_US.utf-8

[Install]
WantedBy=multi-user.target

附件

shadowsocks-libev

1
2
3
4
5
6
START=yes
CONFFILE="/etc/shadowsocks-libev/config.json"
DAEMON_ARGS="-u"
USER=nobody
GROUP=nobody
MAXFD=32768

环境准备

软件环境
  • Hyper-v虚拟机
  • boot2docker镜像:17.11.0-ce
网络环境
网络名 状态 设备名 网络信息(ip/掩码) route
以太网 外网 Realtek PCIe 192.168.210.85
255.255.252.0
以太网2 无外网 TAPV9(ovpn) 10.10.0.126
255.255.255.252
10.10.0.0
192.168.12.0
以太网3 无外网 TAPV9 #2(ovpn) 10.14.0.3
255.255.255.0
10.14.0.0
192.168.123.0
vEthernet(默认网关) 无外网 Hyper-v(虚拟机) 172.21.117.33
255.255.255.240
vEthernet(xuan-docker) 无外网 Hyper-v #2(虚拟机) 169.254.55.239
255.255.0.0
eth0(v-h) 192.168.211.31
192.168.211.255

测试

场景一

xuan-docker(内部网络) 桥接 以太网2

现象:以太网2无法连接
场景二

xuan-docker(内部网络) 桥接 以太网

现象:以太网无法连网
场景三

外部网络到以太网

现象:IP自动分配,但是网段非正常,设置不来
场景四

外部网络到以太网3

######现象:ip无法分配,获取不到ip,设置不来静态ip

参考

Hyper-V 2012 R2 网络配置

  • ubuntu16.04(bash on window)

如果没有安装wsl(bash on ubuntu)参考win10 安装ubuntu子系统bash on ubuntu

Ubuntu最新子系统已集成ssh客户端和服务端,只需要简单配置

如果没有安装参考Ubuntu17.04 开启远程连接ssh服务端

  1. 备份sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
  2. 修改配置文件sudo vim /etc/ssh/sshd_config
1
2
3
4
Port 2200 # 端口改为2200,22端口已被占用
ListenAddress 0.0.0.0 # 取消注释
#StrictModes yes # 注释
PasswordAuthentication yes # 允许密码登录
  1. 启动ssh服务sudo service ssh start

  2. 检查服务ps -e |grep ssh 如果有sshd代表启动成功

  3. 测试是否可以连接ssh -p 2200 xuan@127.0.0.1用户名一般为wsl子系统@服务前面的名字,密码为系统登陆密码

  4. 如果需要远程连接需要开放防火墙端口2200

    参考:win10 远程访问tomcat,开放8080端口

mac升级之后git/ssh等用不了

错误日志

1
2
3
4
5
6
7
git clone git@gitlab.admin.xxxx.git
Cloning into 'transport-web'...
Unable to negotiate with 12.46.12.19 port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

解决:执行vim ~/.ssh/config添加如下内容:

1
2
3
Host * 
HostKeyAlgorithms +ssh-rsa
PubkeyAcceptedKeyTypes +ssh-rsa

*代表允许任何主机使用 RSA

参考:SSH returns: no matching host key type found. Their offer: ssh-dss

路由

routeroute PRINT

Destination(ip/网段) Gateway(网关) Genmask(子网掩码) Iface(网卡)
192.168.123.110 10.8.0.2 255.255.255.255(ip) tun0
192.168.123.0 10.8.0.1 255.255.255.0(网段) tun0
解释

第一条:访问192.168.123.110将从tun0网卡的10.8.0.2的网关转发出去

第二条:访问192.168.(1~255)内所有的ip将从网卡tun0网卡的10.8.0.1的网关转发出去

服务配置

1
2
3
4
5
6
#推送路由192.168.123.110(ip)到所有客户端
push "route 192.168.123.110 255.255.255.255"
#推送路由192.168.123.0(网段)到所有客户端(除了在ccd客户端配置了这是他的路由的客户端)
push "route 192.168.123.0 255.255.255.0"
#设置服务器的路由:访问192.110.10.1时从10.8.0.1(网关)访问,10.8.0.1不设置可以从route命令查看网关是
route 192.110.10.1 255.255.255.255 10.8.0.1

####客户端配置

服务端需要添加配置client-config-dir ccd指定客户端配置目录为ccd

配置文件名为直接客户端的名字没有.conf和任何后缀

1
2
3
4
5
#指定客户端ip为10.8.0.7
ifconfig-push 10.8.0.7 255.255.255.0
#标记这是我的子网,让我的子网也可以访问openvpn,另一个作用就是push路由时,不会推送该路由到该客户端
iroute 192.168.123.0 255.255.255.0
route 192.168.123.0 255.255.255.0

我的设置如下

10.8.0.1 服务器

10.8.0.8 家

10.8.0.5 工作

server.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
port 1194
proto tcp
dev tun
sndbuf 0
rcvbuf 0
ca ca.crt
cert server.crt
key server.key
dh dh.pem
auth SHA512
tls-auth ta.key 0
topology subnet
server 10.8.0.0 255.255.255.0
#ifconfig-pool-persist ipp.txt
#push "redirect-gateway def1 bypass-dhcp"
#push "dhcp-option DNS 100.100.2.138"
#push "dhcp-option DNS 100.100.2.136"
push "route 10.8.0.0 255.255.255.0"
push "route 192.168.123.0 255.255.255.0"
route 192.168.123.0 255.255.255.0 10.8.0.8
client-config-dir ccd
client-to-client
keepalive 10 120
cipher AES-256-CBC
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
verb 3
crl-verify crl.pem

client

1
2
3
ifconfig-push 10.8.0.8 255.255.255.0
iroute 192.168.123.0 255.255.255.0
route 192.168.123.0 255.255.255.0

openvpn service安装与配置

1.下载脚本wget https://git.io/vpn -O openvpn-install.sh
1
2
3
4
#添加执行权限
chmod +x openvpn-install.sh
#总结
wget https://git.io/vpn -O openvpn-install.sh && bash openvpn-install.sh
2.运行脚本./openvpn-install.sh,设置如下
  1. 监听地址设置为空 IP address:
  2. Protocol:[2]TCP
  3. Port:1194
  4. 不选DNS:
  5. client name: client_k2
  6. External IP : 112.74.51.136
3. 配置服务端vim /etc/openvpn/server.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
#指定ip,所以记录ip没效果屏蔽
;ifconfig-pool-persist ipp.txt
;push "redirect-gateway def1 bypass-dhcp"
#推送服务器路由
push "route 10.14.0.0 255.255.255.0"
#推送k2客户端子网路由到所有客户端除了ccd里面申明了该路由的客户端
push "route 192.168.123.0 255.255.255.0"
#添加服务器路由,访问客户端K2的192.168.123.0子网通过网关10.14.0.2(k2客户端ip)
route 192.168.123.0 255.255.255.0 10.14.0.2
#添加客户端配置目录,启用之后,每个客户端必须指定ip,否正有可能访问不了其他客户端的子网
client-config-dir ccd
#客户端访问客户端
client-to-client
4. 配置客户端路由mkdir /etc/openvpn/ccdvim /etc/openvpn/ccd/client_k2
1
2
3
4
5
#设置该客户端的vpn的ip是10.14.0.2,子网掩码必须是255.255.255.0,如果启用ccd,必须配置
ifconfig-push 10.14.0.2 255.255.255.0
#申明192.168.123.0是自己的子网,并且让子网也可以访问vpn服务器,申明之后不会推送该路由到该客户端
iroute 192.168.123.0 255.255.255.0
route 192.168.123.0 255.255.255.0
5.添加客户端./openvpn-install.sh
  1. Select an option[1-4]:1 (add a new user)
  2. client name: client_worker
1
2
3
4
5
6
7
#编辑配置文件
vim /etc/openvpn/server.conf
#重启生效
systemctl restart openvpn@server.service
systemctl enable openvpn@server.service
#注释掉客户端的
#setenv opt block-outside-dns
6.下载ovpn文件,并修改配置,注释调#setenv opt block-outside-dns
7.常用命令
1
2
3
4
5
6
#重启生效
systemctl restart openvpn@server.service
#使能服务
systemctl enable openvpn@server.service
#ssh下载文件
scp root@112.74.51.136:/root/client_xuan_ubuntu.ovpn ./

openvpn client 安装与配置

1.安装
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
yum update #更新
yum install vim #安装vim
yum install epel-release #添加epel源
yum clean all # 可选
yum update # 可选
yum makecache # 可选
yum install openvpn iptables-services #安装openvpn
scp root@112.74.51.136:~/client_vm.ovpn /etc/openvpn/client/ #下载客户端配置
#注释掉客户端的vim /etc/openvpn/client/client_vm.ovpn
#setenv opt block-outside-dns
#-----------------------废弃------------------------------------------------
openvpn --daemon --cd /etc/openvpn/client --config client_vm.ovpn --log-append /etc/openvpn/openvpn.log #启动
tail -100f /etc/openvpn/openvpn.log #查看日志
ps -ef | grep openvpn #查看openvpn进程
kill <pid> #杀死进程
#---------------------废弃结束------------------------------------------------------
#openvpn-client启动服务,反斜杠转义字符,实际名称是openvpn-client@.service
vim /lib/systemd/system/openvpn-client\@.service
#修改
ExecStart=/usr/sbin/openvpn --suppress-timestamps --nobind --config %i.conf
#为
ExecStart=/usr/sbin/openvpn --daemon --config %i.ovpn --log-append /etc/openvpn/openvpn.log
#防止已经启动,@符号后面等效与%i,所以这里为客户端配置的名字
systemctl restart openvpn-client@client_vm
#开机启动
systemctl enable openvpn-client@client_vm

openvpn 服务端的局域网远程访问

准备工作,安装iptables

It is possible to go back to a more classic iptables setup. First, stop and mask the firewalld service:

1
2
systemctl stop firewalld
systemctl mask firewalld

Then, install the iptables-services package:

1
yum install iptables-services

Enable the service at boot-time:

1
systemctl enable iptables

Managing the service

1
systemctl [stop|start|restart] iptables

Saving your firewall rules can be done as follows:

1
service iptables save

添加路由

1
2
iptables -t nat -A POSTROUTING -s 10.14.208.0/24 -j SNAT --to-source  192.168.1.230
service iptables save

vim /etc/openvpn/server.conf 添加

1
push "route 192.168.1.0 255.255.255.0"

腾讯云openvpn服务器所在内网供openvpn客户端访问

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 10.34.0.0为openvpn网段
sudo iptables -t nat -A POSTROUTING -s 10.34.0.0/24 -o eth0 -j MASQUERADE
#查看规则
sudo iptables -nL -t nat
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match src-type LOCAL
MASQUERADE all -- 172.17.0.0/16 0.0.0.0/0
MASQUERADE all -- 172.18.0.0/16 0.0.0.0/0
MASQUERADE tcp -- 172.18.0.11 172.18.0.11 tcp dpt:3306
MASQUERADE all -- 10.34.0.0 0.0.0.0/0
#这句是新加的
MASQUERADE all -- 10.34.0.0/24 0.0.0.0/0
#还需要检查是否开启ipv4转发
vim /etc/sysctl.conf
>net.ipv4.ip_forward = 1
sysctl -p

子网访问总结

服务端子网(服务端是网关)

服务端子网(服务端不是网关)

客户端子网(客户端是网关)

客户端子网(客户端不是网关)

不是网关统一需要在客户端或服务端设置转发

1
2
3
4
5
6
# 10.34.0.0为openvpn网段
sudo iptables -t nat -A POSTROUTING -s 10.34.0.0/24 -o eth0 -j MASQUERADE
#还需要检查是否开启ipv4转发
vim /etc/sysctl.conf
>net.ipv4.ip_forward = 1
sysctl -p

注意事项

iptables不需要启动,也可以做路由转发

openvpn tun模式下客户端与内网机器通信

iptables规则的查看和清除

iptables 添加,删除,查看,修改

How can i use iptables on centos 7?

使用openvpn实现访问远程网络

参考

官网

脚本github官网Nyr/openvpn-install

openvpn的一个一键安装脚本“openvpn-install”让openvpn重放光彩,又可用openvpn翻墙了

How to Configure OpenVPN Server on CentOS 7.3

使用 OpenVPN 互联多地机房及Dokcer跨主机/机房通讯

扩大OpenVPN使用范围,包含服务器或客户端子网中的其他计算机

常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
docker ps [-a] #查看运行容器状态,-a 查看所有容器
docker stop <容器id> #停止运行容器
docker rm <容器id> [-f] #删除容器,-f 删除运行的
docker rmi <镜像id> #删除镜像
docker exec -it <容器id> </bin/bash或者sh> 进入容器(bash或者sh)
# -p端口映射 -v挂载 -d后台,--name容器名字,--rm和-d不能通用,--rm启动停止后删除
docker run -p 80:80 -v /data:/data --name mynginx -d nginx:latest
# 运行容器并进去,一次性
docker run -it --rm ubuntu:18.04 /bin/bash
exit #退出容器
#添加标签
docker node update --label-add <KEY>=<VALUE> <NODE ID|NAME>
#查看节点详细信息
docker node inspect <NODE ID|NAME>
#查看网络
ifconfig
#推镜像到仓库
docker push exxk/gitlab_cloud:tagname
#拉取镜像
docker pull exxk/gitlab_cloud:tagname
#远程连接
sudo docker -H tcp://ip:port <docker名令>
#eg查看远程的又什么镜像
sudo docker -H tcp://10.14.0.4:2375 images

docker安装

1
2
3
4
5
6
7
8
9
10
11
12
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
#或者阿里镜像
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum makecache fast
sudo yum install docker-ce
systemctl start docker.service
# 开机启动
systemctl enable docker
sudo docker run hello-world
sudo docker version
yum list docker-ce --showduplicates | sort -r

daemon设置

修改/etc/docker/daemon.json文件

1
2
3
4
5
vim /etc/docker/daemon.json
#改完后重新加载配置
sudo systemctl daemon-reload
#重启docker
sudo systemctl restart docker
docker加速阿里云加速地址
1
2
3
4
5
6
7
#等效于添加daemon.json文件
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://*****.mirror.aliyuncs.com"],
"hosts":["unix:///var/run/docker.sock"]
}
EOF
远程访问docker
方法1

在daemo.json添加"hosts":["tcp://0.0.0.0:2375","unix:///var/run/docker.sock"]

hosts 分tcp,uninx,fd三种模式,第一中时tcp指定网络连接方式,0.0.0.0:2375是指所有网络都可以连接,不安全,因此一般会加上stl证书形式,这里我用的局域网,所有没有加证书,指定局域网设置主机所属ip例如网卡2的ip为10.14.0.2,因此设置为10.14.0.2,只有10.14.0这个局域网可以访问,第二种uninx时指本地可以自由连接docker,第三种,理解不是很清楚,不发表见解

方法2(方法1能采用尽量用1)

直接修改服务的启动文件,添加-H参数指定

1
2
3
4
5
6
#解决portainner添加节点失败centos7.2 修改 /lib/systemd/system/docker.service
#ExecStart=/usr/bin/dockerd
#修改为
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
systemctl daemon-reload
systemctl restart docker.service
参考:docker 远程连接

docker-compose安装

法一(当前采用)
1
2
3
4
#pip安装方式
pip install docker-compose
#pip卸载方式
pip uninstall docker-compose
法二

安装docker-compose(以容器类型安装)

法三
1
2
3
4
5
6
7
sudo -i
#安装脚本,替换为最新的版本 ,这一步会失败,执行sudo -i
curl -L https://github.com/docker/compose/releases/download/1.15.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
#添加执行权限
chmod +x /usr/local/bin/docker-compose
#测试(失败,需要执行./docker-compose --version 没全局)
docker-compose --version

基本常用命令

1
2
3
4
5
docker-compose up -d
docker-compose down
docker-compose stop
docker-compose rm
docker-compose logs

docker-machine

linux

1
2
3
curl -L https://github.com/docker/machine/releases/download/v0.12.2/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine &&
chmod +x /tmp/docker-machine &&
sudo cp /tmp/docker-machine /usr/local/bin/docker-machine

windos git bash

1
2
3
if [[ ! -d "$HOME/bin" ]]; then mkdir -p "$HOME/bin"; fi && \
curl -L https://github.com/docker/machine/releases/download/v0.12.2/docker-machine-Windows-x86_64.exe > "$HOME/bin/docker-machine.exe" && \
chmod +x "$HOME/bin/docker-machine.exe"

问题以及解决方法

  1. docker info 出现如下警告

    奇葩现象,在mongo里面添加了用户之后,springboot连接数据库就连接不是,但是外面能连接上,然后docker info会出现下面的错误,然后执行下面 的解决方案就可以连接上了

    可能(阿里云概率)会导致一个stack服务无法通过宿主机内网ip访问第二个stack服务

    1
    2
    WARNING: bridge-nf-call-iptables is disabled
    WARNING: bridge-nf-call-ip6tables is disabled

    解决:

    方式一

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 方式一
    echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
    echo 1 > /proc/sys/net/bridge/bridge-nf-call-ip6tables

    # 方式二
    vi /etc/sysctl.conf
    # 添加以下内容
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    #最后执行
    sysctl -p
  2. 问题:构建镜像不能用-减号命名镜像的名字,使用docker-statck 部署找不到镜像

  3. 问题: 执行sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

    1
    2
    3
    4
    5
    [root@lfadmin ~]# sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    已加载插件:fastestmirror, langpacks
    adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
    grabbing file https://download.docker.com/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
    Could not fetch/save url https://download.docker.com/linux/centos/docker-ce.repo to file /etc/yum.repos.d/docker-ce.repo: [Errno 12] Timeout on https://download.docker.com/linux/centos/docker-ce.repo: (28, 'Resolving timed out after 30541 milliseconds')

    解决:

    vim /etc/yum.repos.d/docker-ce.repo

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    [docker-ce-stable]
    name=Docker CE Stable - $basearch
    baseurl=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/7/$basearch/stable
    enabled=1
    gpgcheck=1
    gpgkey=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/gpg

    [docker-ce-stable-debuginfo]
    name=Docker CE Stable - Debuginfo $basearch
    baseurl=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/7/debug-$basearch/stable
    enabled=0
    gpgcheck=1
    gpgkey=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/gpg

    [docker-ce-stable-source]
    name=Docker CE Stable - Sources
    baseurl=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/7/source/stable
    enabled=0
    gpgcheck=1
    gpgkey=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/gpg

    [docker-ce-edge]
    name=Docker CE Edge - $basearch
    baseurl=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/7/$basearch/edge
    enabled=0
    gpgcheck=1
    gpgkey=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/gpg

    [docker-ce-edge-debuginfo]
    name=Docker CE Edge - Debuginfo $basearch
    baseurl=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/7/debug-$basearch/edge
    enabled=0
    gpgcheck=1
    gpgkey=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/gpg

    [docker-ce-edge-source]
    name=Docker CE Edge - Sources
    baseurl=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/7/source/edge
    enabled=0
    gpgcheck=1
    gpgkey=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/gpg

    [docker-ce-test]
    name=Docker CE Test - $basearch
    baseurl=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/7/$basearch/test
    enabled=0
    gpgcheck=1
    gpgkey=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/gpg

    [docker-ce-test-debuginfo]
    name=Docker CE Test - Debuginfo $basearch
    baseurl=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/7/debug-$basearch/test
    enabled=0
    gpgcheck=1
    gpgkey=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/gpg

    [docker-ce-test-source]
    name=Docker CE Test - Sources
    baseurl=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/7/source/test
    enabled=0
    gpgcheck=1
    gpgkey=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/gpg

    [docker-ce-nightly]
    name=Docker CE Nightly - $basearch
    baseurl=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/7/$basearch/nightly
    enabled=0
    gpgcheck=1
    gpgkey=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/gpg

    [docker-ce-nightly-debuginfo]
    name=Docker CE Nightly - Debuginfo $basearch
    baseurl=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/7/debug-$basearch/nightly
    enabled=0
    gpgcheck=1
    gpgkey=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/gpg

    [docker-ce-nightly-source]
    name=Docker CE Nightly - Sources
    baseurl=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/7/source/nightly
    enabled=0
    gpgcheck=1
    gpgkey=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/gpg
  4. 问题:sudo yum install docker-ce提示如下

    1
    Delta RPMs disabled because /usr/bin/applydeltarpm not installed.

    解决:

    1
    2
    yum provides '*/applydeltarpm'
    yum install deltarpm
  5. 问题docker structure needs cleaning

    解决:docker system prune -a

  6. 问题设置daemo.json中hosts远程tcp连接时,不能启动

    解决:vim /lib/systemd/system/docker.service

    1
    2
    3
    ExecStart=/usr/bin/dockerd -H fd://
    #修改为
    ExecStart=/usr/bin/dockerd

    然后重载配置systemctl daemon-reload

    重启docker服务systemctl restart docker.service

    原因:冲突和hosts

Docker-machine

安装 Docker Toolbox

官网:docker/machine

1
2
3
4
5
6
7
8
9
10
11
#创建manager docker主机
docker-machine create -d hyperv manager
#查看主机
docker-machine ls
#删除主机
docker-machine rm -f manager
#进入docker主机
docker-machine ssh manager
#退出主机
exit
docker swarm join --token SWMTKN-1-2483wscrxzqlzn1ulk8o3izurjqdzcrg38uihaontlll788mq5-d55xj8yaycb2392q5kv02v4kq 192.168.100.214:2377

注意

如果使用power-shell,记得用管理员权限

Docker-machine单独安装 (废弃)

官网:docker/machine
环境
  • win10
  • gitbash

安装(On Windows with git bash)

1
2
3
$ if [[ ! -d "$HOME/bin" ]]; then mkdir -p "$HOME/bin"; fi && \
curl -L https://github.com/docker/machine/releases/download/v0.12.2/docker-machine-Windows-x86_64.exe > "$HOME/bin/docker-machine.exe" && \
chmod +x "$HOME/bin/docker-machine.exe"

执行上面的命令半天下载不下来,可以手动下载https://github.com/docker/machine/releases/download/v0.12.2/docker-machine-Windows-x86_64.exe然后执行

1
if [[ ! -d "$HOME/bin" ]]; then mkdir -p "$HOME/bin"; fi && mv docker-machine-Windows-x86_64.exe $HOME/bin/docker-machine.exe && chmod +x "$HOME/bin/docker-machine.exe"

centos7.3升级内核

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#查看内核版本
uname -a
uname -r
#导入elrepo的key
rpm -import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
#安装elrepo的yum
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
#查看内核相关包
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
#安装kernel-ml.x86_64主线稳定版
yum -y --enablerepo=elrepo-kernel install kernel-ml.x86_64 kernel-ml-devel.x86_64
#重建grub2的配置文件(可选操作,如果下一步查看内核找不到该文件,执行该命令)
grub2-mkconfig -o /boot/grub2/grub.cfg
#查看可用内核
cat /boot/grub2/grub.cfg |grep menuentry
#替换刚刚查看出来的内核名字
grub2-set-default 'CentOS Linux (4.13.2-1.el7.elrepo.x86_64) 7 (Core)'
#查看内核启动项
grub2-editenv list
#重启
reboot
#查看版本
uname -r
#查看内核
rpm -qa | grep kernel
#删除内核
yum remove kernel-3.10.0-514.26.2.el7.x86_64
参考

Centos 7/6 内核版本由3.10.0 升级至 4.12.4方法

Swarm 网络连通测试

环境
  • docker for windos 17.06.2(10.0.75.1)
  • centos7.3 docker
测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#manager>创建overlay网络
docker network create --driver overlay --subnet 10.0.9.0/24 my-network
#查看网络
docker network ls
#manager>创建nginx
docker service create --replicas 2 --name my-web --network my-network nginx
#查看my-web服务
docker service ps my-web
#查看my-network网络详情
docker network inspect my-network
#manager>创建busybox工具箱
docker service create --name my-busybox --network my-network busybox sleep 3000
#查看工具箱在那个节点
docker service ps my-busybox
#去工具箱的节点
docker ps
#进入工具箱
docker exec -it <工具箱的di or name> /bin/sh
#从busybox容器内部,查询DNS来查看my-web的VIP
nslookup my-web
#从busybox容器内部,使用特殊查询查询DNS,来找到my-web服务的所有容器的IP地址:
nslookup tasks.my-web
#从busybox容器内部,通过wget来访问my-web服务中运行的nginx网页服务器
wget -O- my-web
#增加实例
docker service update my-busybox --replicas 2

参考

基于Swarm的多主机容器网络

官网