elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例
问题
es 暴漏的端口多
es 耗内存
es 数据一般要放入到安全目录-
下载启动镜像
docker run -d --name elasticsearch --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2
卡的朋友 docker stats 查看cpu状态
docker 安装可视化工具 portainer
docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock --restart=always --name prtainer portainer/portainer
`
```bash
docker run -d -p 8088:9000 \
--restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
docker commit :从容器创建一个新的镜像。
语法
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
OPTIONS说明:
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。
实例
将容器a404c6c174a2 保存为新的镜像,并添加提交人信息和说明信息。
runoob@runoob:~$ docker commit -a “runoob.com” -m “my apache” a404c6c174a2 mymysql:v1
sha256:37af1236adef1544e8886be23010b66577647a40bc02c0885a6600b33ee28057
runoob@runoob:~$ docker images mymysql:v1
REPOSITORY TAG IMAGE ID CREATED SIZE
mymysql v1 37af1236adef 15 seconds ago 329 MB
精髓
容器数据卷 dockerFile Docker网络
企业实战
docker Compose
docker Swarm
docker Jenkins
容器数据卷
数据?如果数据在容器中。容器删除,数据丢失:数据可以持久化!
容器之间可以有一个数据共享技术。
目录挂载,容器目录挂载在Linux上。
容器间可以共享
使用数据卷
方式一:直接使用命令挂载 -v
docker run -it -v /home/kaka/test:/home centos /bin/bash
dockerfile
构建镜像文件
编写一个dockerfile文件
docker build 构建镜像
docker run
docker push 发布镜像(阿里云仓库)
dockerFile 构建过程
1.每个保留关键字必须是大写字母
2.执行从上到下执行
3.#表示注释
4.每一个指令都会创建一个镜像,并提交。
dockerfile 面向开发的,发布dockerfile文件。
docker镜像成为企业交付的标准
dockerfile:构建文件,定义了一切的步骤。
Docker images:通过dockerfile构建成的镜像,最终发布和运行的产品。
docker 容器 容器:镜像运行起来提供服务。
dockerfile指令
FROM ##基础镜像,一切从这里开始
MAINTAINER ##告诉别人,谁写的
RUN ##启动
ADD ##
CMD ##指定容器运行时候要运行的命令
ENTRYPOINT ##指定容器启动时候要运行的命令,可以追加命令
ONBUILD ##当构建一个被继承dockerfile 这个时候就会追加ONBULID命名
COPY ##类似add,将文件拷贝到镜像
ENV ##构建时候设置环境变量
实战
docker hub 中 基础镜像 FROM scratch 配置需要的软件进行构建
创建自己的centos
1.编写配置文件
FROM centos
MAINTAIER yangxizheng<1183293240@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yun -y install vim
RUN yun -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "----end----"
CMD /bin/bash
2.构建文件
docker build -f mydockerfile -t yangcentos:0.1 .
Successfully built 38457135457d
Successfully tagged yangcentos:0.1
3测试运行
dockers history 查看镜像历史。可以研究镜像这么做?
CMD ENTRYPOINT 命令
cmd测试
FROM centos
CMD ["ls ","-a"]
CMD 命名测试通过
root@ubuntu:/home/kaka/dockerfile# vim docker_file_cmd
root@ubuntu:/home/kaka/dockerfile# docker build -f docker_file_cmd -t cmd_test .
Sending build context to Docker daemon 3.072kB
Step 1/2 : FROM centos
—> 300e315adb2f
Step 2/2 : CMD [“ls”,"-a"]
—> Running in b4088b4991a0
Removing intermediate container b4088b4991a0
—> 828f8e41eefc
Successfully built 828f8e41eefc
Successfully tagged cmd_test:latest
root@ubuntu:/home/kaka/dockerfile# docker run 828f8e41eefc
#想追加一个命名 l ls all
ENTRYPOINT 追加命名,是直接追加在我们的ENTRYPOINT命名的后面的
root@ubuntu:/home/kaka/dockerfile# docker run 37aef73ee2da -l
total 56
drwxr-xr-x 1 root root 4096 Jan 15 08:27 .
drwxr-xr-x 1 root root 4096 Jan 15 08:27 …
-rwxr-xr-x 1 root root 0 Jan 15 08:27 .dockerenv
lrwxrwxrwx 1 root root 7 Nov 3 15:22 bin -> usr/bin
drwxr-xr-x 5 root root 340 Jan 15 08:27 dev
drwxr-xr-x 1 root root 4096 Jan 15 08:27 etc
drwxr-xr-x 2 root root 4096 Nov 3 15:22 home
lrwxrwxrwx 1 root root 7 Nov 3 15:22 lib -> usr/lib
lrwxrwxrwx 1 root root 9 Nov 3 15:22 lib64 -> usr/lib64
drwx------ 2 root root 4096 Dec 4 17:37 lost+found
drwxr-xr-x 2 root root 4096 Nov 3 15:22 media
drwxr-xr-x 2 root root 4096 Nov 3 15:22 mnt
drwxr-xr-x 2 root root 4096 Nov 3 15:22 opt
dr-xr-xr-x 416 root root 0 Jan 15 08:27 proc
dr-xr-x— 2 root root 4096 Dec 4 17:37 root
drwxr-xr-x 11 root root 4096 Dec 4 17:37 run
lrwxrwxrwx 1 root root 8 Nov 3 15:22 sbin -> usr/sbin
drwxr-xr-x 2 root root 4096 Nov 3 15:22 srv
dr-xr-xr-x 13 root root 0 Jan 15 08:27 sys
drwxrwxrwt 7 root root 4096 Dec 4 17:37 tmp
drwxr-xr-x 12 root root 4096 Dec 4 17:37 usr
drwxr-xr-x 20 root root 4096 Dec 4 17:37 var
root@ubuntu:/home/kaka/dockerfile#
dockerfile 多测试!!
dockerfile 实战Tomcat镜像
1.准备镜像文件 tomcat压缩包,jdk压缩包!
2.编写dockerfile文件
发布镜像
root@ubuntu:/home/kaka/dockerfile# docker login --help
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@ubuntu:/home/kaka/dockerfile#
登录docker
root@ubuntu:/home/kaka/dockerfile# docker login -u yangxizheng
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/#credentials-store
Login Succeeded
发送到仓库
root@ubuntu:/home/kaka/dockerfile# docker push yangcentos:0.1
The push refers to repository [docker.io/library/yangcentos]
发布带版本
root@ubuntu:/home/kaka/dockerfile# docker tag 38457135457d yangxizheng/yangcentos:1.0
root@ubuntu:/home/kaka/dockerfile# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
yangcentos 0.1 38457135457d 6 hours ago 291MB
yangxizheng/yangcentos 1.0 38457135457d 6 hours ago 291MB
nginx latest f6d0b4767a6c 3 days ago 133MB
mysql latest d4c3cafb11d5 3 days ago 545MB
centos latest 300e315adb2f 5 weeks ago 209MB
portainer/portainer latest 62771b0b9b09 5 months ago 79.1MB
root@ubuntu:/home/kaka/dockerfile# docker push yangxizheng/yangcentos:1.0
The push refers to repository [docker.io/yangxizheng/yangcentos]
7a9b78a4a18c: Preparing
发布到阿里云镜像服务
docker网络 (容器编排 集群部署)
清空所有容器
docker rm -f $(docker ps -aq) 清除正在运行的容器
docker rmi -f $(docker images -aq) 清除所有容器
docker stop $(docker ps -aq)
docker 网络测试
问题docker是如何处理容器网络访问?
root@ubuntu:/home/kaka# docker run -d -P --name tomcat01 tomcat
查看容器的内部网络地址 ip addr
docker exec -it tomcat01 ip addr
发现eth0@if262ip地址,docker分配的
linux能ping通吗?
linux能ping通docker容器
每启动一个docker容器都会分配给容器一个ip地址,安装了docker,就会有一个网卡docker0
桥接模式,使用技术evth-pair技术!
我们发现这些容器带来的网卡,都是一对一对的。
evth-pair 就是一对的虚拟设备接口,他们都是成对出现,一段挂着协议,一段彼此连接
技术充当桥梁。连接各种虚拟网络设备
结论 容器和容器之间可以通信的
结论: tomcat01和tomcat02是共用一个路由,docker0
所有的容器不指定网络的情况下,都是docker0路由,docker会给我们容器分配一个默认的可用的ip
255.255.0.1/16 255*255 -2
255.255.0.1/24 255 -2
小结 桥接技术
docker中的所有网络接口都是虚拟的,虚拟的转发效率高。
删除网桥都没有了
思考场景
编写一个微服务,database usl = ip;项目不重启,数据库ip换掉,我们希望可以处理这个名字进行访问容器?
–link技术
root@ubuntu:/home/kaka# docker exec -it tomcat03 ping tomcat04
ping: tomcat04: Temporary failure in name resolution
root@ubuntu:/home/kaka# docker run -d -P --name tomcat06 --link tomcat03 tomcat
9d9d20c7bccd907a2cd63834378993959dfa3d8971e9051550e06eaf81b87ea8
root@ubuntu:/home/kaka# docker exec -it tomcat03 ping tomcat06
通过–link 可以解决网络连通问题,反向不能ping通
docker network inspect 0eeffa9de6e8
探究具体的网络
查看hosts配置
docker exec -it tomcat03 cat /etc/hosts
我们现在玩docker已经不建议使用 --link
自定义网络!不适应docker0!
docker0问题比较局限
不支持容器名连接访问
自定义网络
容器互联
root@ubuntu:/home/kaka# docker network --help
Usage: docker network COMMAND
Manage networks
Commands:
connect Connect a container to a network
create Create a network
disconnect Disconnect a container from a network
inspect Display detailed information on one or more networks
ls List networks
prune Remove all unused networks
rm Remove one or more networks
Run 'docker network COMMAND --help' for more information on a command.
网络模式
bridge :桥接 dockers搭桥 (自己也使用)
none: 不配置网络
host: 和宿主机共享网络
container: 容器网络连通!局限
测试
# 我们之前直接启动命令 --net bridge 这个就是我们的docker01
dcoker run -d -P --name tomcat01 --net bridge tomcat
dcoker run -d -P --name tomcat01 tomcat
#更改网络docker0特点,默认不能访问 --link可以打通连接
## 我们自定义网络
root@ubuntu:/home/kaka# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
c9e1142e9ecde42f5525655e43ab4e7572972236ca72002f6d1b307744a4eaa0
root@ubuntu:/home/kaka# docker network ls
NETWORK ID NAME DRIVER SCOPE
0eeffa9de6e8 bridge bridge local
c26985c7d4ec host host local
c9e1142e9ecd mynet bridge local
2cd470f8f4b3 none null local
我们的网络就创建好了
root@ubuntu:/home/kaka# docker run -d -P --name tomcat-net-01 --net mynet tomcat
现在不使用 --link 也可以ping名字啦
我们自定义的网络docker都已经帮我们维护好电对应的关系啦!
好处!!
redis-不同的集群使用不同的网络,保证集群是安全和健康的
mysql- 不同的集群使用不同的网络,保证集群是安全和健康的
网络连通
测试打通网络
root@ubuntu:/home/kaka# docker network connect mynet tomcat01
一个容器,两个ip
类似阿里云服务器,公网ip 私网ip
root@ubuntu:/home/kaka# docker exec -it tomcat01 ping tomcat-net-01
/home/kaka# docker exec -it tomcat02 ping tomcat-net-01
结论:假设要跨网咯操作别人,就需要使用 docker network connect连通!