文章目录
- Docker基础学习
- 一、介绍
-
- 二、安装
-
- 三、基本命令
- 帮助命令
- 镜像命令
- 容器命令
- 常见命令
- 部署Nginx(练习)
- 部署Tomcat(练习)
- 常用问题
- 四、Portainer
-
- 五、Docker镜像
-
- 六、提交镜像
-
- 八、容器数据卷
-
- 九、数据卷容器
-
- 十、Dockerfile
- 介绍
- 初体验
- 语法
- 指令
- 进阶实战
- CMD与ENTRYPOINT
- 构建Tomcat镜像
- 十一、发布镜像
- DockerHub
- 指令
- 发布镜像到DockerHub
- 发布镜像到阿里云容器服务
- 小结
- 十二、Docker网络
-
- 十三、容器互联
-
- 十四、Redis集群部署
-
- 十五、SpringBoot微服务部署
-
Docker基础学习
一、介绍
-
简介
-
Docker出现前的现况
-
什么是Doceker?
-
针对上述问题,Docker技术应运而生,实现了开发部署上线,一套流程搞定;
-
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化;
-
Docker容器是完全使用沙箱机制,相互之间不会有任何接口;
-
一个完整的Docker有以下几个部分组成:
- DockerClient客户端;
- Docker Daemon守护进程;
- Docker Image镜像;
- DockerContainer容器;
-
Docker发展史
-
原理
-
Docker是如何工作的?
- Docker是一个Client-Server结构的系统;
- DockerClient的守护进程运行在主机上,通过socket从客户端访问;
- DockersServer接收到DockerClient的指令,就会执行这个指令;
-
Docker比虚拟机快的原因
-
Docker指令结构图
-
相关网站
- 狂神博客
- docker文档
- docker仓库
- docker官网
二、安装
三、基本命令
-
帮助命令
-
镜像命令
-
sudo docker run imageName
-
镜像运行流程
-
docker images
Usage: docker images [OPTIONS] [REPOSITORY[:TAG]]
List images
Options:
-a, --all Show all images (default hides intermediate images)
--digests Show digests
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print images using a Go template
--no-trunc Don't truncate output
-q, --quiet Only show numeric IDs
-
docker search searchContent
Usage: docker search [OPTIONS] TERM
Search the Docker Hub for images
Options:
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print search using a Go template
--limit int Max number of search results (default 25)
--no-trunc Don't truncate output
-
docker pull imageName
Usage: docker pull [OPTIONS] NAME[:TAG|@DIGEST]
Pull an image or a repository from a registry
Options:
-a, --all-tags Download all tagged images in the repository
--disable-content-trust Skip image verification (default true)
--platform string Set platform if server is multi-platform capable
-q, --quiet Suppress verbose output
[root@lazyr ~]
Using default tag: latest
latest: Pulling from library/mysql
d121f8d1c412: Pull complete
f3cebc0b4691: Pull complete
1862755a0b37: Pull complete
489b44f3dbb4: Pull complete
690874f836db: Pull complete
baa8be383ffb: Pull complete
55356608b4ac: Pull complete
dd35ceccb6eb: Pull complete
429b35712b19: Pull complete
162d8291095c: Pull complete
5e500ef7181b: Pull complete
af7528e958b6: Pull complete
Digest: sha256:e1bfe11693ed2052cb3b4e5fa356c65381129e87e38551c6cd6ec532ebe0e808
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest
版本号可以在docker官网里查询后填写
-
docker rmi -f 镜像ID
docker rmi -f $(docker images -aq)
Usage: docker rmi [OPTIONS] IMAGE [IMAGE...]
Remove one or more images
Options:
-f, --force Force removal of the image
--no-prune Do not delete untagged parents
-
容器命令
-
docker run [opt] imageName/imageId
--name="containerName" 容器名字,用来区分容器
-d 后台方式运行
-it 使用交互方式运行,可以进入容器内查看内容
-p 指定容器端口号
-p ip:主机端口:容器端口 指定ip地址,和容器端口对应主机端口的映射
-p 主机端口:容器端口 指定容器端口对应主机端口的映射
-p 容器端口
-P 随机指定端口号
[root@lazyr ~]
[root@635911d7e995 /]
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@635911d7e995 /]
exit
-
docker ps [opt]
空 列出正在运行的容器
-a 列出所有容器
-n=num 列出最近创建的num个容器
-q 只列出容器id
-
exit
ctrl+P+Q
-
docker rm 容器id
docker rm -f $(docker ps -aq)
docker rm -f $(docker ps -aq)
docker ps -a -q|xargs docker rm
-
docker start 容器ID
-
docker restart 容器ID
-
docker stop 容器ID
-
docker kill 容器ID
-
常见命令
-
docker logs -f -t --details 容器id
Usage: docker logs [OPTIONS] CONTAINER
Fetch the logs of a container
Options:
--details Show extra details provided to logs
-f, --follow Follow log output
--since string Show logs since timestamp (e.g. 2013-01-02T13:23:37) or relative (e.g. 42m for 42 minutes)
--tail string Number of lines to show from the end of the logs (default "all")
-t, --timestamps Show timestamps
--until string Show logs before a timestamp (e.g. 2013-01-02T13:23:37) or relative (e.g. 42m for 42 minutes)
-
docker top 容器id
-
docker inspect
Usage: docker inspect [OPTIONS] NAME|ID [NAME|ID...]
Return low-level information on Docker objects
Options:
-f, --format string Format the output using the given Go template
-s, --size Display total file sizes if the type is container
--type string Return JSON for specified type
[root@lazyr ~]
[
{
"Id": "c5500d0e92cddb3e6eb65a9ba1777e020eb29f6902ceeb8c2f039e7abba07518",
"Created": "2020-09-10T08:49:05.484098663Z",
"Path": "/bin/bash",
"Args": [],
"State": {
"Status": "exited",
"Running": false,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 0,
"ExitCode": 0,
"Error": "",
"StartedAt": "2020-09-10T08:49:05.859357989Z",
"FinishedAt": "2020-09-10T08:49:05.857222556Z"
},
}
]
-
docker exec -it 容器id /bin/bash
docker attach 容器id
-
docker cp 容器id:容器内路径 目的主机路径
-
部署Nginx(练习)
-
搜索镜像信息
-
下载镜像
[root@lazyr ~]
Using default tag: latest
latest: Pulling from library/nginx
bf5952930446: Pull complete
cb9a6de05e5a: Pull complete
9513ea0afb93: Pull complete
b49ea07d2e93: Pull complete
a5e4a503d449: Pull complete
Digest: sha256:2850bbf7ed1bcb88e50c08c424c13fec71cf0a0bf0d496b5481601c69f905534
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
-
查看镜像
[root@lazyr ~]
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest e1d7dc9731da 4 hours ago 544MB
nginx latest 4bb46517cac3 3 weeks ago 133MB
centos latest 0d120b6ccaa8 4 weeks ago 215MB
hello-world latest bf756fb1ae65 8 months ago 13.3kB
-
新建并运行Nginx容器
[root@lazyr ~]
c2d8256def4228b4781b5e9ba3fda2887264d0d14ee92b2c7a5788c8957f7c77
-
查看容器运行状态
[root@lazyr ~]
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c2d8256def42 nginx "/docker-entrypoint.…" 42 seconds ago Up 41 seconds 0.0.0.0:3344->80/tcp nginxTest
-
测试连接
[root@lazyr ~]
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
-
网站访问
-
访问流程原理
-
问题
- 我们现在若想修改nginx配置文件,必须进入容器内部,而容器内部有很多指令等因素不方便修改,怎么解决?
采用数据卷技术解决上述问题
;
-
部署Tomcat(练习)
-
搜索镜像信息
-
下载tomcat
[root@lazyr ~]
9.0: Pulling from library/tomcat
d6ff36c9ec48: Pull complete
c958d65b3090: Pull complete
edaf0a6b092f: Pull complete
80931cf68816: Pull complete
bf04b6bbed0c: Pull complete
8bf847804f9e: Pull complete
6bf89641a7f2: Pull complete
3e97fae54404: Pull complete
10dee6830d45: Pull complete
680b26b7a444: Pull complete
Digest: sha256:cbdcddc4ca9b47e42c7d0c2db78cbc0f7a8b4bbe1fa395f4a53c5a236db29146
Status: Downloaded newer image for tomcat:9.0
docker.io/library/tomcat:9.0
-
新建并运行Tomcat容器
[root@lazyr ~]
1318076a80396de946f1a39af203aa09ad6a6ad96931bcc54e976ee7f1a07262
-
查看容器运行状态
[root@lazyr ~]
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1318076a8039 tomcat:9.0 "catalina.sh run" 59 seconds ago Up 58 seconds 0.0.0.0:3355->8080/tcp tomcatTest
-
测试连接
[root@lazyr ~]
<!doctype html><html lang="en"><head><title>HTTP Status 404 – Not Found</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:
-
网站访问(404是因为官方的Tomcat是不完整的)
-
进入容器内查看
[root@lazyr ~]
root@1318076a8039:/usr/local/tomcat
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE README.md RELEASE-NOTES RUNNING.txt bin conf lib logs native-jni-lib temp webapps webapps.dist work
root@1318076a8039:/usr/local/tomcat
root@1318076a8039:/usr/local/tomcat/webapps
root@1318076a8039:/usr/local/tomcat/webapps
-
常用问题
四、Portainer
-
介绍
- 什么式Portainer?
- Docker图形化界面管理工具,提供了一个后台面板供我们操作
-
使用
五、Docker镜像
-
加载原理
-
UnionFS(联合文件系统)
-
BootFS
- boots(boot file system)主要包含 bootloader和 Kernel, bootloader主要是引导加 kernel;
- Linux刚启动时会加bootfs文件系统,在 Docker镜像的最底层是 boots;
- 这一层与我们典型的Linux/Unix系统是一样的,包含boot加載器和内核;
- 当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由 bootfs转交给内核,此时系统也会卸载bootfs。
-
RootFS
- rootfs(root file system),在 bootfs之上;
- 包含的就是典型 Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件;
- rootfs就是各种不同的操作系统发行版,比如 Ubuntu, Centos等等。
六、提交镜像
-
命令
-
提交自定义Tomcat镜像(练习)
-
新建运行Tomcat容器,并进入该容器内
[root@lazyr ~]
954b95fcfcab595b30bbb341e2530ead0a6b6d1964e77a9c77012324565d0fa0
[root@lazyr ~]
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
954b95fcfcab tomcat:9.0 "catalina.sh run" About a minute ago Up About a minute 0.0.0.0:3366->8080/tcp mytomcat
224761104e96 portainer/portainer "/portainer" 47 minutes ago Up 47 minutes 0.0.0.0:8088->9000/tcp determined_mahavira
[root@lazyr ~]
root@954b95fcfcab:/usr/local/tomcat
-
往webapps内移入初始文件
root@954b95fcfcab:/usr/local/tomcat
root@954b95fcfcab:/usr/local/tomcat
root@954b95fcfcab:/usr/local/tomcat/webapps
ROOT docs examples host-manager manager
-
访问网站(显示正常)
-
ctrl+P+Q退出后,将容器提交为镜像
[root@lazyr ~]
sha256:8ea04e5e29cf0cbce633355cbf1fc8766f40b0f762a604bad949b4406acb3c67
[root@lazyr ~]
REPOSITORY TAG IMAGE ID CREATED SIZE
mytomcat 1.0 8ea04e5e29cf 13 seconds ago 652MB
mysql latest e1d7dc9731da 5 hours ago 544MB
tomcat 9.0 d5eef28cf41d 8 days ago 647MB
tomcat latest d5eef28cf41d 8 days ago 647MB
nginx latest 4bb46517cac3 3 weeks ago 133MB
centos latest 0d120b6ccaa8 4 weeks ago 215MB
portainer/portainer latest 62771b0b9b09 7 weeks ago 79.1MB
hello-world latest bf756fb1ae65 8 months ago 13.3kB
八、容器数据卷
-
介绍
-
什么是容器数据卷?
-
我们将应用和环境打包成一个镜像,镜像运行时生成的数据应该存放在什么位置?
-
若放在容器内,容器一被删除,数据就全丢失了,并且每次修改数据都得进入容器内部才可以修改,若可以容器中产生的数据可以自动同步到本地就好了;
-
容器数据卷就是完成了将容器内的目录,挂载到Linux上面,实现本地和容器内数据同步
-
使用
-
指定位置挂载
docker run -it -v 主机目录:容器内目录 镜像名/镜像id /bin/bash
docker run -it -v 主机目录:容器内目录 -v 主机目录:容器内目录 镜像名/镜像id /bin/bash
[root@lazyr home]
lazyr wjr www
[root@lazyr home]
[root@lazyr home]
lazyr test wjr www
[root@lazyr home]
[root@lazyr test]
[root@lazyr test]
hello.txt
[root@lazyr test]
[root@bd1de60a2007 /]
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@bd1de60a2007 /]
[root@bd1de60a2007 home]
hello.txt
[root@lazyr test]
[
"Mounts": [
{
"Type": "bind",
"Source": "/home/test",
"Destination": "/home",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
]
]
[root@lazyr test]
bd1de60a2007
[root@lazyr test]
hello.txt
-
匿名挂载(在默认位置随机创建挂载目录)
docker run -d -v 卷名:容器内目录 镜像名/镜像id
[root@lazyr data]
02f09ab52e02e14bc79a5407e670d2163496cade21a9fd708e6c2ae628ad8dc2
[root@lazyr data]
DRIVER VOLUME NAME
local 5e0ebc9242c84b8f0ad985721bd8d8c5dddf3e1692f77682dcb302049f984eb6
local f4ec2f78f12864e3b6a560c9e20d563604375ed4ee8f092ca3ab42e0c6a07038
[root@lazyr data]
[root@lazyr docker]
builder buildkit containers image network overlay2 plugins runtimes swarm tmp trust volumes
[root@lazyr docker]
[root@lazyr volumes]
5e0ebc9242c84b8f0ad985721bd8d8c5dddf3e1692f77682dcb302049f984eb6 f4ec2f78f12864e3b6a560c9e20d563604375ed4ee8f092ca3ab42e0c6a07038 metadata.db
-
具名挂载(在默认位置创建指定名的挂载目录)
docker run -it -v 卷名:容器内目录 镜像名/镜像id /bin/bash
[root@lazyr volumes]
a8144eaaf2d0363945a046fb5581629b4ff1e414f39950c915dc2c1433d33975
[root@lazyr volumes]
DRIVER VOLUME NAME
local 5e0ebc9242c84b8f0ad985721bd8d8c5dddf3e1692f77682dcb302049f984eb6
local centosVolume
local f4ec2f78f12864e3b6a560c9e20d563604375ed4ee8f092ca3ab42e0c6a07038
[root@lazyr volumes]
[root@lazyr volumes]
5e0ebc9242c84b8f0ad985721bd8d8c5dddf3e1692f77682dcb302049f984eb6 centosVolume f4ec2f78f12864e3b6a560c9e20d563604375ed4ee8f092ca3ab42e0c6a07038 metadata.db
-
添加权限
[root@lazyr volumes]
8fc4c5d9fdfd1c798a19a52c29b6f645994031a174140114cee74cc98eca6481
-
相关指令
-
Mysql同步本地数据
-
下载Mysql数据库
[root@lazyr ~]
5.7: Pulling from library/mysql
d121f8d1c412: Already exists
f3cebc0b4691: Already exists
1862755a0b37: Already exists
489b44f3dbb4: Already exists
690874f836db: Already exists
baa8be383ffb: Already exists
55356608b4ac: Already exists
277d8f888368: Pull complete
21f2da6feb67: Pull complete
2c98f818bcb9: Pull complete
031b0a770162: Pull complete
Digest: sha256:14fd47ec8724954b63d1a236d2299b8da25c9bbb8eacc739bb88038d82da4919
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
-
新建并运行容器,同时挂载目录到本机(运行语句在官网里找)
[root@lazyr ~]
201fa4875eecbdf26c3be3ce5af25a6076160a43ea2c5fba9f3d2751508db7dc
-
本地数据库连接
-
在本地创建新数据库
-
查看Linux服务器挂载的目录
九、数据卷容器
-
介绍
- 什么是数据卷容器?
- 容器数据卷解决了容器和主机间数据同步的问题,那不同容器之间数据如何同步呢?
- 数据卷容器解决了
不同容器间的数据同步问题,且只有若多个容器数据都同时删除,容器内的数据才会删除(没挂载到本地时;挂载到本地时,所有容器都删除,本地数据也在)
。 -
-
指令
-
使用
-
只有父容器挂载了文件,子容器才可以同步数据
-
创建父容器(父容器必须挂载目录)
-
创建子容器
-
查看父容器的数据变化
十、Dockerfile
-
介绍
- 什么是Dockerfile?
- Dockerfile就是用来构建docker镜像的文件,命令脚本;
- 通过Dockerfile这个脚本可以生成镜像。
-
初体验
-
创建dockerfile文件(文件名建议dockerfile
)
[root@lazyr test]
/home/test
[root@lazyr test]
-
dockerfile文件内容(指令大写
)
FROM centos
VOLUME ["mountedVolume01","mountedVolume02"]
CMD echo "----end-----"
CMD /bin/bash
-
通过dockerfile构建镜像
[root@lazyr test]
Sending build context to Docker daemon 3.072kB
Step 1/4 : FROM centos
---> 0d120b6ccaa8
Step 2/4 : VOLUME ["mountedVolume01","mountedVolume02"]
---> Running in 8eea57e19489
Removing intermediate container 8eea57e19489
---> dc69ae084b62
Step 3/4 : CMD echo "----end-----"
---> Running in 689ffb5e4afd
Removing intermediate container 689ffb5e4afd
---> 4da7979ae660
Step 4/4 : CMD /bin/bash
---> Running in 1a9a8cd42f7c
Removing intermediate container 1a9a8cd42f7c
---> d88c4fb5e551
Successfully built d88c4fb5e551
Successfully tagged lazyrcentos:1.0
-
查看构建的镜像
[root@lazyr test]
REPOSITORY TAG IMAGE ID CREATED SIZE
lazyrcentos 1.0 d88c4fb5e551 36 seconds ago 215MB
mytomcat 1.0 8ea04e5e29cf 20 hours ago 652MB
mysql 5.7 ef08065b0a30 25 hours ago 448MB
-
运行构建的镜像
-
查看容器详细信息
[root@lazyr test]
[
"Mounts": [
{
"Type": "volume",
"Name": "df4413202054c82534c30d2e871077a572d50a9a50c89216767104c4ddef43b7",
"Source": "/var/lib/docker/volumes/df4413202054c82534c30d2e871077a572d50a9a50c89216767104c4ddef43b7/_data",
"Destination": "mountedVolume01",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
},
{
"Type": "volume",
"Name": "80d66cead979064cce5cf55d974f1e6a30fa222aacdc9b6520eddc3c9dfa32bd",
"Source": "/var/lib/docker/volumes/80d66cead979064cce5cf55d974f1e6a30fa222aacdc9b6520eddc3c9dfa32bd/_data",
"Destination": "mountedVolume02",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
]
-
语法
-
基础知识
- 每个保留关键字(指令)都必须大写;
- 执行按从上到下顺序执行;
- #表示注释;
- 每一个指令都会创建提交一个新的镜像层
- dockerfile是面向开发的,我们以后要发布项目,做镜像,需要编写dockerfile文件;
- dockerfile文件名最好统一为Dockerfile,这样构建时就不需要-f指定文件,系统会默认使用名为Dockerfile的文件;
-
指令 | 作用 |
---|
FROM | 设置镜像使用的基础镜像 |
MAINTAINER | 设置镜像的作者(姓名<邮箱>) |
RUN | 编译镜像时运行的脚本 |
LABEL | 设置镜像的标签 |
EXPOESE | 设置镜像暴露的端口 |
ENV | 设置容器的环境变量 |
ADD | 编译镜像时复制文件到镜像中,会自动解压 |
COPY | 编译镜像时复制文件到镜像中,不会解压,单纯的复制 |
CMD | 指定容器启动的时候要运行的命令,替换指令 |
ENTRYPOINT | 指定容器启动的时候要运行的命令,追加参数 |
VOLUME | 设置容器的挂载卷 |
USER | 设置运行RUN CMD ENTRYPOINT的用户名 |
WORKDIR | 设置RUN CMD ENTRYPOINT COPY ADD指令的工作目录 |
ARG | 设置编译镜像时加入的参数 |
ONBUILD | 当构建一个被继承的DockerFile,这时候就会运行ONBUILD指令 |
STOPSIGNAL | 设置容器的退出信号量 |
-
指令
-
docker build -f dockerfilePath -t imageName:TAG .
-
docker history imageName/imageId
[root@lazyr test]
IMAGE CREATED CREATED BY SIZE COMMENT
d88c4fb5e551 25 hours ago /bin/sh -c
4da7979ae660 25 hours ago /bin/sh -c
dc69ae084b62 25 hours ago /bin/sh -c
0d120b6ccaa8 4 weeks ago /bin/sh -c
<missing> 4 weeks ago /bin/sh -c
<missing> 4 weeks ago /bin/sh -c
-
进阶实战
-
CMD与ENTRYPOINT
-
测试CMD
-
创建dockerfile文件
FROM centos
CMD ["ls","-a"]
-
构建镜像
[root@lazyr test]
Sending build context to Docker daemon 3.072kB
Step 1/2 : FROM centos
---> 0d120b6ccaa8
Step 2/2 : CMD ["ls","-a"]
---> Running in 3e76b0572d98
Removing intermediate container 3e76b0572d98
---> b5717f92ff23
Successfully built b5717f92ff23
Successfully tagged cmd-test:latest
-
运行镜像
[root@lazyr test]
.
..
.dockerenv
bin
dev
etc
home
lib
-
运行镜像并追加参数
[root@lazyr test]
docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"-l\": executable file not found in $PATH": unknown.
-
测试ENTRYPOINT
-
创建dockerfile文件
FROM centos
ENTRYPOINT ["ls","-a"]
-
构建镜像
[root@lazyr test]
Sending build context to Docker daemon 3.072kB
Step 1/2 : FROM centos
---> 0d120b6ccaa8
Step 2/2 : ENTRYPOINT ["ls","-a"]
---> Running in 66b4da10fcb3
Removing intermediate container 66b4da10fcb3
---> a59c0931215c
Successfully built a59c0931215c
Successfully tagged entrypoint-test:latest
-
运行镜像
[root@lazyr test]
.
..
.dockerenv
bin
dev
etc
home
lib
-
运行镜像并追加参数
[root@lazyr test]
total 56
drwxr-xr-x 1 root root 4096 Sep 12 09:07 .
drwxr-xr-x 1 root root 4096 Sep 12 09:07 ..
-rwxr-xr-x 1 root root 0 Sep 12 09:07 .dockerenv
lrwxrwxrwx 1 root root 7 May 11 2019 bin -> usr/bin
drwxr-xr-x 5 root root 340 Sep 12 09:07 dev
drwxr-xr-x 1 root root 4096 Sep 12 09:07 etc
drwxr-xr-x 2 root root 4096 May 11 2019 home
lrwxrwxrwx 1 root root 7 May 11 2019 lib -> usr/lib
-
构建Tomcat镜像
-
准备初始文件
[root@lazyr myTomcat]
/home/wjr/myTomcat
[root@lazyr myTomcat]
apache-tomcat-9.0.36.tar.gz jdk-8u251-linux-x64.tar.gz readMe.txt
-
编写dockrfile文件
FROM centos
MAINTAINER lazyr<2296339656@qq.com>
COPY readMe.txt /usr/local/readMe.txt
ADD jdk-8u251-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.36.tar.gz /usr/local/
RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_251
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.36
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.36
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.36/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.36/bin/logs/catalina.out
-
构建镜像
[root@lazyr myTomcat]
Sending build context to Docker daemon 206.3MB
Step 1/15 : FROM centos
---> 0d120b6ccaa8
Step 2/15 : MAINTAINER lazyr<2296339656@qq.com>
---> Running in 89805720d237
Removing intermediate container 89805720d237
---> bae5bf13892d
Step 3/15 : COPY readMe.txt /usr/local/readMe.txt
---> 6e7aadcff317
Step 4/15 : ADD jdk-8u251-linux-x64.tar.gz /usr/local/
---> 95647b2a70fa
Step 5/15 : ADD apache-tomcat-9.0.36.tar.gz /usr/local/
---> 69dbc30d7d7d
Step 6/15 : RUN yum -y install vim
---> Running in 48de8ec2599f
CentOS-8 - AppStream 1.0 MB/s | 5.8 MB 00:05
CentOS-8 - Base 1.1 MB/s | 2.2 MB 00:01
CentOS-8 - Extras 2.7 kB/s | 7.9 kB 00:02
Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
vim-enhanced x86_64 2:8.0.1763-13.el8 AppStream 1.4 M
Installing dependencies:
gpm-libs x86_64 1.20.7-15.el8 AppStream 39 k
vim-common x86_64 2:8.0.1763-13.el8 AppStream 6.3 M
vim-filesystem noarch 2:8.0.1763-13.el8 AppStream 48 k
which x86_64 2.21-12.el8 BaseOS 49 k
Transaction Summary
================================================================================
Install 5 Packages
Total download size: 7.8 M
Installed size: 31 M
Downloading Packages:
(1/5): gpm-libs-1.20.7-15.el8.x86_64.rpm 246 kB/s | 39 kB 00:00
(2/5): vim-filesystem-8.0.1763-13.el8.noarch.rp 624 kB/s | 48 kB 00:00
(3/5): which-2.21-12.el8.x86_64.rpm 183 kB/s | 49 kB 00:00
(4/5): vim-enhanced-8.0.1763-13.el8.x86_64.rpm 1.5 MB/s | 1.4 MB 00:00
(5/5): vim-common-8.0.1763-13.el8.x86_64.rpm 1.6 MB/s | 6.3 MB 00:03
--------------------------------------------------------------------------------
Total 1.1 MB/s | 7.8 MB 00:07
warning: /var/cache/dnf/AppStream-02e86d1c976ab532/packages/gpm-libs-1.20.7-15.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
CentOS-8 - AppStream 164 kB/s | 1.6 kB 00:00
Importing GPG key 0x8483C65D:
Userid : "CentOS (CentOS Official Signing Key) <security@centos.org>"
Fingerprint: 99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
Key imported successfully
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : which-2.21-12.el8.x86_64 1/5
Installing : vim-filesystem-2:8.0.1763-13.el8.noarch 2/5
Installing : vim-common-2:8.0.1763-13.el8.x86_64 3/5
Installing : gpm-libs-1.20.7-15.el8.x86_64 4/5
Running scriptlet: gpm-libs-1.20.7-15.el8.x86_64 4/5
Installing : vim-enhanced-2:8.0.1763-13.el8.x86_64 5/5
Running scriptlet: vim-enhanced-2:8.0.1763-13.el8.x86_64 5/5
Running scriptlet: vim-common-2:8.0.1763-13.el8.x86_64 5/5
Verifying : gpm-libs-1.20.7-15.el8.x86_64 1/5
Verifying : vim-common-2:8.0.1763-13.el8.x86_64 2/5
Verifying : vim-enhanced-2:8.0.1763-13.el8.x86_64 3/5
Verifying : vim-filesystem-2:8.0.1763-13.el8.noarch 4/5
Verifying : which-2.21-12.el8.x86_64 5/5
Installed:
gpm-libs-1.20.7-15.el8.x86_64 vim-common-2:8.0.1763-13.el8.x86_64
vim-enhanced-2:8.0.1763-13.el8.x86_64 vim-filesystem-2:8.0.1763-13.el8.noarch
which-2.21-12.el8.x86_64
Complete!
Removing intermediate container 48de8ec2599f
---> 67e8a0acea34
Step 7/15 : ENV MYPATH /usr/local
---> Running in 7f9f7b16c0c7
Removing intermediate container 7f9f7b16c0c7
---> b2bb634a8eaf
Step 8/15 : WORKDIR $MYPATH
---> Running in ecabfcbb7b63
Removing intermediate container ecabfcbb7b63
---> 890ebfa171ef
Step 9/15 : ENV JAVA_HOME /usr/local/jdk1.8.0_251
---> Running in 4a850f2244be
Removing intermediate container 4a850f2244be
---> 0ea38511996b
Step 10/15 : ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
---> Running in 90b15750b921
Removing intermediate container 90b15750b921
---> 78a3bde77d24
Step 11/15 : ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.36
---> Running in dc22ec6b85ba
Removing intermediate container dc22ec6b85ba
---> cd983a9c11c4
Step 12/15 : ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.36
---> Running in 576517e09b20
Removing intermediate container 576517e09b20
---> 37090bb413f6
Step 13/15 : ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
---> Running in c9722175c830
Removing intermediate container c9722175c830
---> dd856f0441ba
Step 14/15 : EXPOSE 8080
---> Running in afee5049c7e2
Removing intermediate container afee5049c7e2
---> b90129ca6890
Step 15/15 : CMD /usr/local/apache-tomcat-9.0.36/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.36/bin/logs/catalina.out
---> Running in 398823b49d9f
Removing intermediate container 398823b49d9f
---> a0596a8007d9
Successfully built a0596a8007d9
Successfully tagged mytomcat:1.0
-
运行镜像
[root@lazyr myTomcat]
REPOSITORY TAG IMAGE ID CREATED SIZE
mytomcat 1.0 a0596a8007d9 About a minute ago 694MB
[root@lazyr myTomcat]
795a1adeac2afc995d3c9a0cd3a3e18150762e570ca2553d663155e9b4b8fb1e
-
网站访问:http://119.23.231.254:3456/
-
发布项目
[root@lazyr myWeb]
/home/wjr/myTomcat/myWeb
[root@lazyr myWeb]
index.jsp WEB-INF
-
访问网站:http://119.23.231.254:3456/myWeb/
十一、发布镜像
-
DockerHub
- 什么是DockerHub?
- DockerHub 是一个由 Docker 公司运行和管理的基于云的存储库。
- 它是一个在线存储库,Docker 镜像可以由其他用户发布和使用。
- 有两种库:公共存储库和私有存储库。如果你是一家公司,你可以在你自己的组织内拥有一个私有存储库,而公共镜像可以被任何人使用。
- 网址
-
指令
-
docker login -u username
Usage: docker login [OPTIONS] [SERVER]
Log in to a Docker registry.
If no server is specified, the default is defined by the daemon.
Options:
-p, --password string Password
--password-stdin Take the password from stdin
-u, --username string Username
[root@lazyr myLogs]
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/
Login Succeeded
-
docker tag 镜像名/镜像Id 新镜像名:TAG
Usage: docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
[root@lazyr myLogs]
REPOSITORY TAG IMAGE ID CREATED SIZE
mytomcat 1.0 a0596a8007d9 49 minutes ago 694MB
[root@lazyr myLogs]
[root@lazyr myLogs]
[root@lazyr myLogs]
REPOSITORY TAG IMAGE ID CREATED SIZE
lazyr/mytomcat 1.0 a0596a8007d9 53 minutes ago 694MB
mytomcat 1.0 a0596a8007d9 53 minutes ago 694M
-
docker push imageName:TAG
[root@lazyr myLogs]
Usage: docker push [OPTIONS] NAME[:TAG]
Push an image or a repository to a registry
Options:
--disable-content-trust Skip image signing (default true)
push的镜像名格式需要符合DockerHub的规范
-
发布镜像到DockerHub
-
登陆DockerHub账号
[root@lazyr myLogs]
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/
Login Succeeded
-
若镜像名不符合DockerHub规范,则修改镜像名
lazyr/imageName:TAG
[root@lazyr myLogs]
REPOSITORY TAG IMAGE ID CREATED SIZE
mytomcat 1.0 a0596a8007d9 49 minutes ago 694MB
[root@lazyr myLogs]
[root@lazyr myLogs]
[root@lazyr myLogs]
REPOSITORY TAG IMAGE ID CREATED SIZE
lazyr/mytomcat 1.0 a0596a8007d9 53 minutes ago 694MB
mytomcat 1.0 a0596a8007d9 53 minutes ago
-
上传镜像到DockerHub
[root@lazyr myLogs]
The push refers to repository [docker.io/lazyr/mytomcat]
f515b87da940: Pushed
f581e826f5e0: Pushed
93dc96f5b9d7: Pushed
81a6da5c65ed: Pushed
291f6e44771a: Pushed
1.0: digest: sha256:88710d7781ae9fe1cdb4f2339c2331a682efd7eb2d40d44d27e81253458b4d27 size: 1373
-
查看仓库
-
发布镜像到阿里云容器服务
-
登陆阿里云网站,进入控制台找到容器镜像服务
-
创建命名空间
-
点击进入仓库,按照步骤走
-
登陆账号
[root@lazyr ~]
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/
Login Succeeded
-
若镜像名不符合阿里云规范,则修改镜像名
registry.cn-shenzhen.aliyuncs.com/lazy-r/imageName:TAG
[root@lazyr ~]
REPOSITORY TAG IMAGE ID CREATED SIZE 694MB
mytomcat 1.0 a0596a8007d9 2 hours ago 694MB
[root@lazyr ~]
[root@lazyr ~]
REPOSITORY TAG IMAGE ID CREATED SIZE
mytomcat 1.0 a0596a8007d9 2 hours ago 694MB
registry.cn-shenzhen.aliyuncs.com/lazy-r/mytomcat 1.0 a0596a8007d9 2 hours ago 694MB
-
上传到阿里云
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FuPqTCZJ-1600620014568)(Docker学习/image-20200912200816348.png)]
-
小结
-
Docker运行结构图[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EgwuqSVl-1600620014569)(F:\work\myBlogs\study\Docker学习{6D6EC969-A60A-F9FC-6AA9-2024066833DF}.jpg)]
-
Docker指令结构图[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XY75mVQj-1600620014570)(F:\work\myBlogs\study\Docker学习\timg-1599736715771.jfif)]
-
Dockerfile运行流程图
十二、Docker网络
-
前提准备
-
清空所有镜像、容器,方便理解;
-
服务器网卡
[root@lazyr myLogs]
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
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
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:16:3e:0a:7c:79 brd ff:ff:ff:ff:ff:ff
inet 172.17.54.90/20 brd 172.17.63.255 scope global dynamic eth0
valid_lft 314658825sec preferred_lft 314658825sec
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN
link/ether 02:42:fe:6d:7e:ba brd ff:ff:ff:ff:ff:ff
inet 172.18.0.1/16 brd 172.18.255.255 scope global docker0
valid_lft forever preferred_lft forever
-
测试
-
创建并运行Tomcat容器
[root@lazyr myLogs]
Unable to find image 'tomcat:latest' locally
latest: Pulling from library/tomcat
57df1a1f1ad8: Pull complete
71e126169501: Pull complete
1af28a55c3f3: Pull complete
03f1c9932170: Pull complete
881ad7aafb13: Pull complete
9c0ffd4062f3: Pull complete
bd62e479351a: Pull complete
48ee8bc64dbc: Pull complete
6daad3485ea7: Pull complete
bc07a0199230: Pull complete
Digest: sha256:c2b033c9cee06d6a3eb5a4d082935bbb8afee7478e97dcd6bc452bb6ab28da4b
Status: Downloaded newer image for tomcat:latest
baadcb945097bf3a0983618ccb9865bd7cbfbe0df9d048730a0bf6af8b11b180
-
查看容器的内部网卡
[root@lazyr myLogs]
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
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
104: eth0@if105: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.18.0.2/16 brd 172.18.255.255 scope global eth0
valid_lft forever preferred_lft forever
-
尝试ping容器内部分配的ip
[root@lazyr myLogs]
PING 172.18.0.2 (172.18.0.2) 56(84) bytes of data.
64 bytes from 172.18.0.2: icmp_seq=1 ttl=64 time=0.097 ms
64 bytes from 172.18.0.2: icmp_seq=2 ttl=64 time=0.068 ms
64 bytes from 172.18.0.2: icmp_seq=3 ttl=64 time=0.068 ms
-
再次测试服务器网卡
[root@lazyr myLogs]
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
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
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:16:3e:0a:7c:79 brd ff:ff:ff:ff:ff:ff
inet 172.17.54.90/20 brd 172.17.63.255 scope global dynamic eth0
valid_lft 314657936sec preferred_lft 314657936sec
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether 02:42:fe:6d:7e:ba brd ff:ff:ff:ff:ff:ff
inet 172.18.0.1/16 brd 172.18.255.255 scope global docker0
valid_lft forever preferred_lft forever
105: vethf83b738@if104: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP
link/ether 06:97:86:d5:29:c3 brd ff:ff:ff:ff:ff:ff link-netnsid 0
-
刚才新建一个容器,多出的网卡
104: eth0@if105: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.18.0.2/16 brd 172.18.255.255 scope global eth0
valid_lft forever preferred_lft forever
105: vethf83b738@if104: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP
link/ether 06:97:86:d5:29:c3 brd ff:ff:ff:ff:ff:ff link-netnsid 0
-
再新建一个容器,多出的网卡
106: eth0@if107: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:12:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.18.0.3/16 brd 172.18.255.255 scope global eth0
valid_lft forever preferred_lft forever
107: vethf502f74@if106: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP
link/ether 22:c1:6b:9d:8e:20 brd ff:ff:ff:ff:ff:ff link-netnsid 1
-
原理
十三、容器互联
-
场景
- 在一个微服务里,数据库的url=ip,若想不重启项目就更换数据库ip,如何解决?
- 在SpringCloud里的feign采用的是调用微服务名的方式来解决更换微服务ip的问题;
- 根据SpringCloud的思路,我们可以采用容器名的方式访问。
-
–link方式
-
–link指令就是为了解决容器互联问题而产生的(目前不推荐使用
)
-
使用
[root@lazyr ~]
ping: tomcatTest2: Name or service not known
[root@lazyr ~]
1801ae965edf5df349674c15a074b7227fc498a4d0eb6166ab493a94b18de83a
[root@lazyr ~]
PING tomcatTest2 (172.18.0.3) 56(84) bytes of data.
64 bytes from tomcatTest2 (172.18.0.3): icmp_seq=1 ttl=64 time=0.124 ms
64 bytes from tomcatTest2 (172.18.0.3): icmp_seq=2 ttl=64 time=0.085 ms
[root@lazyr ~]
ping: tomcatTest3: Name or service not known
-
查看Docker网络详情
[root@lazyr ~]
NETWORK ID NAME DRIVER SCOPE
7bedd0e5ee27 bridge bridge local
c00558472d7d host host local
2134ca138baf none null local
[root@lazyr ~]
[
{
"Name": "bridge",
"Id": "7bedd0e5ee271027f2d6a2d9a6d448187d6a6c8656217271085a207df0ac71ba",
"Created": "2020-09-10T15:00:36.244407138+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"1801ae965edf5df349674c15a074b7227fc498a4d0eb6166ab493a94b18de83a": {
"Name": "tomcatTest3",
"EndpointID": "c0dda48528c8823a689b07e152ab6e582b1958e0b2a9b311ab3a4c38c229a6a8",
"MacAddress": "02:42:ac:12:00:04",
"IPv4Address": "172.18.0.4/16",
"IPv6Address": ""
},
"2f7e07c4f66c2a4d1859680adcc7968e7ac9798c3395ff7e6badac7b272a806d": {
"Name": "tomcatTest2",
"EndpointID": "b12fe98acbe4c651ef0d9293f223f332ec9002caff35b69be690454b97893a08",
"MacAddress": "02:42:ac:12:00:03",
"IPv4Address": "172.18.0.3/16",
"IPv6Address": ""
},
"baadcb945097bf3a0983618ccb9865bd7cbfbe0df9d048730a0bf6af8b11b180": {
"Name": "tomcatTest",
"EndpointID": "8d6e400bb34c9ef1675a71c635979d3273af4cd43d1cf3f6b6d585747337cc80",
"MacAddress": "02:42:ac:12:00:02",
"IPv4Address": "172.18.0.2/16",
"IPv6Address": ""
}
},
}
]
-
–link的原理
[root@lazyr ~]
[
"Links": [
"/tomcatTest2:/tomcatTest3/tomcatTest2"
],
]
[root@lazyr ~]
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.18.0.3 tomcatTest2 2f7e07c4f66c
172.18.0.4 1801ae965edf
-
自定义网络
-
创建容器指令
docker run --net bridge imageName/imageId
指令参数 | 说明 |
---|
–net bridge | 以桥接模式创建容器 |
–net none | 以none模式创建容器 |
–net host | 以host模式创建容器 |
–net container | 以container模式创建容器 |
-
创建网络
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 netName
指令参数 | 说明 |
---|
–driver bridge | 网络模式(默认为bridge) |
–subnet 192.168.0.0/16 | 子网掩码 |
–gateway 192.168.0.1 | 网关 |
-
使用
[root@lazyr ~]
966f6bc9c42999faaa582dbdc916a08433d4a26a3adda082aa1d4a3d1c5fd3b1
[root@lazyr ~]
NETWORK ID NAME DRIVER SCOPE
7bedd0e5ee27 bridge bridge local
c00558472d7d host host local
88a7b532a92c myNet bridge local
2134ca138baf none null local
[root@lazyr ~]
bc2c094aaeab31987962457e1ccbdbe8d4a1e1cc047816afd6978e37a46d77a4
[root@lazyr ~]
16f5db1d26dd975dd080b80a20eb7f5d4328cb8a2726e7a2cb2318adce0cad92
[root@lazyr ~]
[
{
"Name": "myNet",
"Id": "88a7b532a92c4ccdb76cb4d9e509268e3ce5202b4dc05ddbff38db2a4da44430",
"Created": "2020-09-13T16:38:34.30615316+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "192.168.0.0/16",
"Gateway": "192.168.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"16f5db1d26dd975dd080b80a20eb7f5d4328cb8a2726e7a2cb2318adce0cad92": {
"Name": "tomcat-myNet-02",
"EndpointID": "b6e3136ca3656835f72c165dbf6bb453d24c9934838f52e6ee56d2829c53d3e2",
"MacAddress": "02:42:c0:a8:00:03",
"IPv4Address": "192.168.0.3/16",
"IPv6Address": ""
},
"bc2c094aaeab31987962457e1ccbdbe8d4a1e1cc047816afd6978e37a46d77a4": {
"Name": "tomcat-myNet-01",
"EndpointID": "bf01e6a73cf2eed61f1f98462152f0d55098d1ec36c1503914aa558fa8eff141",
"MacAddress": "02:42:c0:a8:00:02",
"IPv4Address": "192.168.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
[root@lazyr ~]
PING tomcat-myNet-02 (192.168.0.3) 56(84) bytes of data.
64 bytes from tomcat-myNet-02.myNet (192.168.0.3): icmp_seq=1 ttl=64 time=0.090 ms
-
自定义网络优点
- 自定义的网络功能完备,网络内的容器可以通过容器名互相ping通;
- 不同的集群可以使用的网络(使用不同的子网),保证集群是安全和健康的;
-
网络联通
十四、Redis集群部署
-
介绍
-
部署
-
在Docker里创建Redis网卡
docker network create --subnet 112.38.0.0/16 --gateway 112.38.0.1 redisNet
[root@lazyr ~]
cdfb7f91bbcf1029ba783af6b470237fb54cddbc6db4b19b2534e5f964ba1719
[root@lazyr ~]
NETWORK ID NAME DRIVER SCOPE
7bedd0e5ee27 bridge bridge local
c00558472d7d host host local
2134ca138baf none null local
cdfb7f91bbcf redisNet bridge local
-
通过脚本创建六个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 50000
cluster-announce-ip 112.38.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done
[root@lazyr /]
> 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 50000
> cluster-announce-ip 112.38.0.1${port}
> cluster-announce-port 6379
> cluster-announce-bus-port 16379
> appendonly yes
> EOF
> done
[root@lazyr /]
[root@lazyr mydata]
redis
[root@lazyr mydata]
[root@lazyr redis]
node-1 node-2 node-3 node-4 node-5 node-6
-
创建并运行Redis容器
for port in $(seq 1 6); \
do \
docker run -d -p 334${port}:6379 -p 400${port}:16379 --name redis-${port} \
-v /mydata/redis/node-${port}/data:/data \
-v /mydata/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf \
--net redisNet --ip 112.38.0.1${port} \
redis:5.0.9-alpine3.11 \
redis-server /etc/redis/redis.conf
done
[root@lazyr conf]
> do \
> docker run -d -p 334${port}:6379 -p 400${port}:16379 --name redis-${port} \
> -v /mydata/redis/node-${port}/data:/data \
> -v /mydata/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf \
> --net redisNet --ip 112.38.0.1${port} \
> redis:5.0.9-alpine3.11 \
> redis-server /etc/redis/redis.conf
> done
cde1a865fb48a342e0360e39026d5b93313716222362d260cce2dc37b927f2af
48e0f64da664ed64cade01e6a771389f53f3dc04b5025faaa4dbaf82476258b1
66c28da514906fd3ed48880386e525fd49016fb66c4d50a80691fe65a204e76a
c6c9da54b19a466e6e5dc6cb8c25f5d80d27ac62750c084b47e46ddea0db2d1a
5890f8fadc77b4dfa182a51d8709f949c6cac8becf584da6ffa96aaf734b5ea9
c0594438efa0c59de41f7e20a4ac437ac3df7e37a15fe78b28c30e8c90629424
[root@lazyr conf]
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c0594438efa0 redis:5.0.9-alpine3.11 "docker-entrypoint.s…" 3 seconds ago Up 2 seconds 0.0.0.0:3346->6379/tcp, 0.0.0.0:4006->16379/tcp redis-6
5890f8fadc77 redis:5.0.9-alpine3.11 "docker-entrypoint.s…" 4 seconds ago Up 2 seconds 0.0.0.0:3345->6379/tcp, 0.0.0.0:4005->16379/tcp redis-5
c6c9da54b19a redis:5.0.9-alpine3.11 "docker-entrypoint.s…" 4 seconds ago Up 3 seconds 0.0.0.0:3344->6379/tcp, 0.0.0.0:4004->16379/tcp redis-4
66c28da51490 redis:5.0.9-alpine3.11 "docker-entrypoint.s…" 5 seconds ago Up 3 seconds 0.0.0.0:3343->6379/tcp, 0.0.0.0:4003->16379/tcp redis-3
48e0f64da664 redis:5.0.9-alpine3.11 "docker-entrypoint.s…" 5 seconds ago Up 4 seconds 0.0.0.0:3342->6379/tcp, 0.0.0.0:4002->16379/tcp redis-2
cde1a865fb48 redis:5.0.9-alpine3.11 "docker-entrypoint.s…" 6 seconds ago Up 5 seconds 0.0.0.0:3341->6379/tcp, 0.0.0.0:4001->16379/tcp redis-1
-
随机进入一个容器查看详细内容
[root@lazyr /]
/data
appendonly.aof nodes.conf
-
在容器内创建集群
redis-cli --cluster create 112.38.0.11:6379 112.38.0.12:6379 112.38.0.13:6379 112.38.0.14:6379 112.38.0.15:6379 112.38.0.16:6379 --cluster-replicas 1
/data
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 112.38.0.15:6379 to 112.38.0.11:6379
Adding replica 112.38.0.16:6379 to 112.38.0.12:6379
Adding replica 112.38.0.14:6379 to 112.38.0.13:6379
M: cab9f7566ac3a65d7f3e4c813b7f9b3fff6cc4ae 112.38.0.11:6379
slots:[0-5460] (5461 slots) master
M: 97d480c1cb21cc0b3537a813877acf610111cec0 112.38.0.12:6379
slots:[5461-10922] (5462 slots) master
M: e0748630ff78bcffe0476adb76ad2689a6632cbc 112.38.0.13:6379
slots:[10923-16383] (5461 slots) master
S: b15ebc328085133637370742e8a869ee50fb09ce 112.38.0.14:6379
replicates e0748630ff78bcffe0476adb76ad2689a6632cbc
S: b36387fad1487a5f82b4e535b4936fdc1e699040 112.38.0.15:6379
replicates cab9f7566ac3a65d7f3e4c813b7f9b3fff6cc4ae
S: d168a9353f9c4d4f341eef277d84306c975158a0 112.38.0.16:6379
replicates 97d480c1cb21cc0b3537a813877acf610111cec0
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
.......
>>> Performing Cluster Check (using node 112.38.0.11:6379)
M: cab9f7566ac3a65d7f3e4c813b7f9b3fff6cc4ae 112.38.0.11:6379
slots:[0-5460] (5461 slots) master
1 additional replica(s)
M: e0748630ff78bcffe0476adb76ad2689a6632cbc 112.38.0.13:6379
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
S: d168a9353f9c4d4f341eef277d84306c975158a0 112.38.0.16:6379
slots: (0 slots) slave
replicates 97d480c1cb21cc0b3537a813877acf610111cec0
S: b36387fad1487a5f82b4e535b4936fdc1e699040 112.38.0.15:6379
slots: (0 slots) slave
replicates cab9f7566ac3a65d7f3e4c813b7f9b3fff6cc4ae
M: 97d480c1cb21cc0b3537a813877acf610111cec0 112.38.0.12:6379
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
S: b15ebc328085133637370742e8a869ee50fb09ce 112.38.0.14:6379
slots: (0 slots) slave
replicates e0748630ff78bcffe0476adb76ad2689a6632cbc
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
-
测试
/data
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:344
cluster_stats_messages_pong_sent:346
cluster_stats_messages_sent:690
cluster_stats_messages_ping_received:341
cluster_stats_messages_pong_received:344
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:690
127.0.0.1:6379> cluster nodes
e0748630ff78bcffe0476adb76ad2689a6632cbc 112.38.0.13:6379@16379 master - 0 1600000891972 3 connected 10923-16383
d168a9353f9c4d4f341eef277d84306c975158a0 112.38.0.16:6379@16379 slave 97d480c1cb21cc0b3537a813877acf610111cec0 0 1600000890970 6 connected
b36387fad1487a5f82b4e535b4936fdc1e699040 112.38.0.15:6379@16379 slave cab9f7566ac3a65d7f3e4c813b7f9b3fff6cc4ae 0 1600000890000 5 connected
97d480c1cb21cc0b3537a813877acf610111cec0 112.38.0.12:6379@16379 master - 0 1600000890000 2 connected 5461-10922
cab9f7566ac3a65d7f3e4c813b7f9b3fff6cc4ae 112.38.0.11:6379@16379 myself,master - 0 1600000890000 1 connected 0-5460
b15ebc328085133637370742e8a869ee50fb09ce 112.38.0.14:6379@16379 slave e0748630ff78bcffe0476adb76ad2689a6632cbc 0 1600000889967 4 connected
127.0.0.1:6379> set a b
-> Redirected to slot [15495] located at 112.38.0.13:6379
OK
十五、SpringBoot微服务部署
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)