容器数据卷
容器的持久化和同步操作。容器数据也是可以共享的
方式一:直接使用命令挂载目录 -v
docker run -it -v 主机目录:容器目录
docker run -it -v /home/ceshi:/home centos /bin/bash
|
通过docker inspect 容器id 查看是否挂载成功
测试文件同步
使用容器卷后,以后修改只需要在本地进行修改,容器内会自动同步。
实战:安装MySQL
下载容器 docker pull mysql:5.7
运行容器(挂载目录) docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=qihukeji360@123 --name mysql01 mysql:5.7 -d 后台运行 -p 端口映射 -v 卷挂载 -e 环境配置 --name 容器名字
|
容器即使被删除,数据仍在本地,即容器数据持久化功能!
具名挂载和匿名挂载
docker run -d -P --name nginx01 -v /etc/nginx nginx 匿名挂载(不建议使用)
docker run -d -P --name nginx01 -v juming:/etc/nginx nginx 具名挂载
docker volume docker volume ls 查看卷状态 docker volumre inspect juming 查看具名挂载路径
|
拓展:
ro readonly 只读 rw readwrite 可读可写
如下挂载为容器被设置的读写权限 docker run -d -P --name nginx01 -v juming:/etc/nginx:ro nginx docker run -d -P --name nginx01 -v juming:/etc/nginx:rw nginx
|
Dockerfile 构建docker镜像的构建文件,命令脚本
通过此脚本可生成镜像,一个命令为一层镜像
FROM centos #已centos为基础镜像
VOLUME ["volume01","volume02"] #挂载目录
CMD echo "-------end------" #输出
CMD /bin/bash
|
构建命令 docker build -t centos_time:1.0 .
|
假设构建镜像时候没有挂载卷,要手动镜像挂载 -v 卷名:容器内路径!
镜像容器卷同步
启动第一个容器 docker run -it --name centos01 centos_time:1.0 /bin/bash
|
启动第二个容器 docker run -it --name centos02 --volumes-from centos01 centos_time:1.0
|
启动第三个容器 docker run -it --name centos03 --volumes-from centos01 centos_time:1.0
|
多个MySQL实现数据共享
第一个: docker run -d -p 3306:3306 -v /etc/mysql/conf.d -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=12345 --name mysql01 mysql:5.7 第二个: docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=12345 --name mysql02 --volumes-from mysql01 mysql:5.7
|
容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止
但是一旦持久化到本地,那么本地的数据是不会被删除的。
Dockerfile构建
构建步骤
1、编写dockerfile文件
2、docker build 构建成一个镜像
3、docker run 运行镜像
4、docker push 发布镜像
Dockerfile命令
构建自己的docker镜像
FROM centos #以centos为基础镜像 MAINTAINER Time<89273238@qq.com> #作者信息
ENV MYPATH /usr/local #设置环境 WORKDIR $MYPATH #获取镜像工作目录 RUN yum -y install vim net-tools #安装基础工具 RUN echo "-------end-------" #输出 EXPOSE 80 #映射到外部端口 CMD /bin/bash #终端
|
docker history 镜像id 可查看历史镜像构建的操作
CMD 和 ENTRYPOINT区别
CMD
FROM centos CMD ['ls','-la']
|
构建后,当我们执行 docker run 32bb736dabe2 ls -la
时命令正常运行
当我们执行docker run 32bb736dabe2 -ll
报错
结论:CMD下会使用-ll
替换掉ls -la
命令,而不是追加成ls -l-ll
命令
ENTRYPOINT
FROM centos ENTRYPOINT ["ls","-a"]
|
正常运行
正常运行,使用ENTRYPOINT构建的镜像,会将docker run cc21b9ec59dd -ll
追加到命令中,最后执行的命令就是ls -a -ll
构建Tomcat镜像
1、准备Tomcat安装包和JDK安装包
2、构建镜像
FROM centos #基础镜像 MAINTAINER Time<xxxx@qq.com> #作者信息
ENV MYPATH /usr/local/apache-tomcat-9.0.41/webapps #环境目录 WORKDIR $MYPATH #镜像工作目录设置
ADD jdk-linux-x64.tar.gz /usr/local #添加jdk包并解压到目录中 ADD apache-tomcat-9.0.41.tar.gz /usr/local #添加Tomcat包并解压到目录中
RUN yum install -y vim net-tools #安装基础工具
ENV JAVA_HOME /usr/local/jdk1.8.0_131 #设置java环境 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.41 #设置Tomcat环境 ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.41 ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:CATALINA_HOME/bin #添加到系统环境中
EXPOSE 8080 #映射端口 CMD /usr/local/apache-tomcat-9.0.41/bin/startup.sh && tail -F /usr/local/apache-tomcat- 9.0.41/logs/catalina.out #启动tomcat并设置日志
|
构建镜像命令。注意:tomcat和java需上传到同目录下
docker build -t tomcat_time:1.0 .
|
构建成功
启动环境
docker run -d -p 9090:8080 --name mytomcat -v /root/1/time:/usr/local/apache-tomcat-9.0.41/webapps/time(挂载网站根目录) -v /root/1/logs:/usr/local/apache-tomcat-9.0.41/logs(挂载日志目录) tomcat_time:1.0
|
启动成功
目录挂载也成功,后续本地目录和容器目录会进行同步
发布镜像到docker hub
docker login -u name #登录docker hub账户
|
以下为登录成功
上传镜像之前需将镜像命令改为如下格式 docker账号/镜像名称
给镜像生成一个新的tag名称 docker tag 56b45f5db054 docker账号/tomcat_time:1.0
|
上传镜像
docker push docker账号/tomcat_time:1.0
|
实战搭建s2-061漏洞环境
Dockerfile
FROM tomcat:9
MAINTAINER Time
ENV MYPATH /usr/local/tomcat/webapps WORKDIR $MYPATH
COPY SimpleStruts.war /usr/local/tomcat/webapps/
EXPOSE 8080
CMD ["/usr/local/tomcat/bin/catalina.sh","run"]
|
构建命令
docker build -t s2-061_time:1.0 .
|
坑点
在启动tomcat时踩坑,当时写入以下两种命令时,一直无法启动。
CMD chmod a+x /usr/local/tomcat/bin/*.sh && sudo sh /usr/local/tomcat/bin/startup.sh 和 CMD sudo sh /usr/local/tomcat/bin/startup.sh
|
最后百度一波,官网给出解答,当docker命令无法自启动tomcat时,写入以下命令即可。正确环境在Dockefile中给出
CMD ["/usr/local/tomcat/bin/catalina.sh","run"]
|
启动
docker run -d -P --name s2-061 s2-061_time:1.0
|
Payload:SimpleStruts/S2061.action?id=%25%7b8%2a8%7d