1.服务器
云服务器Centos7.4
2.iptables
#先检查是否安装了iptables
service iptables status
#安装iptables
yum install -y iptables
#升级iptables
yum update iptables
#安装iptables-services
yum install iptables-services
#停止firewalld服务
systemctl stop firewalld
#禁用firewalld服务
systemctl mask firewalld
#编辑防火墙文件
cd /etc/sysconfig
vi iptables
3.docker说明信息
#docker默认修改iptables,要设置成不允许修改
$vi /usr/lib/systemd/system/docker.service
#找到
ExecStart=/usr/bin/dockerd -H fd://xxxxxxxxxxxxxxxx 在中间添加 --iptables=false
#修改之后
ExecStart=/usr/bin/dockerd --iptables=false -H fd://xxxxxxxxxxxxxxxx
#:wq 保存退出
#然后
$ systemctl daemon-reload
$ systemctl restart docker
4.nginx
docker版本:
#拉取镜像
docker pull nginx
#创建目录
mkdir -p /opt/nginx/node1/conf /opt/nginx/node1/logs /opt/nginx/node1/html
#复制容器中的目录到宿主机,一定要进入容器确定目录是否存在
docker cp nginx:/etc/nginx/nginx.conf /opt/nginx/node1/
docker cp nginx:/etc/nginx/conf.d/default.conf /opt/nginx/node1/conf/
#重新创建容器
docker run -di --name nginx -p 80:80 --privileged=true
-v /opt/nginx/node1/nginx.conf:/etc/nginx/nginx.conf
-v /opt/nginx/node1/conf:/etc/nginx/conf.d
-v /opt/nginx/node1/logs:/var/log/nginx
-v /opt/nginx/node1/html:/usr/share/nginx/html
nginx:latest
#出现403 Forbidden
在html下创建一个index.html 随便写上点东西就好
常规版本:
#解压tar包
tar -xzvf nginx-1.8.0.tar.gz
#环境准备
安装gcc环境:yum install gcc-c++
安装PCRE解析正则:yum install -y pcre pcre-devel
安装zlib解析http包进行gzip:yum install -y zlib zlib-devel
安装支持https的openssl:yum install -y openssl openssl-devel
#创建一个目录下面使用
mkdir /var/temp/nginx/client -p
#进入安装目录创建Makefile文件(10版本以后直接使用默认配置,指定一下安装目录)
./configure \
--prefix=/opt/nginx/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi
#编译安装
make && make install
#进入安装目录的sbin下
启动:./nginx
关闭:./nginx -s stop
退出:./nginx -s quit
刷新配置文件:./nginx -s reload
#访问
5.mysql
docker版本:
#版本
docker pull docker.io/mysql:5.7
#创建挂载目录
mkdir -p /opt/mysql/node1/data /opt/mysql/node1/logs /opt/mysql/node1/conf
#创建配置文件
1 touch /opt/mysql/node1/conf/my.cnf
2 vim /opt/mysql/node1/conf/my.cnf
[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
#启动容器
docker run -di --name=mysql1 --privileged=true \
-v /opt/mysql/node1/conf:/etc/mysql/conf.d \
-v /opt/mysql/node1/logs:/logs \
-v /opt/mysql/node1/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=**** \
mysql:5.7
#常规版本:(安装之前一定要卸载干净,find name挨个删除mysql)
#解压文件
tar -xvf MySQL-5.6.25-1.el6.x86_64.rpm-bundle.tar
#安装服务端
rpm -ivh MySQL-server-5.6.25-1.el6.x86_64.rpm
#安装客户端
rpm -ivh MySQL-client-5.6.25-1.el6.x86_64.rpm
#注意安装提示找到密码存放的文件的位置
cat /root/.mysql_secret
#启动mysql
service mysql start
#登录mysql
mysql -u root -p 文件中的密码
@重新设置密码
set password=password('***');
#设置远程访问权限
grant all privileges on *.* to 'root' @'%' identified by '***';
6.redis
docker版本:
#拉取镜像
docker pull redis
#创建挂载目录
mkdir -p /opt/redis/node1/data /opt/redis/node1/conf
#创建配置文件
1 找一份原版配置文件
redis.conf
2 vim /opt/docker/redis/node1/conf/redis.conf
#bind 127.0.0.1 //允许远程连接
protected-mode no
appendonly yes //持久化
requirepass *** //密码
daemonize no //设置成以非守护式运行,防止与docker冲突
#启动容器,加载配置文件并持久化数
docker run -di --name reids1 --privileged=true \
-v /opt/redis/node1/conf:/etc/redis \
-v /opt/redis/node1/data:/data \
redis:latest \
redis-server /etc/redis/redis.conf
#操作容器
cd /usr/local/bin
#验证密码
auth + 密码
常规版本:
#解压
tar -xzvf redis-3.0.7.tar.gz
#检查是否安装了gcc,没有安装则去安装
检查--- gcc -v
安装--- yum install gcc-c++
#进入解压目录编译安装到指定目录
make install PREFIX=/opt/redis/redis
#进入解压目录拷贝配置文件
cp redis.conf /opt/redis/redis/bin/
#进入安装目录
vim redis.conf
设置为守护进程:daemonize yes
设置可远程访问:bind 127.0.0.1注释掉,并且将protected-mode改为no
设置密码:requirepass ***
#启动redis
./redis-server redis.conf
#auth + 密码验证登录
7.zookeeper
#docker版本:
#拉取镜像
docker pull zookeeper
#创建挂载目录(集群和创建三组文件夹)
mkdir -p /opt/zookeeper/zk1/data /opt/zookeeper/zk1/conf /opt/zookeeper/zk1/datalog
#对应的目录内容复制出来
#重新启动一个zk容器
docker run -di --name zk1 -p 2181:2181 --privileged=true
-v /opt/zookeeper/zk1/conf:/conf
-v /opt/zookeeper/zk1/data:/data
-v /opt/zookeeper/zk1/datalog:/datalog
zookeeper
#常规版本(集群搭建):
#解压zookeeper安装包
tar -xzvf zookeeper-3.4.6.tar.gz
#进入解压目录的conf中复制zoo_sample.cfg 复制重命名为zoo.cfg
cp zoo_sample.cfg zoo.cfg
#复制解压目录
cp -r zookeeper-3.4.6 ./zk1
cp -r zookeeper-3.4.6 ./zk2
cp -r zookeeper-3.4.6 ./zk3
#创建数据目录
mkdir -p /opt/zookeeper/zk1/data
mkdir -p /opt/zookeeper/zk2/data
mkdir -p /opt/zookeeper/zk3/data
#修改数据目录
dataDir=/opt/zookeeper/zk1/data
dataDir=/opt/zookeeper/zk2/data
dataDir=/opt/zookeeper/zk3/data
#分别在各个节点数据目录下添加一个文件myid内容为1
zk1:myid内容为1
zk2:myid内容为2
zk3:myid内容为3
#修改zoo.cfg
server.1 = 172.21.0.2:2888:3888;2181
server.2 = 172.21.0.3:2888:3888;2181
server.3 = 172.21.0.4:2888:3888;2181
#进去节点目录启动zookeeper集群
./zkServer.sh start
docker-compose搭建集群
1 防火墙会影响容器之间的通信(开放网段的访问)
2 创建节点目录
mkdir -p /opt/zookeeper/zk1/data -p /opt/zookeeper/zk1/conf -p /opt/zookeeper/zk1/datalog
mkdir -p /opt/zookeeper/zk2/data -p /opt/zookeeper/zk2/conf -p /opt/zookeeper/zk2/datalog
mkdir -p /opt/zookeeper/zk1/data -p /opt/zookeeper/zk1/conf -p /opt/zookeeper/zk3/datalog
3 启动一个容器,容器内需要挂载的目录都先把东西复制出来使用(方式挂载丢失)
docker run -di --name zk1 zookeeper:latest
docker cp zk1:/conf/ /opt/zookeeper/zk1/
docker cp zk1:/data/ /opt/zookeeper/zk1/
docker cp zk1:/datalog/ /opt/zookeeper/zk1/
4 将复制出来的内容复制到另外两个节点,挨个修改配置文件,并且删除data目录下的version-2文件夹
添加 server.1 = ip:2888:3888;2181
server.2 = ip:2888:3888;2181
server.3 = ip:2888:3888;2181
5 删除刚才运行的容器
执行下面compose
version: '3.7'
services:
zk1:
image: zookeeper
#restart: always
privileged: true
container_name: zk1
ports:
- 2181:2181
volumes: # 挂载数据
- /opt/zookeeper/zk1/conf:/conf
- /opt/zookeeper/zk1/data:/data
- /opt/zookeeper/zk1/datalog:/datalog
networks:
default:
ipv4_address: 172.18.0.2
zk2:
image: zookeeper
#restart: always
privileged: true
container_name: zk2
ports:
- 2182:2181
volumes: # 挂载数据
- /opt/zookeeper/zk2/conf:/conf
- /opt/zookeeper/zk2/data:/data
- /opt/zookeeper/zk2/datalog:/datalog
networks:
default:
ipv4_address: 172.18.0.3
zk3:
image: zookeeper
#restart: always
privileged: true
container_name: zk3
ports:
- 2183:2181
volumes: # 挂载数据
- /opt/zookeeper/zk3/conf:/conf
- /opt/zookeeper/zk3/data:/data
- /opt/zookeeper/zk3/datalog:/datalog
networks:
default:
ipv4_address: 172.18.0.4
networks: # 自定义网络
default:
external:
name: zknet
8.svn
docker版本:
#拉取镜像
docker pull elleflorio/svn-server
#创建挂载目录
mkdir -p /opt/svn/repo /opt/svn/config /opt/svn/svnadmin_data
#运行容器(临时使用)
docker run --name svn-server -v /opt/svn:/tmp/svn -d elleflorio/svn-server
#进入容器
docker exec -it svn-server /bin/sh
#拷贝文件
cp /etc/subversion/* /tmp/svn ----复制的文件在宿主机移动到config
cp /opt/svnadmin/data/* /tmp/svn ----复制的文件在宿主机移动到svnadmin_data
#查看文件是否存在
cat /etc/apache2/conf.d/dav_svn.conf
#退出并且删除掉该容器
exit && rm
#修改权限
进入/opt/svn目录,修改权限
sudo chmod -R a+w *
#再次创建一个容器
docker run -di --name svn-server -p 8001:80 --privileged=true \
-v /opt/svn/repo:/home/svn \
-v /opt/svn/config:/etc/subversion \
-v /opt/svn/svnadmin_data:/opt/svnadmin/data \
elleflorio/svn-server
#进入容器创建一个仓库
svnadmin create /home/svn/self
#设置访问权限
vi /etc/subversion/subversion-access-control
[groups]
#对于所有仓库 admin 有读写权限
[/]
admin = rw
#给用户添加密码
htpasswd -b /etc/subversion/passwd aaaa 1234
#对新加的repository的文件夹添加写权限
进入/opt/svn/repo
sudo chmod -R a+w
#配置svnadmin(一个php写的svn管理工具)
浏览器输入 http://<svn host>/svnadmin
a 权限文件的位置(/etc/subversion/subversion-access-control)---点击test
b 用户文件的位置(/etc/subversion/passwd)---点击test
c svn仓库主目录(/home/svn)---点击test
d svn客户端执行目录(/usr/bin/svn)---点击test
e svn管理员执行命令目录(/usr/bin/svnadmin)---点击test
f 点击save保存
附.问题汇总
1 Docker容器做端口映射报错
#docker: Error response from daemon: driver failed programming external connectivity on endpoint lamp3 (46b7917c940f7358948e55ec2df69a4dec2c6c7071b002bd374e8dbf0d40022c): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 86 -j DNAT --to-destination 172.17.0.2:80 ! -i docker0: iptables: No chain/target/match by that name.
#解决方法
docker服务启动时定义的自定义链DOCKER被清除
重启即可systemctl restart docker
2.dcoker映射端口时,宿主机的端口会绕过防火墙,设置docker不使用防火墙
3.目录挂载时如果宿主机容器木为空,那么容器内相应的目录也会为空,把需要挂载目录下的内容都复制出来