首页
统计
关于
Search
1
Sealos3.0离线部署K8s集群
1,073 阅读
2
类的加载
737 阅读
3
Spring Cloud OAuth2.0
725 阅读
4
SpringBoot自动装配原理
689 阅读
5
集合不安全问题
582 阅读
笔记
Java
多线程
注解和反射
JVM
JUC
设计模式
Mybatis
Spring
SpringMVC
SpringBoot
MyBatis-Plus
Elastic Search
微服务
Dubbo
Zookeeper
SpringCloud
Nacos
Sentinel
数据库
MySQL
Oracle
PostgreSQL
Redis
MongoDB
工作流
Activiti7
Camunda
消息队列
RabbitMQ
前端
HTML5
CSS
CSS3
JavaScript
jQuery
Vue2
Vue3
Linux
容器
Docker
Kubernetes
Python
登录
Search
标签搜索
Java
CSS
mysql
RabbitMQ
JavaScript
Redis
JVM
Mybatis-Plus
Camunda
多线程
CSS3
Python
Spring Cloud
注解和反射
Activiti
工作流
SpringBoot
Mybatis
Spring
html5
蘇阿細
累计撰写
388
篇文章
累计收到
4
条评论
首页
栏目
笔记
Java
多线程
注解和反射
JVM
JUC
设计模式
Mybatis
Spring
SpringMVC
SpringBoot
MyBatis-Plus
Elastic Search
微服务
Dubbo
Zookeeper
SpringCloud
Nacos
Sentinel
数据库
MySQL
Oracle
PostgreSQL
Redis
MongoDB
工作流
Activiti7
Camunda
消息队列
RabbitMQ
前端
HTML5
CSS
CSS3
JavaScript
jQuery
Vue2
Vue3
Linux
容器
Docker
Kubernetes
Python
页面
统计
关于
搜索到
9
篇与
的结果
2021-04-04
Docker Swarm
Docker Swarm初始化节点:docker swarm init加入节点:docker swarm join# 获取令牌 docker swarm join-token manager # leader docker swarm join-token worker # worker节点信息:Raft协议保证大多数节点存活才可使用,只要>1就可以,集群至少大于3台测试(双主双从):1.docker-1宕机,另一个主节点也不可用2.docker swarm leave 节点离开集群3.集群中的worker节点无法使用manager命令,管理工作一律由manager主节点执行注:至少保证1台管理节点存活docker service --help灰度发布(金丝雀发布)docker run # 容器启动,不具备扩缩容功能 docker service # 以服务的形式发布,可以扩缩容,滚动更新当单个Nginx服务负载较大时,需增加3个服务docker service update --replicas 3 mynginx==只要是一个服务,在集群中的任意一个节点都可以访问,服务可以由多个副本动态扩缩容来实现高可用==移除服务:docker service rm [服务名]小结Swarm:集群的管理和编号Node:docker节点,多个节点组成一个网络集群(分为管理和工作者)Service:服务,可以在管理节点或工作节点运行(compose的核心)Task:容器中的命令(细节任务)service运行模式--mode string # default "replicated" 默认运行于副本节点 docker service create --mode replicated --name test01 centos:7.6 # 运行在副本(默认) docker service create --mode global --name test01 centos:7.6 # 全局节点运行网络模式 PublishMode: ingressSwarmOverlayingress:Overlay的特殊模式,负载均衡(IPVS VIP)
2021年04月04日
120 阅读
0 评论
0 点赞
2021-04-04
Docker Compose
定义:Docker Compose是一个用于定义和运行多容器Docker的应用程序工具安装:# 1.下载 # 官方链接(速度较慢) curl -L $(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep "browser_download_url" | grep -i "$(uname -s)-$(uname -m)" | grep -v ".sha" | cut -d '"' -f 4) -o /usr/local/bin/docker-compose # 国内链接 curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose # 2.授权 sudo chmod +x /usr/local/bin/docker-compose # 3.安装 sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose # 4.安装成功后--version查看版本 docker-compose --versionpython应用——计数器1.应用app.py2.Dockerfile 打包镜像3.docker-compose.yml(定义整个服务,需要的环境)4.docker-compose up启动项目yml规则# 3层 version: '' # 版本 service: # 服务 服务1: web # 服务配置 images build network ...... 服务2: redis ...... 服务3:database ...... # 其他配置 volumes: networks: configs:
2021年04月04日
243 阅读
0 评论
0 点赞
2021-03-25
Docker网络
1.Docker0# Docker如何处理容器访问? [root@VM-0-14-centos /]# docker run -d -P tomcat01 tomcat # 容器启动时,docker会分配eth0,该分配的地址能ping通 [root@VM-0-14-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 12: eth0@if13: <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 # linux可以ping通容器内部 [root@VM-0-14-centos /]# ping 172.17.0.2 PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data. 64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.060 ms 64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.033 ms 64 bytes from 172.17.0.2: icmp_seq=3 ttl=64 time=0.059 ms 原理 每启动一个docker容器,docker就会自动给容器分配一个ip,安装docker的时候,会产生一个docker0网卡,使用桥接模式,采用evth-pair技术evth-pair:虚拟设备接口,成对出现,一段连接协议,一段彼此相连,因此容器之间也可以互相ping通网络模型:图片来源:狂神说Java结论:容器之间在没有指定网络的情况下,都是通过docker0来进行路由通信,它会给每一个容器分配一个ip2.--link# 容器之间无法ping通 [root@VM-0-14-centos ~]# docker exec -it tomcat01 ping tomcat02 ping: tomcat02: Name or service not known # 通过--link可以解决容器间网络连通的问题 [root@VM-0-14-centos ~]# docker run -d -P --name tomcat03 --link tomcat02 tomcat bffb39894b46d3a3ace237eac4d5eb0163b4233458c306f8e6172856516a1617 [root@VM-0-14-centos ~]# docker exec -it tomcat03 ping tomcat02 PING tomcat02 (172.17.0.3) 56(84) bytes of data. 64 bytes from tomcat02 (172.17.0.3): icmp_seq=1 ttl=64 time=0.108 ms 64 bytes from tomcat02 (172.17.0.3): icmp_seq=2 ttl=64 time=0.065 ms 64 bytes from tomcat02 (172.17.0.3): icmp_seq=3 ttl=64 time=0.066 ms 64 bytes from tomcat02 (172.17.0.3): icmp_seq=4 ttl=64 time=0.069 ms 原理探究# 查看tomcat03的hosts配置文件 [root@VM-0-14-centos ~]# docker exec -it tomcat03 cat /etc/hosts 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.17.0.3 tomcat02 d207c5f1abfe # 通过--link命令直接绑定了tomcat02的地址 172.17.0.4 bffb39894b46 注:现阶段的docker不再推荐使用--link3.自定义网络# 查看docker网络 [root@VM-0-14-centos ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 897e6dc978cd bridge bridge local a7455f4daeeb host host local 3600da2c2a04 none null local 网络模式:bridge:桥接(docker默认)none:不配置网络host:和宿主机共享网络container:容器网络连通(不推荐)# 之前的启动命令默认包含了 --net bridge 命令(也就是docker0) run -d -P --name tomcat01 --net bridge tomcat# 自定义一个mynet # --driver bridge # --subnet 192.168.0.0/16 192.168.0.2~192.168.255.255 # --gateway 192.168.0.1 [root@VM-0-14-centos ~]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet c0e45563fdc70e8bd9ed21405be5b13e9552f6c08347ea51f1fb16d82d40fb5c [root@VM-0-14-centos ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 897e6dc978cd bridge bridge local a7455f4daeeb host host local c0e45563fdc7 mynet bridge local 3600da2c2a04 none null local 自定义 mynet 测试# 启动两个tomcat容器,并指定好我们自定义的mynet [root@VM-0-14-centos ~]# docker run -d -P --name tomcat-net-01 --net mynet tomcat 3703838b344e6390caa1a519365be204db614bf6049a08ef20c6f2b9a312fabf [root@VM-0-14-centos ~]# docker run -d -P --name tomcat-net-02 --net mynet tomcat 7750aa78a0cba0901e7ab7f0ab424900a397a9e0b1be184bf7859a6cbc2d7938 查看网络信息:Ping测试:# 直接ping容器名或者ip,都可以ping通 [root@VM-0-14-centos ~]# docker exec -it tomcat-net-01 ping tomcat-net-02 PING tomcat-net-02 (192.168.0.3) 56(84) bytes of data. 64 bytes from tomcat-net-02.mynet (192.168.0.3): icmp_seq=1 ttl=64 time=0.097 ms 64 bytes from tomcat-net-02.mynet (192.168.0.3): icmp_seq=2 ttl=64 time=0.066 ms 64 bytes from tomcat-net-02.mynet (192.168.0.3): icmp_seq=3 ttl=64 time=0.067 ms ^C --- tomcat-net-02 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2ms rtt min/avg/max/mdev = 0.066/0.076/0.097/0.017 ms [root@VM-0-14-centos ~]# docker exec -it tomcat-net-01 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.076 ms 64 bytes from 192.168.0.3: icmp_seq=2 ttl=64 time=0.071 ms 64 bytes from 192.168.0.3: icmp_seq=3 ttl=64 time=0.066 ms 64 bytes from 192.168.0.3: icmp_seq=4 ttl=64 time=0.075 ms ^C --- 192.168.0.3 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 1002ms rtt min/avg/max/mdev = 0.066/0.072/0.076/0.004 ms [root@VM-0-14-centos ~]# docker帮用户自动维护好了自定义网络之间的对应关系,而默认的docker0却没有,所以推荐使用自定义网络,使不同的集群使用不同的网络,以保证集群的安全和健康4.网络连通使用 docker network connect [OPTIONS] NETWORK CONTAINER命令测试打通docker0下的 tomcat01 到 mynet# 执行connect命令,并查看mynet的信息 [root@VM-0-14-centos ~]# docker network connect mynet tomcat01 [root@VM-0-14-centos ~]# docker network inspect mynet# tomcat01 ping mynet下的tomcat-net-01 测试 [root@VM-0-14-centos ~]# docker exec -it tomcat01 ping tomcat-net-01 PING tomcat-net-01 (192.168.0.2) 56(84) bytes of data. 64 bytes from tomcat-net-01.mynet (192.168.0.2): icmp_seq=1 ttl=64 time=0.065 ms 64 bytes from tomcat-net-01.mynet (192.168.0.2): icmp_seq=2 ttl=64 time=0.069 ms 64 bytes from tomcat-net-01.mynet (192.168.0.2): icmp_seq=3 ttl=64 time=0.064 ms ^C --- tomcat-net-01 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 0.064/0.066/0.069/0.002 ms [root@VM-0-14-centos ~]# docker exec -it tomcat01 ping tomcat-net-02 PING tomcat-net-02 (192.168.0.3) 56(84) bytes of data. 64 bytes from tomcat-net-02.mynet (192.168.0.3): icmp_seq=1 ttl=64 time=0.066 ms 64 bytes from tomcat-net-02.mynet (192.168.0.3): icmp_seq=2 ttl=64 time=0.067 ms 64 bytes from tomcat-net-02.mynet (192.168.0.3): icmp_seq=3 ttl=64 time=0.069 ms 64 bytes from tomcat-net-02.mynet (192.168.0.3): icmp_seq=4 ttl=64 time=0.068 ms ^C --- tomcat-net-02 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3ms rtt min/avg/max/mdev = 0.066/0.067/0.069/0.008 ms
2021年03月25日
90 阅读
0 评论
0 点赞
2021-03-24
Dockerfile
dockerfile用于构建docker镜像(命令参数脚本)1.dockerfile构建过程:# 1.指令关键字必须大写 # 2.从上往下顺序执行 # 3.# 表示注释 # 4.每一个指令都会创建一个新的镜像层,并提交DockerFile:构建文件,定义执行的内容DockerImages:通过DockerFile构建生成的镜像,即最终发布和运行的产品DockerContainer:运行镜像并提供服务2.DockerFile指令FROM # 基础镜像 MAINTAINER # 作者:姓名+邮箱 RUN # 镜像构建时需要运行的命令 ADD # 添加需要使用的文件(会自动解压) WORKDIR # 镜像工作目录 VOLUME # 挂载目录 EXPOSE # 暴露端口 CMD # 指定容器启动时要运行的命令(只有最后一个才生效,可被替代) ENTRYPOINT # 同理CMD,但可命令可以追加,类似于StringUtils.append() ONBUILD # 当构建一个被继承的dockerfile时,就会运行onbuild指令(触发指令) COPY # 类似于ADD,将需要的文件拷贝到镜像中 ENV # 构建时设置环境变量3.centos 测试实例DockerHub中大部分的镜像都是基于scratch这个基础镜像构建而来# 1.编写dockerfile配置文件 FROM centos MAINTAINER suaxi<281463547@qq.com> ENV MYPATH /usr/local WORKDIR $MYPATH RUN yum -y install vim RUN yum -y install net-tools EXPOSE 80 CMD echo $MYPATH CMD echo "-----end-----" CMD /bin/bash # 2.构建镜像 docker build -f dockerfile文件路径 -t 镜像名:[TAG] . [root@suaxi dockerfile]# docker build -f dockerfile-centos -t mycentos:1.0 . # 3.测试运行镜像构建历史:docker history 容器idCMD和ENTRYPOINT的区别测试CMD# 1.编写dockerfile文件 FROM centos CMD ["ls","-a"] # 2.构建镜像 [root@suaxi dockerfile]# docker build -f docker-cmd-test -t cmdtest . # 3.运行,执行了ls -a 命令 [root@suaxi dockerfile]# docker run 92054cb6235d . .. .dockerenv bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var # 现在项追加一个 -l 命令 ls -al [root@suaxi dockerfile]# docker run 92054cb6235d -l docker: Error response from daemon: OCI runtime create failed: container_linux.go:367: starting container process caused: exec: "-l": executable file not found in $PATH: unknown. # 在使用CMD指令的情况下,后追加的 -l 命令替换了之前的CMD["ls","-a"]命令,所以报错测试ENTRYPOINT# 1.编写dockerfile文件 FROM centos ENTRYPOINT ["ls","-a"] # 第2、3步的build和run与之前的一样 [root@suaxi dockerfile]# docker build -f docker-entrypoint-test -t entrypointtest . Sending build context to Docker daemon 4.096kB Step 1/2 : FROM centos ---> 300e315adb2f Step 2/2 : ENTRYPOINT ["ls","-a"] ---> Running in bf423c7dc041 Removing intermediate container bf423c7dc041 ---> e25354d47b76 Successfully built e25354d47b76 Successfully tagged entrypointtest:latest [root@suaxi dockerfile]# docker run e25354d47b76 . .. .dockerenv bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var # 同理追加 -l 命令 [root@suaxi dockerfile]# docker run e25354d47b76 -l total 56 drwxr-xr-x 1 root root 4096 Mar 23 14:12 . drwxr-xr-x 1 root root 4096 Mar 23 14:12 .. -rwxr-xr-x 1 root root 0 Mar 23 14:12 .dockerenv lrwxrwxrwx 1 root root 7 Nov 3 15:22 bin -> usr/bin drwxr-xr-x 5 root root 340 Mar 23 14:12 dev drwxr-xr-x 1 root root 4096 Mar 23 14:12 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 100 root root 0 Mar 23 14:12 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 Mar 22 13:57 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 # 可以发现,使用ENTRYPOINT指令,-l命令直接追加在了ls -a之后,且正确执行4.Tomcat 测试实例1.准备文件:2.编写Dockerfile文件注:Dockerfile为官方命名,build时会自动查找该文件,不需要 -f 指定文件路径FROM centos MAINTAINER suaxi<281463547@qq.com> COPY readme.txt /usr/local/readme.txt ADD jdk-8u281-linux-x64.tar.gz /usr/local/ ADD apache-tomcat-9.0.27.tar.gz /usr/local/ RUN yum -y install vim ENV MYPATH /usr/local WORKDIR $MYPATH ENV JAVA_HOME /usr/local/jdk1.8.0_281 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.27 ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.27 ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin EXPOSE 8080 CMD /usr/local/apache-tomcat-9.0.27/bin/startup.sh && tail -f /usr/local/apache-tomcat-9.0.27/logs/catalina.out 3.构建镜像[root@suaxi dockerfile]# docker build -t diycentos .4.启动镜像[root@suaxi dockerfile]# docker run -d -p 8088:8080 --name tomcattest -v /home/test/tomcat/test:/usr/local/apache-tomcat-9.0.27/webapps/test -v /home/test/build/tomcat/logs:/usr/local/apache-tomcat-9.0.27/logs diycentos 5.访问测试6.发布项目(挂载目录之后在本地编写项目即可)在挂在路径下新建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_3_0.xsd" version="3.0"> </web-app> cd ..返回上一级,新建index.html文件<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Docker</title> </head> <body> <h1>Docker Tomcat diy test</h1> </body> </html> 外网访问测试成功
2021年03月24日
158 阅读
0 评论
0 点赞
2021-03-23
容器数据卷
容器数据卷:将应用和环境打包成一个镜像目的:将容器中的目录,挂在的Linux本地(容器的持久化和同步操作、容器间数据共享)方式一:直接使用 -v 命令挂载docker run -it -v 主机目录:容器内目录 # 测试 [root@suaxi ~]# docker run -it -v /home/test:/home centos /bin/bash 从容器同步到主机:从主机同步到容器:(在容器停止后,主机修改了绑定路径下的文件,容器再次启动后,双向绑定依然生效)1.安装MySQl# 拉取镜像 [root@suaxi ~]# docker pull mysql # 官方文档命令 docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag # 启动(注意:docker启动mysql需使用-e命令配置密码) -d 后台运行 -p 端口映射 -v 数据卷挂载 -e 环境配置 --name 给容器起个别名 [root@suaxi ~]# docker run -d -p 8088:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql # 后续再使用navicat等工具连接docker中的mysql实际测试一下配置是否生效删除容器之后,同步到本地的数据依然存在,即实现数据的持久化。2.具名挂载、匿名挂载# 匿名挂载 -v 容器内的路径 -P 大写的P,随机映射端口 [root@suaxi ~]# docker run -d -P --name nginx01 -v /etc/nginx nginx # 具名挂载 -v 卷名:容器内路径 [root@suaxi ~]# docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx # 查看刚才挂载的卷 [root@suaxi ~]# docker volume inspect juming-nginx 所有docker容器内的卷,在没有指定目录的情况下都在 /var/lib/docker/volumes/xxx/通过具名挂载,可以方便的找到挂载的卷及相关数据、信息# 区分匿名/具名挂载、指定路径挂载 -v 容器内路径 # 匿名挂载 -v 卷名:容器内路径 # 具名挂载 -v /主机路径:容器内路径 # 指定路径挂载# 通过 -v 容器内路径:ro/rw 改变读写权限 ro read only # 只读 rw read/write # 可读可写 [root@suaxi ~]# docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx [root@suaxi ~]# docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx # ro 只能通过主机来操作,容器内只具有读的权限方式二:Dockerfile通过脚本生成镜像# 1.创建dockerfile文件 # 2.编写脚本,命令(都是大写)参数 FROM centos VOLUME ["volume01","volume02"] CMD echo "----create complete----" CMD /bin/bash启动并进入容器:脚本命令中挂载的目录是匿名挂载:测试挂载目录下的双向绑定是否成功:1.数据卷容器多个mysql同步数据图片来源:狂神说Java# 通过刚才的脚本依次启动3个容器 [root@suaxi docker-test-volume]# docker run -it --name docker01 b0bf8a6507a3 [root@suaxi docker-test-volume]# docker run -it --name docker02 --volumes-from docker01 b0bf8a6507a3 [root@suaxi docker-test-volume]# docker run -it --name docker03 --volumes-from docker01 b0bf8a6507a3 通过volumes实现容器间的数据共享注:即使删除父容器docker01,其他容器中的数据依然存在# 实现多个mysql间的数据同步 [root@suaxi ~]# docker run -d -p 8088:3306 -v /etc/mysql/conf.d -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql [root@suaxi ~]# docker run -d -p 8088:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-from mysql01 mysql结论:容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止。
2021年03月23日
157 阅读
0 评论
0 点赞
2021-03-21
Docker镜像
1.UnionFS 联合文件系统UnionFS(联合文件系统):是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single vritual filesystem)。Union文件系统是docker镜像的基础,镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。2.docker镜像加载原理docker镜像本质由一层一层的文件系统组成——UnionFS。bootfs(boot file system)主要包含bootloader和kernel,bootloader主要引导加载kernel,linux刚启动时会加载bootfs文件系统,在docker镜像的最底层是bootfs。这一层与Linux/Unix是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,同时系统也会卸载bootfs。rootfs(root file system)在bootfs之上,包含的就是Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件。rootfs就是各种不同的Linux发行版(Centos、Ubuntu、RealHat...)图片来源:狂神说JavaDocker镜像为什么这么小?对于一个精简的OS,rootfs可以很小,只需要包含基本的命令、工具和程序库,其底层本质上是调用主机的Kernel,本身只需提供rootfs。3.分层理解redis镜像拉取举例:# 查看镜像分层 docker image inspect 镜像名 "RootFS": { "Type": "layers", "Layers": [ "sha256:cb42413394c4059335228c137fe884ff3ab8946a014014309676c25e3ac86864", "sha256:8e14cb7841faede6e42ab797f915c329c22f3b39026f8338c4c75de26e5d4e82", "sha256:1450b8f0019c829e638ab5c1f3c2674d117517669e41dd2d0409a668e0807e96", "sha256:f927192cc30cb53065dc266f78ff12dc06651d6eb84088e82be2d98ac47d42a0", "sha256:a24a292d018421783c491bc72f6601908cb844b17427bac92f0a22f5fd809665", "sha256:3480f9cdd491225670e9899786128ffe47054b0a5d54c48f6b10623d2f340632" ] }, 所有的docker镜像都起始于一个基础镜像层,当进行修改或增加新的内容时,就会在当前镜像层之上,创建新的镜像层。例:基于Ubuntu16.04创建一个新的镜像,这就是新镜像的第一层,如果在该镜像中添加Python包,就会在基础镜像层之上创建第二个镜像层;继续添加新的软件同理,在添加额外镜像层的同时,镜像始终保持当前所有的镜像组合,例:每个镜像层包含3个文件,而总镜像包含来自两个镜像层的6个文件,下图中的例子在外部看来整个镜像只包含6个文件,这是因为最上层的文件7是文件5的迭代更新版本在这个过程中,上层镜像层中的文件覆盖了底层镜像层中的文件,这使得文件的更新版本作为一个新的镜像层添加到镜像中。docker通过存储引擎(新版使用快照方式)的方式来实现镜像层堆栈,同时保证多层镜像层对外展示为一个统一的文件系统。Linux上可用的存储引擎有AUFS、Overlay2、Device Mapper、Btrfs及ZFS。在Windows上仅支持windowsfilter一种存储引擎,该引擎基于NTFS文件系统实现分层和CoW。所有镜像层堆叠并合并,对外展示为统一的文件系统。补充docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部,也就是通常所说的容器,容器之下的都叫镜像层。图片来源:狂神说Java5.commit镜像# 命令 docker commit -m="注释信息" -a="作者" 容器id 目标镜像名:[TAG]例:给精简版的tomcat添加一点东西
2021年03月21日
97 阅读
0 评论
0 点赞
2021-03-21
Docker练习
安装Nginx#1、搜索镜像 [root@suaxi ~]# docker search nginx #2、拉取 [root@suaxi ~]# docker pull nginx #3、运行 #参数说明 -d 后台运行 --name 给容器取名字 -p 容器端口:主机端口 [root@suaxi ~]# docker run -d --name nginx01 -p 8088:80 nginx fd78aade29f79d332f6ec1becfeb7ea7400790195682784b0be576fc9e004cf6 [root@suaxi ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES fd78aade29f7 nginx "/docker-entrypoint.…" 4 seconds ago Up 3 seconds 0.0.0.0:8088->80/tcp nginx01 [root@suaxi ~]# curl localhost:80 # 进入容器 [root@suaxi ~]# docker exec -it nginx01 /bin/bash root@fd78aade29f7:/# ls bin dev docker-entrypoint.sh home lib64 mnt proc run srv tmp var boot docker-entrypoint.d etc lib media opt root sbin sys usr root@fd78aade29f7:/# whereis nginx nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx root@fd78aade29f7:/# 安装tomcat# 官方文档中建议使用的命令(测试环境下) docker run -it --rm tomcat:9.0 # 参数说明:加了 --rm 表名容器用完即删 # 常规测试 docker run -d -p 8088:8080 --name tomcat01 tomcat 注:阿里云docker镜像是默认的最小镜像,剔除了不必要的功能,只保证最小可运行的环境(阉割了部分功能)部署ElasticSearch + Kibana# 启动 --net somenetwork # 网络配置 docker run -d --name elasticsearch01 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2 # es 启动时添加内存限制 docker run -d --name elasticsearch02 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx256m" elasticsearch:7.6.2# 测试 [root@suaxi ~]# curl localhost:9200 { "name" : "d9efc9b99508", "cluster_name" : "docker-cluster", "cluster_uuid" : "Q3F3eZv_TouzzDW-_JZyTA", "version" : { "number" : "7.6.2", "build_flavor" : "default", "build_type" : "docker", "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f", "build_date" : "2020-03-26T06:34:37.794943Z", "build_snapshot" : false, "lucene_version" : "8.4.0", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" } 图片来源:狂神说Java
2021年03月21日
137 阅读
0 评论
0 点赞
2021-03-20
Docker常用基本命令
docker常用命令1.镜像命令:docker images[root@suaxi ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest d1165f221234 12 days ago 13.3kB REPOSITORY --仓库源 TAG --标签 IMAGE ID --镜像id CREATED --创建时间 SIZE --大小 -a, --all # 显示所有镜像 -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 # 只显示iddocker search 搜索[root@suaxi ~]# docker search mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a widely used, open-source relation… 10624 [OK] mariadb MariaDB Server is a high performing open sou… 3982 [OK] mysql/mysql-server Optimized MySQL Server Docker images. Create… 779 [OK] # 可选项 通过搜索来过滤 # 过滤STARS大于3000的镜像 docker search mysql --filter=STARS=3000docker pull 拉取(下载)# 下载镜像 docker pull 镜像名[:tag] [root@suaxi ~]# docker pull mysql Using default tag: latest # 不写tag,默认拉取最新版 latest: Pulling from library/mysql a076a628af6f: Pull complete # 分层下载 f6c208f3f991: Pull complete 88a9455a9165: Pull complete 406c9b8427c6: Pull complete 7c88599c0b25: Pull complete 25b5c6debdaf: Pull complete 43a5816f1617: Pull complete 1a8c919e89bf: Pull complete 9f3cf4bd1a07: Pull complete 80539cea118d: Pull complete 201b3cad54ce: Pull complete 944ba37e1c06: Pull complete Digest: sha256:feada149cb8ff54eade1336da7c1d080c4a1c7ed82b5e320efb5beebed85ae8c # 签名 Status: Downloaded newer image for mysql:latest docker.io/library/mysql:latest # 真实地址 docker pull mysql 等价于 docker.io/library/mysql:latest # 指定版本下载 [root@suaxi ~]# docker pull mysql:5.7 5.7: Pulling from library/mysql a076a628af6f: Already exists # 分层文件系统,已经存在的版本不重复下载 f6c208f3f991: Already exists 88a9455a9165: Already exists 406c9b8427c6: Already exists 7c88599c0b25: Already exists 25b5c6debdaf: Already exists 43a5816f1617: Already exists 1831ac1245f4: Pull complete 37677b8c1f79: Pull complete 27e4ac3b0f6e: Pull complete 7227baa8c445: Pull complete Digest: sha256:b3d1eff023f698cd433695c9506171f0d08a8f92a0c8063c1a4d9db9a55808df Status: Downloaded newer image for mysql:5.7 docker.io/library/mysql:5.7 docker rmi 删除镜像[root@suaxi ~]# docker rmi -f 容器id #删除指定容器id的镜像 [root@suaxi ~]# docker rmi -f 容器id 容器id 容器id #删除多个指定容器id的镜像 [root@suaxi ~]# docker rmi -f $(docker images -aq) #删除全部镜像 2.容器命令docker run [可选参数] image # 参数说明 --name="name" 容器名字 -d 后台方式运行 -it 交互方式运行,进入容器查看内容 -p 端口号 -p 8088:8088 -p ip:主机端口:容器端口 -p 主机端口:容器端口 (常用) -p 容器端口 容器端口 -p 随机指定端口测试# 启动并进入容器 [root@suaxi ~]# docker run -it centos /bin/bash [root@1c4af5d6c9fd /]# ls #查看容器中的centos(基础版本,功能不完善) bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var [root@1c4af5d6c9fd /]# exit exit [root@suaxi /]# ls # 退出容器,回到主机(完整的centos) bin boot CloudResetPwdUpdateAgent CloudrResetPwdAgent dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var 列出所有运行中的容器# 参数说明 # docker ps 列出当前正在运行的容器 -a # 当前正在运行的容器 + 历史运行的容器 -n=? # 显示最近创建的容器 -q # 只显示容器编号 [root@suaxi ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@suaxi ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1c4af5d6c9fd centos "/bin/bash" 8 minutes ago Exited (0) 5 minutes ago bold_pascal 705a3df22c9b hello-world "/hello" About an hour ago Exited (0) About an hour ago sharp_jepsen d978003a153b d1165f221234 "/hello" 22 hours ago Exited (0) 22 hours ago beautiful_engelbart 45a55574058f d1165f221234 "/hello" 27 hours ago Exited (0) 27 hours ago charming_cerf 938e1fed5677 d1165f221234 "/hello" 27 hours ago Exited (0) 27 hours ago compassionate_matsumoto [root@suaxi ~]# docker ps -a -n=1 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1c4af5d6c9fd centos "/bin/bash" 8 minutes ago Exited (0) 6 minutes ago bold_pascal [root@suaxi ~]# docker ps -aq 1c4af5d6c9fd 705a3df22c9b d978003a153b 45a55574058f 938e1fed5677 退出容器exit # 停止并退出 ctrl + P + Q # 退出,但容器不停止删除容器docker rm 容器id # 删除指定的容器(不能删除正在运行的,强制删除运行中的容器,需加docker rm -f) 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 # 强制停止3.常用其他命令后台启动容器# docker run -d 镜像名 [root@suaxi ~]# docker run -d centos注:docker容器使用后台运行,必须要有一个前台进程,如果docker发现没有运行的应用,就会自动停止;同理nginx容器启动后,发现没有提供服务,就会立刻停止查看日志docker logs -tf --tail [number] # 参数说明 -tf # 带时间戳、行数显示日志 --tail [number] # 查看几行日志 [root@suaxi ~]# docker run -d centos /bin/sh -c "while true;do echo hello;sleep 2;done" bb0ac965992f3a0d14c7198a79ada368bbb3331da7bfca88d4e235eb4482a3b5 [root@suaxi ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bb0ac965992f centos "/bin/sh -c 'while t…" 3 seconds ago Up 2 seconds nice_hermann [root@suaxi ~]# docker logs -tf --tail 5 bb0ac965992f 2021-03-20T15:15:58.658886157Z hello 2021-03-20T15:16:00.660610164Z hello 2021-03-20T15:16:02.662305052Z hello 2021-03-20T15:16:04.663980021Z hello 2021-03-20T15:16:06.666010717Z hello 查看容器中的进程信息[root@suaxi ~]# docker top bb0ac965992f UID PID PPID C STIME TTY TIME CMD root 21507 21487 0 23:15 root 21901 21507 0 23:20 查看镜像的元数据docker inspect 容器id 进入当前正在运行的容器# 方式一: docker exec -it 容器id bashshell [root@suaxi ~]# docker exec -it bb0ac965992f bin/bash [root@bb0ac965992f /]# uname -a Linux bb0ac965992f 3.10.0-1160.15.2.el7.x86_64 #1 SMP Wed Feb 3 15:06:38 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux [root@bb0ac965992f /]# uptime 15:28:08 up 3 days, 14:33, 0 users, load average: 0.00, 0.02, 0.05 # 方式二: docker attach 容器id # docker exec # 进入容器后开启一个新的终端(常用) # docker attach # 进入容器正在执行的终端,不会启动新的进程从容器中拷贝文件到主机docker cp 容器id:容器内路径 主机路径 # 启动容器 [root@suaxi ~]# docker run -it centos [root@112a084e0bd3 /]# cd /home [root@112a084e0bd3 home]# ls # 创建一个新的文件 [root@112a084e0bd3 home]# touch sunxiaochuan.txt [root@112a084e0bd3 home]# exit exit [root@suaxi ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 112a084e0bd3 centos "/bin/bash" 36 seconds ago Exited (0) 8 seconds ago sleepy_tereshkova # 拷贝文件到主机 [root@suaxi ~]# docker cp 112a084e0bd3:/home/sunxiaochuan.txt /home [root@suaxi ~]# cd /home [root@suaxi home]# ls sunxiaochuan.txt test www [root@suaxi home]# 4.docker常用命令小结attach Attach to a running container #当前shell下attach连接指定运行镜像 build Build an image from a Dockerfile #通过Dockerfile定制镜像 commit Create a new image from a container's changes #提交当前容器为新的镜像 cp Copy files/folders from a container to a HOSTDIR or to STDOUT #从容器中拷贝指定文件或者目录到宿主机中 create Create a new container #创建一个新的容器,同run 但不启动容器 diff Inspect changes on a container's filesystem #查看docker容器变化 events Get real time events from the server#从docker服务获取容器实时事件 exec Run a command in a running container#在已存在的容器上运行命令 export Export a container's filesystem as a tar archive #导出容器的内容流作为一个tar归档文件(对应import) history Show the history of an image #展示一个镜像形成历史 images List images #列出系统当前镜像 import Import the contents from a tarball to create a filesystem image #从tar包中的内容创建一个新的文件系统映像(对应export) info Display system-wide information #显示系统相关信息 inspect Return low-level information on a container or image #查看容器详细信息 kill Kill a running container #kill指定docker容器 load Load an image from a tar archive or STDIN #从一个tar包中加载一个镜像(对应save) login Register or log in to a Docker registry#注册或者登陆一个docker源服务器 logout Log out from a Docker registry #从当前Docker registry退出 logs Fetch the logs of a container #输出当前容器日志信息 pause Pause all processes within a container#暂停容器 port List port mappings or a specific mapping for the CONTAINER #查看映射端口对应的容器内部源端口 ps List containers #列出容器列表 pull Pull an image or a repository from a registry #从docker镜像源服务器拉取指定镜像或者库镜像 push Push an image or a repository to a registry #推送指定镜像或者库镜像至docker源服务器 rename Rename a container #重命名容器 restart Restart a running container #重启运行的容器 rm Remove one or more containers #移除一个或者多个容器 rmi Remove one or more images #移除一个或多个镜像(无容器使用该镜像才可以删除,否则需要删除相关容器才可以继续或者-f强制删除) run Run a command in a new container #创建一个新的容器并运行一个命令 save Save an image(s) to a tar archive#保存一个镜像为一个tar包(对应load) search Search the Docker Hub for images #在docker hub中搜索镜像 start Start one or more stopped containers#启动容器 stats Display a live stream of container(s) resource usage statistics #统计容器使用资源 stop Stop a running container #停止容器 tag Tag an image into a repository #给源中镜像打标签 top Display the running processes of a container #查看容器中运行的进程信息 unpause Unpause all processes within a container #取消暂停容器 version Show the Docker version information#查看容器版本号 wait Block until a container stops, then print its exit code #截取容器停止时的退出状态值
2021年03月20日
214 阅读
0 评论
0 点赞
1
2