Docker 基础篇
路线
Docker 概述
Docker 为什么出现 ?
Docker 的历史
聊聊 Docker
Docke 能干嘛?
之前的虚拟技术
容器化技术
DevOps (开发、运维)
Docker 安装
Docker 的基本组成
安装 Docker
环境准备
阿里云镜像加速
附录:腾讯云镜像加速请看
# 配置腾讯云镜像加速
$ tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com"
]
}
EOF
回顾 HelloWorld 流程
底层原理
Docker 是怎么工作的?
Docker 为什么比 VM 快?
Docker 的常用命令
帮助命令
https://docs.docker.com/engine/reference/commandline/cli/
镜像命令
搜索命令
docker pull 下载镜像
docker rmi 删除镜像
容器命令
列出所有运行的容器
退出容器
删除容器
启动和停止容器的操作
常用其他命令
查看日志
查看日志中 提到的下面这个 命令拆解
docker run -d centos /bin/bash -c "while true;do echo kayakyx;sleep 1;done"
while true;do echo hello;sleep 1;done
为一段 shell 脚本 详见 shell 脚本
意思为 无限循环 输出 hello 字符串, 并等待 1s。
(可以直接在 Linux 命令行中,或 Window 的 Git Bash Here 中,运行查看效果)
/bin/bash
为 Linux 系统 命令行(黑框框, 雷士 window 的 CMD), 随便找个 Linux 系统都可以运行 /bin/bash --help
(window 系统可以使用 Git Bash Here 来运行)。
查看完 help 信息之后 可以看到 /bin/bash
后面可以跟 -c c 代表 command 命令。shell 脚本语句也是 命令啊。所以可以跟在 -c 后面。
所以
docker run -d centos /bin/bash -c "while true;do echo hello;sleep 1;done"
翻译过来就是
使用 docker 后台运行 centos , centos 的 /bin/bash 命令中 运行 脚本 while true;do echo hello;sleep 1;done
查看容器中进程信息
查看进行的元数据
进入当前正在运行的容器
从容器内拷贝文件到主机上
小结
作业练习
Docker 安装 Nginx
下图中的
1、搜索镜像 docker search nginx
2、下载镜像 docker pull nginx
whereis nginx
带包搜索 nginx 文件和文件夹。 详见 Linux whereis命令
端口暴露的概念
Docker 来装一个 Tomcat
附
检查 tomcat 是否安装成功
访问 3355 端口
发现 404 (Tomcat 下的 webapps 文件夹是空的导致,没有网页),理论上启动成功是有一个 Tomcat 的网页的, (看 安装 Tomcat 的图中的 【发现问题】),接下来把 Tomcat 网页搞出来啦,
其实 Tomcat 镜像中的网页都放到 webapps.dist
文件夹下了。我们只要把 webapps.dist 中的内容都拷贝到 webapps
下即可.(以后部署自己的网页就部署到 webapps 目录下)
在访问就出来了
部署 es + kibana
附:关闭旧 elasticsearch docker stop elasticsearch
↓↓↓ docker stats
附:增加内存限制 通过 -e 参数
docker run -d --name elasticsearch01 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.14.1
占用内存最小 64M 最大 512M
通过 curl 测试
作业:使用 kibana 连接 es ? 思考网路如何才能连接过去?
可视化
附:
[root@VM-8-3-centos ~]# docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
选择本地的
Docker 镜像讲解
镜像是什么
Docker 镜像加载原理
分层理解
分层的镜像
特点
commit 镜像
--- 可忽略开始 ---
Docker 实战 关键技术名词
--- 可忽略结束 ---
容器数据卷
什么是容器数据卷
使用数据卷
实战安装 MySQL
具名和匿名挂载
拓展:
初识 Dockerfile
启动自己写的容器
查看一下卷挂载的路径
# 启动刚才通过 Dockerfile 构建的镜像
# 然后查看 启动的 容器
docker inspect 容器ID
附:
刚才在 容器的 volume01
文件夹下 新建了一个 container.txt
数据卷容器
多个 mysql 实现数据共享
结论
DockerFile
DockerFile 介绍
DockerFile 构建过程
基础知识
DockerFile 的指令
实战测试
创建自己的 centos
附 docker build -f dockerfile文件路径 -t 镜像名:[tag] .
对比:之前的原生的 centos
我们增加之后的镜像
我们可以列出镜像的变更历史
CMD 和 ENTRYPOINT 区别
测试 cmd
测试 ENTRYPOINT
实战:Tomcat 镜像
1、准备镜像文件 tomcat 压缩包, jdk的压缩包!
工作目录为 home/kuangshen/build/tomcat
apache-tomcat-9.0.22.tar.gz
链接:https://pan.baidu.com/s/1TmKXceqvIkc5Ngq7mblALQ
提取码:pky6
jdk-8u11-linux-x64.tar.gz
链接:https://pan.baidu.com/s/1GcoAIIw8h0igFzh-9uymxQ
提取码:krc7
2、编写 dockerfile 文件, 官方命名 Dockerfile
, build
会自动寻找这个文件按,就不需要 -f 指定了!
FROM centos
MAINTAINER kayakyx<1522025433@qq.com>
COPY readme.txt /usr/local/readme.txt
ADD jdk-8u11-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.22.tar.gz /usr/local/
RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_11
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.22
ENV CATALINS_BASH /usr/local/apache-tomcat-9.0.22
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.22/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.22/bin/logs/catalina.out
3、构建镜像
4、启动镜像
5、访问测试
内网
[root@VM-8-3-centos tomcat]# curl localhost:9090
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Apache Tomcat/9.0.22</title>
<link href="favicon.ico" rel="icon" type="image/x-icon" />
<link href="favicon.ico" rel="shortcut icon" type="image/x-icon" />
<link href="tomcat.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="wrapper">
<div id="navigation" class="curved container">
<span id="nav-home"><a href="https://tomcat.apache.org/">Home</a></span>
<span id="nav-hosts"><a href="/docs/">Documentation</a></span>
<span id="nav-config"><a href="/docs/config/">Configuration</a></span>
<span id="nav-examples"><a href="/examples/">Examples</a></span>
<span id="nav-wiki"><a href="https://wiki.apache.org/tomcat/FrontPage">Wiki</a></span>
<span id="nav-lists"><a href="https://tomcat.apache.org/lists.html">Mailing Lists</a></span>
<span id="nav-help"><a href="https://tomcat.apache.org/findhelp.html">Find Help</a></span>
<br class="separator" />
</div>
<div id="asf-box">
<h1>Apache Tomcat/9.0.22</h1>
</div>
<div id="upper" class="curved container">
<div id="congrats" class="curved container">
<h2>If you're seeing this, you've successfully installed Tomcat. Congratulations!</h2>
</div>
<div id="notice">
<img src="tomcat.png" alt="[tomcat logo]" />
<div id="tasks">
<h3>Recommended Reading:</h3>
<h4><a href="/docs/security-howto.html">Security Considerations How-To</a></h4>
<h4><a href="/docs/manager-howto.html">Manager Application How-To</a></h4>
<h4><a href="/docs/cluster-howto.html">Clustering/Session Replication How-To</a></h4>
</div>
# ......
也可以外网测试
6、发布项目
创建 /home/kuangshen/build/tomcat/test/WEB-INF/web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
</web-app>
附:代码来自:Web应用与web.xml
注意缩进,标签一定要顶到头,我被坑了许久
如果遇到你了什么 问题可以参考 容器内的 ROOT 下的是怎么写的
创建 /home/kuangshen/build/tomcat/test/index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>hello, kuangshen</title>
</head>
<body>
Hello World!<br/>
<%
System.out.println("---- my test web logs ----");
%>
</body>
</html>
附:代码改自:JSP 语法
访问测试
查看日志
进入刚才创建的容器
[root@VM-8-3-centos tomcat]# docker exec -it 2535f25d1c66 /bin/bash
[root@2535f25d1c66 local]# pwd
/usr/local
[root@2535f25d1c66 local]# ls
apache-tomcat-9.0.22 bin etc games include jdk1.8.0_11 lib lib64 libexec readme.txt sbin share src
[root@2535f25d1c66 local]# cat readme.txt
先读我
[root@2535f25d1c66 local]#
发布自己的镜像
腾讯云基本同阿里云
点击快速指令
参考: https://console.cloud.tencent.com/tcr/repository?rid=1
小结
附
# 保存一个镜像
[root@VM-8-3-centos home]# docker save -o [/youpath/文件名.tar.gz] [镜像ID]
# 加载一个 镜像.tar.gz 文件
[root@VM-8-3-centos home]# docker load -i [镜像文件名.tar.gz]
Loaded image ID: sha256:96deed707df80f93150dd1b9cae09edf84581cd2f94d008d4e44c6a47f0343e9
Docker 网络
清空所有镜像(环境), 方便学习 Docker 网络
$ docker rmi -f $(docker images -aq)
---- 附 ---
如果遇到了问题:
- ip addr 看不到 inet4 地址
- 容器(这里是 tomcat)内 ip addr 命令 not found
- 容器(这里是 tomcat)内 ping 命令 not found
解决 问题1:
如果 通过
$ ip addr
没有显示 ipv4 的地址, 我们可以通过
[root@VM-8-3-centos ~]# docker inspect [容器 ID]
[
{
"Id": "a25472a92dcf67bdeaf1b2f93ae8dc3c34b8a3cfd521c3855f60b0a84fc577b6",
"Created": "2021-11-17T13:57:00.120704891Z",
......
"NetworkSettings": {
......
"MacAddress": "02:42:ac:11:00:02",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "b256dc9f1f5e9371b9b476f705aea70a16ee545217e6590459dee1426a968236",
"EndpointID": "8117cc3587bcb63a0a6fc01c95601b019e2990f0263de3aff4d1393cb9ed9965",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2", # 这就是 inet4 (IPV4) 地址
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02",
"DriverOpts": null
}
}
}
}
]
来查看
解决 问题2 和 3 :
如果 在 tomcat 容器中 执行 如下两个命令,提示 ip 和 ping not found
[root@VM-8-3-centos ~]# docker exec -it tomcat01 ip addr
OCI runtime exec failed: exec failed: container_linux.go:380: starting container process caused: exec: "ip": executable file not found in $PATH: unknown
[root@VM-8-3-centos ~]# docker exec -it tomcat01 ping 172.72.0.3
OCI runtime exec failed: exec failed: container_linux.go:380: starting container process caused: exec: "ping": executable file not found in $PATH: unknown
简而言之:可以通过 agt-get 来安装这两个命令
# 更新 apt-get
$ apt-get update
# 安装 ip 命令
$ apt-get install iproute2 iproute2-doc
# 安装 ping 命令
$ apt-get install iputils-ping
下面时详细的 处理过程
exec: "ip": executable file not found in $PATH: unknown
解决过程如下
[root@VM-8-3-centos ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cf938fe054f8 hello-world "/hello" 23 hours ago Exited (0) 23 hours ago vigorous_feistel
[root@VM-8-3-centos ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat latest 5db6fed793e9 2 days ago 680MB
hello-world latest feb5d9fea6a5 7 weeks ago 13.3kB
[root@VM-8-3-centos ~]# docker run -d -P --name tomcat01 tomcat
e85547eda6a51bf2e2d6ef8820b6922c52efd475a50211cfa9f06e846cf1ec93
[root@VM-8-3-centos ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e85547eda6a5 tomcat "catalina.sh run" 17 seconds ago Up 16 seconds 0.0.0.0:49159->8080/tcp, :::49159->8080/tcp tomcat01
# 如果运行 报 找不到 ip 命名
[root@VM-8-3-centos ~]# docker exec -it tomcat01 ip addr
OCI runtime exec failed: exec failed: container_linux.go:380: starting container process caused: exec: "ip": executable file not found in $PATH: unknown
# 我们需要进入容器将 这个命令安装上
[root@VM-8-3-centos ~]# docker exec -it tomcat01 /bin/bash
# 进入后执行安装命令
root@e85547eda6a5:/usr/local/tomcat# apt-get install iproute2 iproute2-doc
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package iproute2
E: Unable to locate package iproute2-doc
root@e85547eda6a5:/usr/local/tomcat# ip addr
bash: ip: command not found
# 发现没有安装成功,需要先更新一下 apt-get
root@e85547eda6a5:/usr/local/tomcat# apt-get update
[1] 44
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package iproute2
E: Unable to locate package iproute2-doc
Get:1 http://deb.debian.org/debian bullseye InRelease [116 kB]
Get:2 http://security.debian.org/debian-security bullseye-security InRelease [44.1 kB]
Get:3 http://security.debian.org/debian-security bullseye-security/main amd64 Packages [92.8 kB]
Get:4 http://deb.debian.org/debian bullseye-updates InRelease [39.4 kB]
Get:5 http://deb.debian.org/debian bullseye/main amd64 Packages [8180 kB]
Get:6 http://deb.debian.org/debian bullseye-updates/main amd64 Packages [2592 B]
Fetched 8475 kB in 4min 31s (31.3 kB/s)
Reading package lists... Done
[1]+ Done apt-get update
# 重新安装 iproute2 iproute2-doc
root@e85547eda6a5:/usr/local/tomcat# apt-get install iproute2 iproute2-doc
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
libatm1 libbpf0 libcap2 libcap2-bin libelf1 libmnl0 libpam-cap libxtables12
The following NEW packages will be installed:
iproute2 iproute2-doc libatm1 libbpf0 libcap2 libcap2-bin libelf1 libmnl0 libpam-cap libxtables12
0 upgraded, 10 newly installed, 0 to remove and 1 not upgraded.
Need to get 1424 kB of archives.
After this operation, 4734 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://deb.debian.org/debian bullseye/main amd64 libelf1 amd64 0.183-1 [165 kB]
Get:2 http://deb.debian.org/debian bullseye/main amd64 libbpf0 amd64 1:0.3-2 [98.3 kB]
Get:3 http://deb.debian.org/debian bullseye/main amd64 libcap2 amd64 1:2.44-1 [23.6 kB]
Get:4 http://deb.debian.org/debian bullseye/main amd64 libmnl0 amd64 1.0.4-3 [12.5 kB]
Get:5 http://deb.debian.org/debian bullseye/main amd64 libxtables12 amd64 1.8.7-1 [45.1 kB]
Get:6 http://deb.debian.org/debian bullseye/main amd64 libcap2-bin amd64 1:2.44-1 [32.6 kB]
Get:7 http://deb.debian.org/debian bullseye/main amd64 iproute2 amd64 5.10.0-4 [930 kB]
Get:8 http://deb.debian.org/debian bullseye/main amd64 iproute2-doc all 5.10.0-4 [30.1 kB]
Get:9 http://deb.debian.org/debian bullseye/main amd64 libatm1 amd64 1:2.5.1-4 [71.3 kB]
Get:10 http://deb.debian.org/debian bullseye/main amd64 libpam-cap amd64 1:2.44-1 [15.4 kB]
Fetched 1424 kB in 60s (23.9 kB/s)
debconf: delaying package configuration, since apt-utils is not installed
Selecting previously unselected package libelf1:amd64.
(Reading database ... 12676 files and directories currently installed.)
Preparing to unpack .../0-libelf1_0.183-1_amd64.deb ...
Unpacking libelf1:amd64 (0.183-1) ...
Selecting previously unselected package libbpf0:amd64.
Preparing to unpack .../1-libbpf0_1%3a0.3-2_amd64.deb ...
Unpacking libbpf0:amd64 (1:0.3-2) ...
Selecting previously unselected package libcap2:amd64.
Preparing to unpack .../2-libcap2_1%3a2.44-1_amd64.deb ...
Unpacking libcap2:amd64 (1:2.44-1) ...
等待安装成功...
# 安装成功后在容器中 执行 ip addr 测试, 发现测试通过
root@e85547eda6a5:/usr/local/tomcat# 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
24: eth0@if25: <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
# CTRL + Q + P 不停止容器并退出
# 然后 在宿主机中 测试 运行, 发现 成功解决
[root@VM-8-3-centos ~]# 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
24: eth0@if25: <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
# 在 tomcat01 容器里执行 ping 时 如果包如下命令, 解决方法 同 ip 命令找不到一样,通过 apt-get 进行安装
[root@VM-8-3-centos ~]# docker exec -it tomcat01 ping 172.17.0.3
OCI runtime exec failed: exec failed: container_linux.go:380: starting container process caused: exec: "ping": executable file not found in $PATH: unknown
# 我们再次进入容器
[root@VM-8-3-centos ~]# docker exec -it tomcat01/bin/bash
bash: ping: command not found
解决过程如下
# 再次确认 ping 命令不可用
root@e85547eda6a5:/usr/local/tomcat# ping 172.17.0.2
bash: ping: command not found
# 安装 ping 命令, 如果直接安装失败 尝试 apt-get update 后 再运行
root@e85547eda6a5:/usr/local/tomcat# apt-get install iputils-ping
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
等待安装成功...
root@e85547eda6a5:/usr/local/tomcat# ping --help
ping: invalid option -- '-'
Usage
ping [options] <destination>
Options:
<destination> dns name or ip address
-a use audible ping
-A use adaptive ping
-B sticky source address
-c <count> stop after <count> replies
-D print timestamps
-d use SO_DEBUG socket option
-f flood ping
-h print help and exit
-I <interface> either interface name or address
-i <interval> seconds between sending each packet
-L suppress loopback of multicast packets
-l <preload> send <preload> number of packages while waiting replies
-m <mark> tag the packets going out
-M <pmtud opt> define mtu discovery, can be one of <do|dont|want>
-n no dns name resolution
-O report outstanding replies
-p <pattern> contents of padding byte
-q quiet output
-Q <tclass> use quality of service <tclass> bits
-s <size> use <size> as number of data bytes to be sent
-S <size> use <size> as SO_SNDBUF socket option value
-t <ttl> define time to live
-U print user-to-user latency
-v verbose output
-V print version and exit
-w <deadline> reply wait <deadline> in seconds
-W <timeout> time to wait for response
IPv4 options:
-4 use IPv4
-b allow pinging broadcast
-R record route
-T <timestamp> define timestamp, can be one of <tsonly|tsandaddr|tsprespec>
IPv6 options:
-6 use IPv6
-F <flowlabel> define flow label, default is random
-N <nodeinfo opt> use icmp6 node info query, try <help> as argument
For more details see ping(8).
# 安装成功了
# CTRL + Q + P 不停止容器并退出
# 宿主机中运行 测试, 发现成功了
[root@VM-8-3-centos ~]# docker exec -it tomcat01 ping 172.72.0.3
PING 172.72.0.3 (172.72.0.3) 56(84) bytes of data.
64 bytes from 172.72.0.3: icmp_seq=1 ttl=42 time=235 ms
64 bytes from 172.72.0.3: icmp_seq=2 ttl=42 time=232 ms
64 bytes from 172.72.0.3: icmp_seq=4 ttl=42 time=234 ms
^C
--- 172.72.0.3 ping statistics ---
5 packets transmitted, 3 received, 40% packet loss, time 4003ms
rtt min/avg/max/mdev = 231.502/233.542/234.908/1.470 ms
[root@VM-8-3-centos ~]#
---- 附 结束---
查看新启动的容器的网卡信息
小结
--link
通过 docker network
查看 docker 的网络
标注 docker network inspect
输出的内容
-
1.通过
docker inspect tomcat03
命令查看
-
2.通过 Host 文件 查看
下面的/etc/hosts
和window
上的host
文件是同一个功能的东西
自定义网络
网络模式
测试
创建网络前 清空 所有的容器 保持环境
在自己创建的网络上 运行两个 tomcat 容器
再来检查一下我们创建的网络情况
网络连通
答案:是不能的。
下面我们来测试。
再 docker0 网络上 启动两个 tomcat 容器
ping
一下
发现确实是 ping
不通的
正确的方式应该是 将 docker01 网络中的 容器连接到 我们的 自定义网络(mynet)中
使用命令 docker network connet
将 tomcat01
连接到 mynet
网络,并 检查 mynet
PS:
结论:
实战:部署 Redis 集群
附
缩写 r-m1 redis-master1 主机
r-s1 redis-slave 从机 主 redis 的 副本 redis
主 redis
服务挂掉(红色)的 时候 备份的要顶上去。
启动6个 太多了,通过 shell
脚本启动
(文本形式的命令 在本小节内容的最下面, 可直接复制)
通过循环启动的话, 把下面的语句加入到 for 循环中
手动依次启动
启动完毕后 查看启动情况
进入 一个 redis
后, 创建集群
启动 redis-cli
-c
代表集群
查看集群节点
设置一个 key 为a 值 为 'b' 的, 发现 是 172.38.0.13 取处理的
然后 去停到这个节点的服务,看时候还能获取到 a
的值
尝试获取
从 172.38.0.13
的 从机 172.38.0.14
上获取到了
上面 搭建 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 服务
# 1.
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
# 2.
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
# 3.
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
# 4.
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
# 5.
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
# 6.
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
# 进入一个 redis 容器
docker exec -it redis-1 /bin/sh
# 创建集群 副本为 1
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
# 启动客户端 redis-cli
redis-cli -c
# 查看集群情况
cluster info
# 查看集群节点
cluster nodes
# 设置一个 值 为 'b' 的 key a
set a b
# 停止 设置 a key 的 主 redis 服务 (我这里是 redis-3, 你的可不一定)
docker stop redis-3
# 连接 redis 集群
redis-cli -c
# 查询 a 的值
get a
SpringBoot 微服务打包 Docker 镜像
创建项目
创建完毕
编写 hello world
本地自测
打包
生成
jar 包 启动测试
可选 步骤(可以不弄) 装 Docker 插件
下载后可以从这里 连接 docker 仓库
编写 Dockerfile
将 jar 包 和 Dockerfile 传到服务器
构建 docker
镜像
查看 构建的 镜像
启动镜像
访问测试, 打印出了 hello
思考:
如果有多个镜像,比如 100 个镜像, 怎么维护它呢???
要用到
Docker Compose 容器编排
Docker Swarm 集群部署 (相当于 精简的 k8s )
CI/CD 之 Jenkins