CentOS7如何禁止IPv6

编辑文件/etc/sysctl.conf
vi /etc/sysctl.conf

添加下面的行:
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

如果你想要为特定的网卡禁止IPv6,比如,对于enp0s3,添加下面的行。
net.ipv6.conf.enp0s3.disable_ipv6 = 1

保存并退出文件。

编辑/etc/sysconfig/network配置,增加 NETWORKING_IPV6=no,保存并退出
[root@ds-163 /]# cat /etc/sysconfig/network
# Created by anaconda
NETWORKING_IPV6=no

编辑/etc/sysconfig/network-scripts/ifcfg-enp0s3,确保IPV6INIT=no,ifcfg-enp0s3是根据自己机器的实际网卡信息
[root@ds-163 network-scripts]# cat ifcfg-enp0s3
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp0s3
UUID=336b6df7-4ee8-4f61-bfeb-1aa74da7da6b
DEVICE=enp0s3
ONBOOT=yes
IPADDR=192.168.0.163
PREFIX=24
GATEWAY=192.168.0.1
DNS1=192.168.0.1
IPV6_PRIVACY=no
ZONE=public

[root@ds-163 network-scripts]# cat ifcfg-docker0
DEVICE=docker0
STP=no
TYPE=Bridge
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
IPADDR=172.17.0.1
PREFIX=16
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV4_DNS_PRIORITY=100
IPV6INIT=no
IPV6_AUTOCONF=no
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
IPV6_DNS_PRIORITY=100
NAME=docker0
UUID=0177b883-58c8-49ae-adaf-a50427e83f74
ONBOOT=no
ZONE=trusted

执行下面的命令来使设置生效。
sysctl -p

禁止IPv6后遇到问题:

 

centos7的systemctl服务存贮目录和常用列表命令

systemctl服务主体存贮目录:
/usr/lib/systemd/system/

systemctl服务开机启动链接存贮目录:
/etc/systemd/system/basic.target.wants/

列出所有开机自启的服务
systemctl list-unit-files | grep enabled

列出防火墙服务的自启状态
systemctl list-unit-files | grep firewalld

列出所有服务的层级和依赖关系,可以指定某个服务
systemctl list-dependencies [服务名称]

删除docker images/containers方法

docker images生成过多,经常会占满硬盘空间,需要定时删除冗余image文件。清理的时候一般以root权限处理。

一般命令如下:

停止所有container,为删除images作准备:
docker stop $(docker ps -a -q)

如果想要删除所有container,如下指令:
docker rm $(docker ps -a -q)

这里docker ps 的命令包括:
1)-a 列出所有容器
2)-l 列出最新创建容器
3)-n=2 列出最近创建的2个容器
4)-q 仅列出容器ID
5)-s 显示容器大小
所以docker ps -aq 相当于列出所有的容器ID,然后docker rm 删除

查看当前有些什么images
docker images

要删除images,通过image的id来指定删除:
docker rmi <image id>

要删除untagged images,也就是那些id为<None>的image的话可以用
docker rmi $(docker images | grep “^<none>” | awk “{print $3}”)

docker rmi $(docker images -a|grep none|awk ‘{print $3}’)
docker ps -a | grep none | awk ‘{print $1}’ | xargs docker rmi

要删除全部image的话
docker rmi $(docker images -q)

docker build 或是 pull 命令就会产生临时镜像。如果我们用dockerfile创建一个镜像后,因为版本更新需要重新创建,那么以前那个版本的镜像就会成为临时镜像。这个是需要删除的。删除命令见下。
docker rmi $(docker images -f “dangling=true” -q)

尝试使用新的镜像,对原来的镜像进行删除,报错如下:
Error response from daemon: conflict: unable to delete XXXXXXXXXX (must be forced) – image is being used by stopped container XXXXXXXXXX

意思就是在删除镜像之前,要先删除对应的docker。因为该image被对应的container引用,所以image删除失败。

# docker images

希望删除imgae,根据image的id到container中找 # docker ps -a,通过删除CONTAINER ID它们。
docker rm XXXXXXXXX

再删除镜像,# docker rmi XXXXXX

也可以根据提示来的,加-f强制删除镜像。

 

Docker容器的重启策略

Docker容器的重启策略

Docker容器的重启策略是面向生产环境的启动策略,一般在开发过程中根据需要使用策略。Docker容器的重启都是由Docker守护进程完成的,因此与守护进程息息相关。
Docker容器的重启策略如下:
no:默认策略,在容器退出时不重启容器
on-failure:在容器非正常退出时(退出状态非0)重启容器
on-failure:在容器非正常退出时重启容器,最多重启3次
always:在容器退出时总是重启容器
unless-stopped:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器

Docker容器的退出状态码

docker run的退出状态码如下:
0:表示正常退出
非0,表示异常退出(退出状态码采用chroot标准)
125:Docker守护进程本身的错误
126:容器启动后,要执行的默认命令无法调用
127:容器启动后,要执行的默认命令不存在
其他命令状态码,容器启动后正常执行命令,退出命令时该命令的返回状态码作为容器的退出状态码

docker run的–restart选项

通过–restart选项,可以设置容器的重启策略,以决定在容器退出时Docker守护进程是否重启刚刚退出的容器。
–restart选项通常只用于detached模式的容器。

–restart选项不能与–rm选项同时使用。显然,–restart选项适用于detached模式的容器,而–rm选项适用于foreground模式的容器。

在docker ps查看容器时,对于使用了–restart选项的容器,其可能的状态只有Up或Restarting两种状态。

docker run -d –restart=always uenta-config-server
docker run -d –restart=on-failure:10 uenta-config-server

查看容器重启次数
docker inspect -f “{{ .RestartCount }}” uenta-config-server

查看容器最后一次的启动时间
docker inspect -f “{{ .State.StartedAt }}” uenta-config-server

参考链接:https://docs.docker.com/engine/reference/run/

 

 

Docker基本操作

Docker命令基本分一下几种:

容器生命周期管理 — docker [run|start|stop|restart|kill|rm|pause|unpause]
容器操作运维 — docker [ps|inspect|top|attach|events|logs|wait|export|port]
容器rootfs命令 — docker [commit|cp|diff]
镜像仓库 — docker [login|pull|push|search]
本地镜像管理 — docker [images|rmi|tag|build|history|save|import]
其他命令 — docker [info|version]

获取镜像:docker pull centos
查找镜像:docker search centos
查看镜像:docker images
删除镜像:docker rmi centos,也可以用id,取前几位就行。
创建镜像:docker commit CONTAINER self:centos CONTAINER为容器id
导出镜像:docker export xxxid > xxx.tar
导入镜像:docker import xxx.tar test/centos

创建容器:docker create centos
启动容器:docker run centos
查看容器:docker ps -a
停止容器:docker stop xxxid
进入容器:docker attach xxxid
删除容器:docker rm xxxid

命令都有很多参数,详细的可以看官方文档。也可以直接在命令后面–help。

例子

启动容器,输出hello world:docker run centos /bin/echo ‘Hello world’
启动容器,进入容器bash终端:docker run -t -i centos /bin/bash
启动容器,守护态运行:docker run -d centos /bin/bash
启动容器,守护态运行,把本地80端口映射到容器81端口:docker run -p 80:81 -d centos /bin/bash

 

 

 

 

CentOS 7下搭建和使用Docker私有仓库

下载registry镜像

docker pull registry

防火墙添加运行5000端口

firewall-cmd –zone=public –add-port=5000/tcp –permanent
firewall-cmd –reload

通过镜像启动一个容器

docker run -d -v /home/nin/registry:/var/lib/registry -p 5000:5000 –restart=always –privileged=true –name registry registry:latest

参数说明:
-v /home/nin/registry:/var/lib/registry :默认情况下,会将仓库存放于容器内的/var/lib/registry目录下,指定本地目录挂载到容器
–privileged=true :CentOS7中的安全模块selinux把权限禁掉了,参数给容器加特权,不加上传镜像会报权限错误(OSError: [Errno 13] Permission denied: ‘/var/lib/registry/repositories/library’)或者(Received unexpected HTTP status: 500 Internal Server Error)错误

客户端上传镜像

修改/etc/sysconfig/docker(Ubuntu下配置文件地址为:/etc/init/docker.conf),增加启动选项(已有参数的在后面追加),之后重启docker,不添加报错,https证书问题。

OPTIONS=’–insecure-registry 192.168.0.163:5000′ #CentOS 7系统

因为Docker从1.3.X之后,与docker registry交互默认使用的是https,而此处搭建的私有仓库只提供http服务在docker公共仓库下载一个镜像

docker pull docker.io/centos

来修改一下该镜像的tag
docker tag centos 192.168.0.163:5000/centos

把打了tag的镜像上传到私有仓库
docker push 192.168.0.163:5000/centos

客户端添加私有仓库地址

# 添加这一行
ADD_REGISTRY=’–add-registry 192.168.0.163:5000′

加上后,search镜像,私有仓库和docker hub上都会显示;不加搜索私有仓库,需要命令中指定私有仓库ip

使用仓库中的镜像

查询私有仓库中的所有镜像,使用docker search命令:
curl -u myuser https://registry_ip:5000/v1/search
curl registry_ip:5000/v1/search

docker search registry_ip:5000/ #centos 7
docker search registry_ip:5000/library #centos 6

查询仓库中指定账户下的镜像,则使用如下命令:
docker search registry_ip:5000/account/

使用中遇到的问题

Get https://192.168.0.163:5000/v1/_ping: Tunnel Connection Failed

解决方案:
修改daemon.json文件vim /etc/docker/daemon.json
添加:{ “insecure-registries”:[“192.168.0.163:5000”]}

 

 

CentOS7安装Docker CE

系统要求

Docker CE 支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10。 CentOS 7 满足最低内核的要求,但由于内核版本比较低,部分功能(如 overlay2 存储层驱动)无法使用,并且部分功能可能不太稳定。

卸载旧版本

旧版本的 Docker 称为 docker 或者 docker-engine,使用以下命令卸载旧版本:

$ yum remove docker docker-common docker-selinux docker-engine

使用yum源安装

执行以下命令安装依赖包:yum install -y yum-utils device-mapper-persistent-data lvm2

鉴于国内网络问题,强烈建议使用国内源。

国内源

执行下面的命令添加 yum 软件源:
$ yum-config-manager –add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

以上命令会添加稳定版本的 Docker CE yum 源。从 Docker 17.06 开始,edge test 版本的 yum 源也会包含稳定版本的 Docker CE。

官方源

$ sudo yum-config-manager –add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

如果需要最新版本的 Docker CE, 请使用以下命令:
$ sudo yum-config-manager –enable docker-ce-edge
$ sudo yum-config-manager –enable docker-ce-test

安装 Docker CE

更新 yum 软件源缓存,并安装 docker-ce。
$ sudo yum makecache fast
$ sudo yum install docker-ce

脚本自动安装

在测试或开发环境中 Docker 官方为了简化安装流程,提供了一套便捷的安装脚本,CentOS 系统上可以使用这套脚本安装:
$ curl -fsSL get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh –mirror Aliyun

执行这个命令后,脚本就会自动的将一切准备工作做好,并且把 Docker CE 的 edge 版本安装在系统中。

启动 Docker CE

$ systemctl enable docker
$ systemctl start docker

建立 docker 用户组

默认情况下,docker 命令会使用 Unix socket 与 Docker 引擎通讯。而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统上不会直接使用 root 用户。因此,更好地做法是将需要使用 docker 的用户加入 docker 用户组。

建立 docker 组:
$ groupadd docker

将当前用户加入 docker 组:
$ usermod -aG docker $USER

$USER是需要加入的用户,例如zhangsan

镜像加速

鉴于国内网络问题,后续拉取 Docker 镜像十分缓慢,强烈建议安装 Docker 之后配置 国内镜像加速。

一般到DaoCloud注册一个帐号,注册完毕后会返回一个命令行。

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://XXXXXX.m.daocloud.io

该脚本可以将 –registry-mirror 加入到你的 Docker 配置文件 /etc/docker/daemon.json 中。适用于 Ubuntu14.04、Debian、CentOS6 、CentOS7、Fedora、Arch Linux、openSUSE Leap 42.1,其他版本可能有细微不同。更多详情请访问文档。

这样拉取就会感觉到一个快,不然那网速就是老牛。

添加内核参数

默认配置下,如果在 CentOS 使用 Docker CE 看到下面的这些警告信息:

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

请添加内核配置参数以启用这些功能。
$ sudo tee -a /etc/sysctl.conf <<-EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

然后重新加载 sysctl.conf 即可
$ sysctl -p

 

 

在CentOS7下安装配置rabbitMQ

安装Erlang

由于RabbitMQ依赖Erlang, 所以需要先安装Erlang。从EPEL源安装(这种方式安装的Erlang版本可能不是最新的,有时候不能满足RabbitMQ需要的最低版本)。

# 启动EPEL源
$ yum install epel-release
# 安装erlang
$ yum install erlang

完成后安装RabbitMQ

先下载rpm:

wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.6/rabbitmq-server-3.6.6-1.el7.noarch.rpm

下载完成后安装:

yum install rabbitmq-server-3.6.6-1.el7.noarch.rpm

安装时如果遇到下面的依赖错误

Error: Package: socat-1.7.2.3-1.el6.x86_64 (epel)
Requires: libreadline.so.5()(64bit)
可以尝试先执行

$ yum install socat

RabbitMQ一些基本操作

$ systemctl enable rabbitmq-server.service # 添加开机启动RabbitMQ服务
$ systemctl start rabbitmq-server.service # 启动服务
$ systemctl status rabbitmq-server.service # 查看服务状态
$ systemctl stop rabbitmq-server.service # 停止服务

# 查看当前所有用户
$ rabbitmqctl list_users

# 查看默认guest用户的权限
$ rabbitmqctl list_user_permissions guest

# 由于RabbitMQ默认的账号用户名和密码都是guest。为了安全起见, 先删掉默认用户
$ rabbitmqctl delete_user guest

# 添加新用户
$ rabbitmqctl add_user rabbitadmin password

# 设置用户tag
$ rabbitmqctl set_user_tags rabbitadmin administrator

# 赋予用户默认vhost的全部操作权限
$ rabbitmqctl set_permissions -p / rabbitadmin “.*” “.*” “.*”

# 查看用户的权限
$ rabbitmqctl list_user_permissions rabbitadmin

更多关于rabbitmqctl的使用,可以参考帮助手册

开启web管理接口

如果只从命令行操作RabbitMQ,多少有点不方便。幸好RabbitMQ自带了web管理界面,只需要启动插件便可以使用。

$ rabbitmq-plugins enable rabbitmq_management
然后通过浏览器访问

http://localhost:15672

输入用户名和密码访问web管理界面了。

配置RabbitMQ

关于RabbitMQ的配置,可以下载RabbitMQ的配置文件模板到/etc/rabbitmq/rabbitmq.config,然后按照需求更改即可。
关于每个配置项的具体作用,可以参考官方文档
更新配置后,重启服务。

开启用户远程访问

默认情况下,RabbitMQ的默认的guest用户只允许本机访问, 如果想让guest用户能够远程访问的话,只需要将配置文件中的loopback_users列表置为空即可,如下:

{loopback_users, []}
另外关于新添加的用户,直接就可以从远程访问的,如果想让新添加的用户只能本地访问,可以将用户名添加到上面的列表, 如只允许admin用户本机访问。

{loopback_users, [“admin”]}
更新配置后,重启服务。

# 查看服务状态
# systemctl status rabbitmq-server.service

[root@ds-163 opt]# systemctl status rabbitmq-server.service
鈼[0m rabbitmq-server.service – RabbitMQ broker
Loaded: loaded (/usr/lib/systemd/system/rabbitmq-server.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2018-01-31 21:22:26 CST; 1h 5min ago
Main PID: 973 (beam.smp)
Status: “Initialized”
Memory: 82.3M
CGroup: /system.slice/rabbitmq-server.service
鈹溾攢 973 /usr/lib64/erlang/erts-5.10.4/bin/beam.smp -W w -A 64 -P 1048576 -t 5000000 -stbt db -zdbbl 32000 -K true …
鈹溾攢1328 /usr/lib64/erlang/erts-5.10.4/bin/epmd -daemon
鈹溾攢1681 inet_gethost 4
鈹斺攢1682 inet_gethost 4

Jan 31 21:22:19 ds-163.uenta.cn rabbitmq-server[973]: RabbitMQ 3.6.6. Copyright (C) 2007-2016 Pivotal Software, Inc.
Jan 31 21:22:19 ds-163.uenta.cn rabbitmq-server[973]: ## ## Licensed under the MPL. See http://www.rabbitmq.com/
Jan 31 21:22:19 ds-163.uenta.cn rabbitmq-server[973]: ## ##
Jan 31 21:22:19 ds-163.uenta.cn rabbitmq-server[973]: ########## Logs: /var/log/rabbitmq/rabbit@ds-163.log
Jan 31 21:22:19 ds-163.uenta.cn rabbitmq-server[973]: ###### ## /var/log/rabbitmq/rabbit@ds-163-sasl.log
Jan 31 21:22:19 ds-163.uenta.cn rabbitmq-server[973]: ##########
Jan 31 21:22:19 ds-163.uenta.cn rabbitmq-server[973]: Starting broker…
Jan 31 21:22:26 ds-163.uenta.cn rabbitmq-server[973]: systemd unit for activation check: “rabbitmq-server.service”
Jan 31 21:22:26 ds-163.uenta.cn systemd[1]: Started RabbitMQ broker.
Jan 31 21:22:26 ds-163.uenta.cn rabbitmq-server[973]: completed with 0 plugins.

查看log文件位置,打开log文件:

[root@ds-163 opt]# cat /var/log/rabbitmq/rabbit@ds-163.log

=INFO REPORT==== 31-Jan-2018::21:20:08 ===
Starting RabbitMQ 3.6.6 on Erlang R16B03-1
Copyright (C) 2007-2016 Pivotal Software, Inc.
Licensed under the MPL. See http://www.rabbitmq.com/

=INFO REPORT==== 31-Jan-2018::21:20:08 ===
node : rabbit@ds-163
home dir : /var/lib/rabbitmq
config file(s) : /etc/rabbitmq/rabbitmq.config (not found)
cookie hash : uHeLj/kKUTo0sO5/2NDkRw==
log : /var/log/rabbitmq/rabbit@ds-163.log
sasl log : /var/log/rabbitmq/rabbit@ds-163-sasl.log
database dir : /var/lib/rabbitmq/mnesia/rabbit@ds-163

显示没有找到配置文件,可以自己创建这个文件:

cd /etc/rabbitmq/
vi rabbitmq.config

编辑内容如下:

[{rabbit, [{loopback_users, []}]}].

开放使用,rabbitmq默认创建的用户guest,密码也是guest,这个用户默认只能是本机访问,localhost或者127.0.0.1,从外部访问需要添加上面的配置。

保存配置后重启服务:

systemctl stop rabbitmq-server.service
systemctl start rabbitmq-server.service

此时就可以从外部访问了,但此时再看log文件,发现内容还是原来的,还是显示没有找到配置文件,可以手动删除这个文件再重启服务,不过这不影响使用

rm /var/log/rabbitmq/rabbit@ds-163.log
systemctl stop rabbitmq-server.service
systemctl start rabbitmq-server.service

注意:开放5672和15672端口

firewall-cmd –zone=public –add-port=5672/tcp –permanent
firewall-cmd –zone=public –add-port=15672/tcp –permanent

firewall-cmd –reload

 

CentOS7使用firewalld防火墙与打开关闭端口

使用systemctl设定firewalld

firewalld的开启和关闭通过systemctl, systemctl是CentOS7服务管理工具中主要的工具,融合之前service和chkconfig的功能。

  • 基本使用

启动一个服务:systemctl start firewalld.service
关闭一个服务:systemctl stop firewalld.service
重启一个服务:systemctl restart firewalld.service
显示一个服务的状态:systemctl status firewalld.service
在开机时启用一个服务:systemctl enable firewalld.service
在开机时禁用一个服务:systemctl disable firewalld.service
查看服务是否开机启动:systemctl is-enabled firewalld.service
查看已启动的服务列表:systemctl list-unit-files|grep enabled
查看启动失败的服务列表:systemctl –failed

firewalld的命令行使用

  • 配置firewalld-cmd

查看版本: firewall-cmd –version
查看帮助: firewall-cmd –help
显示状态: firewall-cmd –state
查看所有打开的端口: firewall-cmd –zone=public –list-ports
更新防火墙规则: firewall-cmd –reload
查看区域信息: firewall-cmd –get-active-zones
查看指定接口所属区域: firewall-cmd –get-zone-of-interface=eth0
拒绝所有包:firewall-cmd –panic-on
取消拒绝状态: firewall-cmd –panic-off
查看是否拒绝: firewall-cmd –query-panic

  • 开启端口例子

添加 firewall-cmd –zone=public –add-port=80/tcp –permanent (–permanent永久生效,没有此参数重启后失效)
重新载入 firewall-cmd –reload
查看 firewall-cmd –zone= public –query-port=80/tcp
删除 firewall-cmd –zone= public –remove-port=80/tcp –permanent