首页
统计
关于
Search
1
Sealos3.0离线部署K8s集群
1,082 阅读
2
类的加载
741 阅读
3
Spring Cloud OAuth2.0
726 阅读
4
SpringBoot自动装配原理
691 阅读
5
集合不安全问题
584 阅读
笔记
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
页面
统计
关于
搜索到
2
篇与
的结果
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日
161 阅读
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日
159 阅读
0 评论
0 点赞