docker容器搭建

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.目录挂载时如果宿主机容器木为空,那么容器内相应的目录也会为空,把需要挂载目录下的内容都复制出来 




















  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值