docker主要用途:
- 提供一次性配置的环境去部署.
- 提供弹性的云服务.
- 组建微服务架构, 多容器的方式一台机器可以跑多个服务, 模拟出微服务架构.
Centos安装docker
更新update到最新的版本
# yum update
卸载老版本的docker
# yum remove docker
# yum remove docker-client
# yum remove docker-client-latest
# yum remove docker-common
# yum remove docker-latest
# yum remove docker-latest-logrotate
# yum remove docker-logrotate
# yum remove docker-selinux
# yum remove docker-engine-selinux
# yum remove docker-engine
# rm -rf /etc/systemd/system/docker.service.d
# rm -rf /var/lib/docker
# rm -rf /var/run/docker
安装需要的软件包
# yum install -y yum-utils device-mapper-persistent-data lvm2
设置yum源
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
查看docker版本
# yum list docker-ce --showduplicates|sort -r
安装docker
# yum install docker-ce-18.03.1.ce-1.el7.centos
启动docker
# systemctl start docker
开机自启
# systemctl enable docker
配置国内镜像
$ sudo vim /etc/docker/daemon.json
---
{
"registry-mirrors":["http://hub-mirror.c.163.com"]
}
---
启动redis主从容器
创建一个docker镜像
# cd /vagrant
# mkdir docker
# cd docker
# mkdir redis
# cd redis
# vim Dockerfile
---
FROM centos:latest
RUN groupadd -r redis && useradd -r -g redis redis
RUN yum -y update && yum -y install epel-release && yum -y install redis && yum -y install net-tools
EXPOSE 6379
---
# docker build -t redis .
查看网络类型
# docker network ls
bridge: docker默认是桥接网络. 每次容器重启都会更换ip地址(组主机内使用)
null: 不能分配ip地址.
host: 绑定端口的, 宿主机的某端口会映射到该容器中.(方便外部通过宿主机端口访问)
启动redis主从容器
容器名称 IP 映射端口号 宿主机IP 服务器运行模式
Redis-master 172.10.0.2 6380->6379 192.168.11.125 Master
Redis-slave 172.10.0.3 6381->6379 192.168.11.125 Slave
创建网络连接
# docker network create --subnet=172.10.0.0/16 mynetwork
启动master容器
# docker run -itd -p 宿主端口:容器端口 --name 容器名称 --net 网络名称 --ip 容器IP 依赖镜像
# docker run -itd -p 6380:6379 --name redis-master --net mynetwork --ip 172.10.0.2 redis
启动slave容器
# docker run -itd -p 6381:6379 --name redis-slave --net mynetwork --ip 172.10.0.3 redis
-d: 后台运行容器, 并返回容器ID;
-i: 以交互模式运行容器, 通常与-t同时使用;
-p: 端口映射, 格式为: 宿主机端口:容器端口
-t: 为容器分配一个伪输入终端, 通常与-i同用
–ip: 指定容器的固定ip
–net: 指定网络模式
查看网络中的容器
# docker network inspect 被"network create"创建的网络名称
# docker network inspect mynetwork
进入容器
开两个窗口各自执行
# docker exec -it redis-master bash
# docker exec -it redis-slave bash
此处即是容器内提示符
配置redis主从节点, 开启主从复制
配置文件
–主服务器redis.conf–
# vi /etc/redis.conf
---
bind 0.0.0.0 # 让所有ip都能访问
protected-mode no # 测试环境下关闭
# masterauth <master-password> # 访问密码, 测试环境不设置
---
–从服务器redis.conf–
# vi /etc/redis.conf
---
bind 0.0.0.0 # 让所有ip都能访问
protected-mode no # 测试环境下关闭
slaveof 172.10.0.2 6379 # 指向主节点的ip和端口号
# masterauth <master-password> # 访问密码, 测试环境不设置
---
启动&测试
–主服务器–
# redis-server /etc/redis.conf &
# redis-cli
127.0.0.1:6379> set kevin 123
OK
–从服务器–
# redis-server /etc/redis.conf &
# redis-cli
127.0.0.1:6379> get kevin
"123"