Docker精髓 容器数据卷 / DockerFile

容器数据卷

容器中的数据会跟随容器的删除而删除,为了保证容器中的数据持久化,需要数据可以存储到本地,例如MySQL
容器数据卷就是容器之间的数据共享技术,Docker容器中产生的数据同步到本地。卷技术就是将容器内的目录挂载到Linux上。

数据卷命令

docker run -it -v 主机目录,容器内目录

同步centos中的 /home 到主机的 /home/centosSync
docker run -it -v /home/centosSync/:/home centos /bin/bash

在这里插入图片描述

centos中的java程序同步到本地
在这里插入图片描述

通过inspect语句查看容器详细信息,包括数据卷的挂载关系,Source主机地址,Destinationdocker容器内地址

docker inspect centos容器ID

在这里插入图片描述
在容器中修改文件和在本地修改文件,都会同步到对方,通过这种方式就可以修改容器配置而不需要进入容器中。

MySQL开启同步

mysql启动方法

docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
docker run
-d 后台运行
-p 端口映射
-v 卷挂载
-e 环境配置
--name 容器名称
  • 3316:3306服务器端口 3316 对应 容器 3306
  • -v /home/mysqlSync/conf:/etc/mysql/conf.d 挂载配置文件
  • -v /home/mysqlSync/data:/var/lib/mysql 挂载数据文件
  • MYSQL_ROOT_PASSWORD=root 设置root密码
  • --name mysqlSync 容器命名
docker run -d -p 3316:3306 -v /home/mysqlSync/conf:/etc/mysql/conf.d -v /home/mysqlSync/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root --name mysqlSync mysql

与数据库成功建立连接,本地建立与容器MySQL的连接

在这里插入图片描述
新建一张表可以发现同步到了本地的文件夹内,如果删除容器,本地数据依旧不会被删除,持久化到了本地。

在这里插入图片描述
在这里插入图片描述

匿名/具名挂载

匿名挂载 -v 容器内路径
docker run -d -P --name nginx01 -v /etc/nginx nginx

具名挂载 
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx

-v 卷名:容器内路径
左侧不加/就不是绝对地址,就是卷名

所有docker容器内的卷,没有指定目录的情况下都是在/var/lib/docker/volumes/xxx/_data

在这里插入图片描述
拓展

docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx

对容器进行权限设置
ro readonly 只读
rw readwrite 可读可写

ro表明路径只能通过宿主机来操作,容器内部无法操作

数据卷容器

--volumes-from将一个容器挂载到另一个容器上,通过一个容器同步文件到多个容器,容器之间通过

--volumes-from 实现容器间的数据共享

docker run -it --name doker02 --volumes-from docker01 centos

Dockerfile

Dockerfile就是用来构建docker镜像的构建文件,通过命令脚本生成镜像,镜像是分层的,所以每个命令都是一层

FROM centos

VOLUME ["volume01","volume02"]

CMD echo "----end----"
CMD /bin/bash
构建镜像
docker build -f dockerFile1 -t chai/centos:1.0 .

流程:
Sending build context to Docker daemon  2.048kB
Step 1/4 : FROM centos
 ---> 0d120b6ccaa8
Step 2/4 : VOLUME ["volume01","volume02"]
 ---> Running in 5f4a8a323090
Removing intermediate container 5f4a8a323090
 ---> a74fdef970c8
Step 3/4 : CMD echo "----end----"
 ---> Running in d6045c0d189f
Removing intermediate container d6045c0d189f
 ---> 77a50471a942
Step 4/4 : CMD /bin/bash
 ---> Running in a50258208065
Removing intermediate container a50258208065
 ---> 783e079abd34
Successfully built 783e079abd34
Successfully tagged chai/centos:1.0
查看镜像
docker images

在这里插入图片描述

进入自己创建的镜像
docker run -it --name mycentos02 783e079abd34 /bin/bash

在这里插入图片描述

发现自己挂载的两个数据卷目录,则本地有同样的文件夹进行同步,匿名挂载说明名字是乱码。查看挂载信息,可以看到目录地址

docker inspect 容器ID

在这里插入图片描述

DockerFile步骤

  1. 编写dockerfile文件
  2. douker build构建成为一个镜像
  3. douker run运行镜像
  4. douker push 发布镜像(DockerHub,阿里云镜像仓库)

基础:

  1. 指令必须都是大写字母
  2. 执行顺序从上到下
  3. #表示注释
  4. 每个指令都会创建提交一个新的镜像层

指令介绍

FROM 		指定基础镜像,一切从这里构建
MAINTAINER 	镜像是谁写的,姓名+邮箱
RUN 		镜像构建时需要运行的命令
ADD			增加其他镜像,按层添加
WORKDIR 	当前工作目录
VOLUME 		挂载到主机的目录
EXPOST		保留端口配置
CMD			指定容器启动的时候运行的命令,只有最有一个会生效,可以被替代
ENTRYPOINT	指定容器启动的时候运行的命令,可以追加命令
ONBUILD		都构建一个被继承的DockerFile 就会运行这个指令
COPY		类似ADD,文件拷贝到镜像中
ENV			构建时设置环境变量

CMD和ENTRYPOINT

CMD 不会追加在命令后面
例如: CMD ls -a 在执行时列出所有目录
如果执行 docker run -it mycentos -l . 会报错

但如果是 ENTRYPOINT ls -a 不会报错

构建自己的Centos

centos最新版本的DockerFile

FROM scratch
ADD centos-8-x86_64.tar.xz /
LABEL org.label-schema.schema-version="1.0"     
	org.label-schema.name="CentOS Base Image"     
	org.label-schema.vendor="CentOS"     
	org.label-schema.license="GPLv2"     
	org.label-schema.build-date="20200809"
CMD ["/bin/bash"]

DockerHub中99%的镜像都是从scratch基础镜像构建的,然后配置需要的软件和配置

1.编写DockerFile文件

FROM centos
MAINTAINER cccrj<123@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 centosDockerFile01 -t mycentos:0.1 .

-f DockerFile文件地址
-t 镜像名:[tag]

3.测试镜像

可以发现自己加的网络工具,ifconfig可以使用,并且进入centos直接进入/usr/local目录下
在这里插入图片描述
查看镜像变更历史

docker history 容器ID

在这里插入图片描述

构建自己的Tomcat

FROM centos
MAINTAINER cccrj<123@qq.com>

COPY README.md /usr/local/README.md

ADD jdk-8u191-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_191
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
  • COPY 拷贝文件到镜像中
  • ADD 自动解压压缩包到指定目录
  • ENV设置Java 和 Tomcat 的环境变量
  • 开放端口8080
  • CMD 启动Tomcat 并且 查看日志

Dockerfile是默认名称,会自动识别,不需要在build中再写-f文件名了

docker build -t mytomcat .

启动自定义tomcat,设置端口8090,挂载webappslogs两个文件夹

docker run -d -p 8090:8080 --name mytomcat -v /home/myTomcat/webappsSync:/usr/local/apache-tomcat-9.0.36/webapps -v /home/myTomcat/logsSync:/usr/local/apache-tomcat-9.0.36/logs mytomcat

发布自己的镜像

DockerHub

docker login 
-u 账户
-p 密码

在这里插入图片描述

docker push 镜像名[:tag]

可以通过docker tag对镜像改名
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

在这里插入图片描述
上传完成后,dockerhub上出现自己上传的镜像

在这里插入图片描述
在这里插入图片描述

阿里云镜像

  1. 容器镜像服务

  2. 创建命名空间,存储镜像
    在这里插入图片描述

  3. 创建容器镜像,上传镜像需要按照阿里云的提示进行,不然上传失败
    在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值