- 1. Docker
- 1.1. Docker优点
- 1.2. Docker架构
- 1.3. Docker与虚拟机比较
- 1.4. Docker安装
- 1.5. 镜像相关命令
- 1.7. 容器相关命令
- 1.7.1. 启动容器 docker run -d —name tomcat -p 8080:8080 tomcat
- 1.7.2. 列出容器用 docker ps命令即可列出运行中的容器
- 1.7.3. 查看容器的信息 docker inspect 3af5513d208e
- 1.7.4. 退出容器 exit
- 1.7.5. 删除 rm
- 1.7.6. 启动/停止容器
- 1.7.7. 日志 logs -tf
- 1.7.8. 查看容器进程信息 top
- 1.7.9. 查看镜像元数据 inspect
- 1.7.10. 进入正在运行容器 exec -it
- 1.7.11. 容器内文件复制至主机cp
- 1.7.12. Docker run -it —rm tomcat:9.0 用完即删除
- 1.7.13. -e配置环境
- 1.7.14. 查看cpu状态 stas
- 1.7.15. 增加es内存限制 -e
- 1.8. 可视化
- 1.9. Commit 镜像
- 1.10. 容器数据卷
- 1.11. 具名和匿名挂载
- 2 Dockerfile
- 3 Docker网络
- 4 redis 集群部署
nginx
cd /usr/local/nginx/sbin
./nginx
关闭 nginx -s stop
/usr/local/nginx/sbin/nginx -s reload
keepalived
/etc/init.d/keepalived start
/etc/init.d/keepalived restart ——重启
/etc/init.d/keepalived stop ——停止
/etc/init.d/keepalived reload ——重新加载
zookeeper
./zkServer.sh start
./zkServer.sh stop
./zkServer.sh restart
./zkServer.sh status
关闭防火墙
systemctl stop firewalld
//禁止开机启动
systemctl disable firewalld
1. Docker
Docker官方网址: https://docs.docker.com/ 英文地址
Docker中文网址: http://www.docker.org.cn/ 中文地址
Docker是基于Go语言实现的云开源项目,诞生于2013年初,最初发起者是dotClouw公司。Docker 自开源后受到广泛的关注和讨论,目前已有多个相关项目,逐断形成了围Docker的生态体系。dotCloud 公司后来也改名为Docker Ine。
Docker是一个开源的容器引擎,它有助于更快地交付应用。 Docker可将应用程序和基础设施层隔离,并且能将基础设施当作程序一样进行管理。使用 Docker可更快地打包、测试以及部署应用程序,并可以缩短从编写到部署运行代码的周期。
1.1. Docker优点
1.1.1. 简化程序
Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的 任务,在Docker容器的处理下,只需要数秒就能完成。
1.1.2. 避免选择恐惧症
如果你有选择恐惧症,还是资深患者。Docker 帮你 打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。
1.1.3. 节省开支
一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。
1.2. Docker架构

客户端→Docker_Host(宿主机)→仓库
容器→镜像→仓库
微服务如何在docker运行?
Docker 理解为应用市场管家
核心简化运维安装软件的发杂环境
Docker daemon( Docker守护进程)
Docker daemon是一个运行在宿主机( DOCKER-HOST)的后台进程。可通过 Docker客户端与之通信。
Client( Docker客户端)
Docker客户端是 Docker的用户界面,它可以接受用户命令和配置标识,并与 Docker daemon通信。图中, docker build等都是 Docker的相关命令。
Images( Docker镜像)
Docker镜像是一个只读模板,它包含创建 Docker容器的说明。它和系统安装光盘有点像,使用系统安装光盘可以安装系统,同理,使用Docker镜像可以运行 Docker镜像中的程序。
Container(容器)
容器是镜像的可运行实例。镜像和容器的关系有点类似于面向对象中,类和对象的关系。可通过 Docker API或者 CLI命令来启停、移动、删除容器。
Registry
Docker Registry是一个集中存储与分发镜像的服务。构建完 Docker镜像后,就可在当前宿主机上运行。但如果想要在其他机器上运行这个镜像,就需要手动复制。此时可借助 Docker Registry来避免镜像的手动复制。
一个 Docker Registry可包含多个 Docker仓库,每个仓库可包含多个镜像标签,每个标签对应一个 Docker镜像。这跟 Maven的仓库有点类似,如果把 Docker Registry比作 Maven仓库的话,那么 Docker仓库就可理解为某jar包的路径,而镜像标签则可理解为jar包的版本号。
1.3. Docker与虚拟机比较
作为一种轻量级的虚拟化方式,Docker在运行应用上跟传统的虚拟机方式相比具有显著优势:
Docker容器很快,启动和停止可以在秒级实现,这相比传统的虚拟机方式要快得多。
Docker容器对系统资源需求很少,一台主机上可以同时运行数千个Docker容器。
Docker通过类似Git的操作来方便用户获取、分发和更新应用镜像,指令简明,学习成本较低。
Docker通过Dockerfile配置文件来支持灵活的自动化创建和部署机制,提高工作效率。
1.4. Docker安装
Docker 是一个开源的商业产品,有两个版本:社区版(Community Edition,缩写为 CE)和企业版(Enterprise Edition,缩写为 EE)。企业版包含了一些收费服务,个人开发者一般用不到
https://docs.docker.com/engine/install/centos/
yum -y install gccyum -y install gcc-c++# 卸载 移除yum remove docker-ce docker-ce-cli containerd.iorm -rf /var/lib/docker# 安装yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine# 安装需要的软件包yum install -y yum-utils# 国外仓库较慢。不建议使用yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo# 使用阿里云仓库yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 更新yum软件包索引yum makecache fast# 安装yum install docker-ce docker-ce-cli containerd.io# 阿里镜像加速sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{"registry-mirrors": ["https://rwcr42cm.mirror.aliyuncs.com"]}EOFsudo systemctl daemon-reloadsudo systemctl restart docker# 启动systemctl start dockerdocker version# 测试docker run hello-world# 启动并加入开机启动systemctl start dockersystemctl enable docker# 停止systemctl stop docker
1.5. 镜像相关命令
1、搜索镜像 # docker search java
可使用 docker search命令搜索存放在 Docker Hub(这是docker官方提供的存放所有docker镜像软件的地方,类似maven的中央仓库)中的镜像。执行该命令后, Docker就会在Docker Hub中搜索含有 java这个关键词的镜像仓库。
Docker Hub 官网https://hub.docker.com/search?q=java&type=image
2、下载镜像docker pull java:8
使用命令docker pull命令即可从 Docker Registry上下载镜像,执行该命令后,Docker会从 Docker Hub中的 java仓库下载最新版本的 Java镜像。如果要下载指定版本则在java后面加冒号指定版本
3、列出镜像使用 docker images命令即可列出已下载的镜像
4、删除镜像 使用 docker rmi java 命令即可删除指定镜像
docker rmi d23bdf5b1b1b
递归删除
Docker rmi -f $(docker images -aq)
1.7. 容器相关命令
1.7.1. 启动容器 docker run -d —name tomcat -p 8080:8080 tomcat
在本例中,为 docker run添加了两个参数,含义如下:
-d 后台运行
-p 宿主机端口:容器端口 #开放容器端口到宿主机端口
-P 随机分配ip
访问 http://Docker宿主机 IP:81/,将会看到nginx的主界面如下:
需要注意的是,使用 docker run命令创建容器时,会先检查本地是否存在指定镜像。如果本地不存在该名称的镜像, Docker就会自动从 Docker Hub下载镜像并启动一个 Docker容器。
-it 交互运行
—name 别名
Cp -r webapps.dist/* webapps
1.7.2. 列出容器用 docker ps命令即可列出运行中的容器
docker ps -a所有
-n 显示最近运行的
-q 只显示容器编号
1.7.3. 查看容器的信息 docker inspect 3af5513d208e
1.7.4. 退出容器 exit
1.7.5. 删除 rm
docker rm 容器id
docker rm $(docker ps -a -q) 删除所有
docker ps -a -q|xargs docker rm 删除所有
docker rmi $(docker images -q) 删除所有镜像
1.7.6. 启动/停止容器
Docker start 容器id
Docker restart
Docker stop
Docker kill
1.7.7. 日志 logs -tf
Docker logs -tf —tail 10 容器id 没有日志
Shell 脚本
Docker run -d centos /bin/sh -c “while true;do echo java;
Sleep 1;done”
1.7.8. 查看容器进程信息 top
1.7.9. 查看镜像元数据 inspect
1.7.10. 进入正在运行容器 exec -it
Docker exec -it 容器id /bin/bash
Docker attach 容器id 进入的是正在执行的代码
1.7.11. 容器内文件复制至主机cp
Docker cp
Docker cp 容器id:路径 主机路径
1.7.12. Docker run -it —rm tomcat:9.0 用完即删除
1.7.13. -e配置环境
Docker run -d --name es -p 9200:9200 -p 9300:9300
-e “discovery.type=single-node” elasticsearch:7.6.2
1.7.14. 查看cpu状态 stas
1.7.15. 增加es内存限制 -e
Docker run -d --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2
1.8. 可视化
1.9. Commit 镜像
Docker commit -m=“描述” -a=“作者” 容器ID 目标镜像名称:[TAG]
Docker commit -a=”zw” -m=”update” id121 tomcat01:1.0
1.10. 容器数据卷
1.1.1. Mysql
Docker pull mysql:5.7
docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7
1.11. 具名和匿名挂载
1.1.1. 匿名挂载
不指定主机
-v 容器内路径
docker run -d -p --name nginx01 -v /etc/nginx nginx
查看所有卷情况d
docker volume ls
docker volume inspect 卷名
所有容器内卷在 ``/var/lib/docker/volumes/XXX/_data
rw ro 改变 容器内 读写权限
ro 只读
rw 可读可写
docker run -d -p --name nginx01 -v juming_nginx:/etc/nginx:ro nginx
docker run -d -p --name nginx01 -v juming_nginx:/etc/nginx:rw nginx
2 Dockerfile
构建docker镜像的构建文件,通过脚本生成镜像(官方命名 Dockerfile,build自动寻找此文件,不愿指定 -f)
2.1. 构建步骤
1 编写 dockerfile 文件
2 docker builder
3 docker run
4 docker push
cd /home
mkdir docker-test-volume
cd docker-test-volume
vi dockerfile1
FROM centos
VOLUME ["volume01","volume02"]
CMD echo "----END----"
CMD /bin/bash
构建镜像
docker build -f /home/docker-test-volume/dockerfile1 -t zw/centos:1.0 .
# 启动
docker run -it 4e9b40c7c928 /bin/bash

cd volume01
touch volumn.txt
docker ps
docker inspect aa3a98dc02ad

在宿主机查看 存在同样文件,文件已同步
如果没有挂载,需要手动挂载
-v 卷名:容器内路径
2.1.1. 数据卷容器
多个mysql数据同步
docker run --name docker01 -it 4e9b40c7c928 /bin/bash
docker run -it --name docker02 --volumes-from docker01 4e9b40c7c928
在 docker01 写入文件,docker02也会出现,互相同步
删除 docker01容器,docker02任然有,数据共享,只要有一个容器还在运行,数据任然有
2.2. DockerFile指令

FROM # 基础镜像
MAINTAINER # 镜像编写人,一般 姓名+邮箱
RUN # 镜像构建时候需要运行的命令
ADD # 步骤 eg需要tomcat镜像,添加tomcat压缩包!需要添加的内容
WORKDIR # 工作目录
VOLUME # 挂载的目录
EXPOSE # 暴露的端口
CMD # 容器启动时候运行的命令,只有一个会生效,会被替代
ENTRYPOINT # 容器启动时候运行的命令,可以追加
ONBUILD # 当构建一个继承DockerFile,这个时候会执行该命令
COPY # 类似ADD,将文件复制到镜像
ENV # 设置环境变量
vi mycentosfile
FROM centos
MAINTAINER zw<543190914@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
# 添加命令
RUN yum -y install vi
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "---END---"
CMD /bin/bash
# 构建
docker build -f mycentosfile -t mycentos:1.0 .
# 测试运行
docker run -it mycentos:1.0
# vi , ifconfig 命令可以使用
docker history e49624599d59
2.2.1. ENTRYPOINT 和 CMD 区别
CMD
vi cmdfile
FROM centos
CMD ["ls","-a"]
# 构建
docker build -f cmdfile -t cmdtest .
# 运行
docker run fffa3d6791f1

# 追加无效 -l
[root@zw dockerfile]# docker run fffa3d6791f1 -l
docker: Error response from daemon: OCI runtime create failed: container_linux.go:345: starting container process caused "exec: \"-l\": executable file not found in $PATH": unknown.

ENTRYPOINT
vi entrypointfile
FROM centos
ENTRYPOINT ["ls","-a"]
# 构建
docker build -f entrypointfile -t entrypointfile .
# 运行
docker run 732de2623ce5 -l
# 追加成功
2.3. 制作tomcat 镜像
# 官方命名 Dockerfile,build自动寻找此文件,不愿指定 -f
vi Dockerfile
FROM centos
MAINTAINER zw<543190914@qq.com>
COPY readme.txt /usr/local/readme.txt
ADD jdk-8u181-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-8.5.43.tar.gz /usr/local/
RUN yum -y install vi
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_181
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.43
ENV CATALINA_BASE /usr/local/apache-tomcat-8.5.43
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-8.5.43/bin/startup.sh && tail -F /url/local/apache-tomcat-8.5.43/bin/logs/catalina.out
# 构建镜像
docker build -t mytomcat .
# 启动
docker run -d -p 9090:8080 --name zwtomcat -v /home/dockerfile/tomcat/test:/usr/local/apache-tomcat-8.5.43/webapps/test -v /home/dockerfile/tomcat/tomcatlogs/:/usr/local/apache-tomcat-8.5.43/logs mytomcat
# 发布项目,由于做了挂载,在本地编写项目就可以发布
cd test
mkdir WEB-INF
cd WEB-INF
vi web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
</web-app>
cd ..
vi index.jsp
<html>
<body>
<center>Now time is: <%=new java.util.Date()%></center>
</body>
</html>
#测试
http://192.168.183.131:9090/test/
2.4. 发布镜像
docker login -u zw543190914
docker push zhengwei/mytomcat:1.0
2.4.1 发布镜像到阿里云
https://cr.console.aliyun.com/cn-hangzhou/instances/repositories
docker login --username=zw镜中水月 registry.cn-hangzhou.aliyuncs.com
docker pull registry.cn-hangzhou.aliyuncs.com/zw543190914/test:[镜像版本号]
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/zw543190914/test:[镜像版本号]
docker push registry.cn-hangzhou.aliyuncs.com/zw543190914/test:[镜像版本号]
2.5 构建springboot项目docker镜像
2.5.1 编写 Dockerfile
FROM java:8
COPY *.jar /app.jar
CMD ["--server.port=7001"]
EXPOSE 7001
ENTRYPOINT ["java","-jar","/app.jar"]
2.5.2 上传dockerfile和jar文件
cd /home/
mkdir ideal
cd ideal
2.5.3 构建镜像
docker build -t test01 .
docker run -d -P --name test-web test01
[root@zw ideal]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4cc69186b008 test01 "java -jar /app.jar …" 21 seconds ago Up 19 seconds 0.0.0.0:32772->7001/tcp test-web
[root@zw ideal]#
# 访问 192.168.183.131:32772/cp/index
# 查看日志
docker logs test-web
3 Docker网络
清理所有容器和镜像
docker run -d -P --name tomcat01 tomcat
[root@zw ~]# docker exec -it tomcat01 ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
78: eth0@if79: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
ping 172.17.0.2
# linux 可以ping通容器内部
—link
自定义网络
查看所有docker网络
[root@zw ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
59d32767afbb bridge bridge local
422e8b5afb78 host host local
49f67a64fa97 none null local
brige 桥接 docker默认
host 和宿主机共享网络
none 不配置网络
container 容器网络联通(不常用,局限性大)
docker run -d -P --name tomcat01 tomcat
# 默认加 --net brige docker0
docker run -d -P --name tomcat01 --net brige tomcat
# 默认的 域名不能访问 --link 可以打通
# 自定义网络
# --subnet 192.168.0.0/16 子网
# --gateway 192.168.0.1 网关
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
[root@zw ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
59d32767afbb bridge bridge local
422e8b5afb78 host host local
da4024b0fb20 mynet bridge local
49f67a64fa97 none null local
使用自定义网络
docker run -d -P --name tomcat-net01 --net mynet tomcat
docker run -d -P --name tomcat-net02 --net mynet tomcat
docker network inspect mynet

# 不使用--link 可以ping通,自定义网络已经维护好网络对应关系
[root@zw ~]# docker exec -it tomcat-net01 ping 192.168.0.3
PING 192.168.0.3 (192.168.0.3) 56(84) bytes of data.
64 bytes from 192.168.0.3: icmp_seq=1 ttl=64 time=0.086 ms
64 bytes from 192.168.0.3: icmp_seq=2 ttl=64 time=0.043 ms
# 可以使不同集群使用不同网络

docker exec -it tomcat01 ping tomcat-net01
ping: tomcat-net01: Temporary failure in name resolution
网络连通
# 打通 tomcat01 到 mynet
docker network connect mynet tomcat01
docker network inspect mynet

[root@zw ~]# docker exec -it tomcat01 ping tomcat-net01
PING tomcat-net01 (192.168.0.2) 56(84) bytes of data.
64 bytes from tomcat-net01.mynet (192.168.0.2): icmp_seq=1 ttl=64 time=0.351 ms
64 bytes from tomcat-net01.mynet (192.168.0.2): icmp_seq=2 ttl=64 time=0.131 ms
64 bytes from tomcat-net01.mynet (192.168.0.2): icmp_seq=3 ttl=64 time=0.142 ms
如果需要跨网络操作,需要使用docker network connect 连通
4 redis 集群部署
# 清除之前测试数据
docker rm $(docker ps -a -q)
docker rmi $(docker images -q)
创建redis 网络
docker network create redis --subnet 172.38.0.0/16
[root@zw ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
59d32767afbb bridge bridge local
422e8b5afb78 host host local
da4024b0fb20 mynet bridge local
49f67a64fa97 none null local
4eaf13abf1a4 redis bridge local
[root@zw ~]# docker network inspect redis
通过脚本创建6个redis配置
for port in $(seq 1 6); \
do \
mkdir -p /mydata/redis/node-${port}/conf
touch /mydata/redis/node-${port}/conf/redis.conf
cat << EOF >/mydata/redis/node-${port}/conf/redis.conf
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.38.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done
启动redis
docker run -p 6371:6379 -p 16371:16379 --name redis-1 -v /mydata/redis/node-1/data:/data -v /mydata/redis/node-1/conf/redis.conf:/etc/redis/redis.conf -d --net redis --ip 172.38.0.11 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
docker run -p 6372:6379 -p 16372:16379 --name redis-2 -v /mydata/redis/node-2/data:/data -v /mydata/redis/node-2/conf/redis.conf:/etc/redis/redis.conf -d --net redis --ip 172.38.0.12 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
docker run -p 6373:6379 -p 16373:16379 --name redis-3 -v /mydata/redis/node-3/data:/data -v /mydata/redis/node-3/conf/redis.conf:/etc/redis/redis.conf -d --net redis --ip 172.38.0.13 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
docker run -p 6374:6379 -p 16374:16379 --name redis-4 -v /mydata/redis/node-4/data:/data -v /mydata/redis/node-4/conf/redis.conf:/etc/redis/redis.conf -d --net redis --ip 172.38.0.14 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
docker run -p 6375:6379 -p 16375:16379 --name redis-5 -v /mydata/redis/node-5/data:/data -v /mydata/redis/node-5/conf/redis.conf:/etc/redis/redis.conf -d --net redis --ip 172.38.0.15 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
docker run -p 6376:6379 -p 16376:16379 --name redis-6 -v /mydata/redis/node-6/data:/data -v /mydata/redis/node-6/conf/redis.conf:/etc/redis/redis.conf -d --net redis --ip 172.38.0.16 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
[root@zw ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3e445fce3cae redis:5.0.9-alpine3.11 "docker-entrypoint.s…" 3 seconds ago Up 1 second 0.0.0.0:6376->6379/tcp, 0.0.0.0:16376->16379/tcp redis-6
df92fcaa090a redis:5.0.9-alpine3.11 "docker-entrypoint.s…" 21 seconds ago Up 20 seconds 0.0.0.0:6375->6379/tcp, 0.0.0.0:16375->16379/tcp redis-5
8af65170b563 redis:5.0.9-alpine3.11 "docker-entrypoint.s…" 44 seconds ago Up 43 seconds 0.0.0.0:6374->6379/tcp, 0.0.0.0:16374->16379/tcp redis-4
26656a2e4a29 redis:5.0.9-alpine3.11 "docker-entrypoint.s…" About a minute ago Up 59 seconds 0.0.0.0:6373->6379/tcp, 0.0.0.0:16373->16379/tcp redis-3
1f415494bd2e redis:5.0.9-alpine3.11 "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:6372->6379/tcp, 0.0.0.0:16372->16379/tcp redis-2
d4f3508084bf redis:5.0.9-alpine3.11 "docker-entrypoint.s…" 4 minutes ago Up 4 minutes 0.0.0.0:6371->6379/tcp, 0.0.0.0:16371->16379/tcp redis-1
docker exec -it redis-1 /bin/sh
/data # redis-cli --cluster create 172.38.0.11:6379 172.38.0.12:6379 172.38.0.13:6379 172.38.0.14:6379 172.38.0.
15:6379 172.38.0.16:6379 --cluster-replicas 1
/data # redis-cli -c
127.0.0.1:6379>
127.0.0.1:6379> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:125
cluster_stats_messages_pong_sent:133
cluster_stats_messages_sent:258
cluster_stats_messages_ping_received:128
cluster_stats_messages_pong_received:125
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:258
127.0.0.1:6379>
# 节点信息
127.0.0.1:6379> cluster nodes
440146d79d559903cdebfbe8625cd4d2233a2291 172.38.0.15:6379@16379 slave 5b14cb0cef3b73151ba8c940826bd627f7ce2428 0 1600577657624 5 connected
5b14cb0cef3b73151ba8c940826bd627f7ce2428 172.38.0.11:6379@16379 myself,master - 0 1600577658000 1 connected 0-5460
0d785f46f0b669f6d5c502b5a6c6fbc76ddb6afc 172.38.0.12:6379@16379 master - 0 1600577658134 2 connected 5461-10922
b577de9d77e4d6d6d57e17889acfbc85784eda64 172.38.0.14:6379@16379 slave 60b192f77bfd946cbe273bde14f5b082057d413d 0 1600577658000 4 connected
60b192f77bfd946cbe273bde14f5b082057d413d 172.38.0.13:6379@16379 master - 0 1600577659054 3 connected 10923-16383
7dfaf88020c8d1b340624bab057b17b10a9ab5fb 172.38.0.16:6379@16379 slave 0d785f46f0b669f6d5c502b5a6c6fbc76ddb6afc 0 1600577659158 6 connected
127.0.0.1:6379>
127.0.0.1:6379> set a b
-> Redirected to slot [15495] located at 172.38.0.13:6379
OK
# 停止节点3
docker stop 26656a2e4a29
127.0.0.1:6379> get a
-> Redirected to slot [15495] located at 172.38.0.14:6379
"b"
172.38.0.14:6379>
172.38.0.14:6379> cluster nodes
0d785f46f0b669f6d5c502b5a6c6fbc76ddb6afc 172.38.0.12:6379@16379 master - 0 1600578106782 2 connected 5461-10922
7dfaf88020c8d1b340624bab057b17b10a9ab5fb 172.38.0.16:6379@16379 slave 0d785f46f0b669f6d5c502b5a6c6fbc76ddb6afc 0 1600578105754 6 connected
440146d79d559903cdebfbe8625cd4d2233a2291 172.38.0.15:6379@16379 slave 5b14cb0cef3b73151ba8c940826bd627f7ce2428 0 1600578107088 5 connected
60b192f77bfd946cbe273bde14f5b082057d413d 172.38.0.13:6379@16379 master,fail - 1600577889284 1600577887946 3 connected
b577de9d77e4d6d6d57e17889acfbc85784eda64 172.38.0.14:6379@16379 myself,master - 0 1600578106000 7 connected 10923-16383
5b14cb0cef3b73151ba8c940826bd627f7ce2428 172.38.0.11:6379@16379 master - 0 1600578106269 1 connected 0-5460
4 Docker软件
停止Docker容器 docker stop mynginx
Nginx安装
- 下载Nginx镜像文件
| docker pull nginx docker images |
|---|
2. 创建挂载目录
| mkdir -p /data/nginx/{conf,conf.d,html,logs} |
|---|
3. 编写Nginx配置文件
详细参考资料
4. 启动容器
| docker run —name mynginx -d -p 80:80 -v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /data/nginx/logs:/var/log/nginx -d docker.io/nginx |
|---|
6.查看容器
docker container exec -it f0b1c8ab3633 /bin/bash 进入到容器
cd /etc/nginx/
cat nginx.cnf
docker ps
MySQL安装
1.查询mysql版本
| docker search mysql |
|---|
2.下载MySQL5.7版本
| docker pull mysql:5.7 (这里选择的是第一个mysql镜像, :5.7选择的5.7版本) |
|---|
3.等待下载完成、创建MySQL容器
| docker create —name mysql -e MYSQL_ROOT_PASSWORD=123123 -p 3306:3306 mysql:5.7 |
|---|
创建容器名称为mysql,密码为123123
5. 启动容器
docker start mysql
6. 进入到容器
docker exec -it mysql bash
cd /etc/mysql/
cat mysql.cnf
7. mysql连接
mysql -uroot –p
关闭防火墙
systemctl stop firewalld
//禁止开机启动
systemctl disable firewalld
docker run -p 3306:3306 --name mysql-01 \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=root \
--restart=always \
-d mysql:5.7
#docker启动redis
docker run -d -p 6379:6379 --restart=always \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
-v /mydata/redis-01/data:/data \
--name redis-01 redis:6.2.5 \
redis-server /etc/redis/redis.conf
Docker常用命令

docker images 查看镜像文件
docker ps 查看正在运行的容器
docker ps –a 查看所有的容器
docker container exec -it f0b1c8ab3633 /bin/bash 进入到容器
exit 退出
docker version 查看版本
docker run -d -p 81:80 nginx 启动nginx容器
docker rmi imgageid 删除镜像
docker rm 容器id 删除容器
1. 通过Docker安装的Nginx如何配置nginx.conf
Docker通过容器运行Nginx——-安装的目录 在容器中
/容器id/etc/nginx
/容器id/etc/mysql
默认情况下安装在 容器的etc目录
