dockerfile 是用来构建docker镜像的构建文件
FROM centos
VOLUME ["volume01","volume02"] ##匿名挂载
CMD echo "-----end-----"
CMD /bin/bash
docker build -f /home/docker-test-volume/dockerfile -t xilanxiaoge/centos:2.0 . #当前目录生成镜像
镜像生成的容器内部,显示挂载的卷文件,
通过
docker inspect 容器id
可以查看,挂载的详细信息
数据卷容器
多个数据库进行数据同步
docker run -it --name docker02 --volumes-from docker01 xilanxiaoge/centos:2.0 ##容器docker02挂载docker01的数据卷
docker run -it --name docker01 --volumes-from docker01 xilanxiaoge/centos:2.0 ##容器docker01挂载docker01的数据卷
docker01容器变成了数据卷容器
##删除docker01后,docker02和docker03中的数据依然存在,是种基于拷贝的共享机制
容器之间的数据卷,数据卷容器的生命周期持续到没有容器使用为止;
但是-v进行持久化到本地的数据卷,则不会被删除。
Dockerfile
是用来构建docker镜像的构建文件
构建步骤:
1、编写一个dockerfile文件
2、docker build 构建成为一个镜像
3、docker run 运行镜像
4、docker push 发布镜像(DockerHub、阿里云镜像仓库!)
查看DockerHub上的CentOS镜像
centos 8 转至gitHub
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"]
Dockerfile构建
FROM # 基础镜像
MAINTAINER # 镜像是谁写的,姓名+邮箱
RUN # 构建镜像时需要运行的命令
ADD # 添加内容,例如:tomcat镜像,则是tomcat的压缩包
WORKDIR # 镜像的工作目录
VOLUME # 挂载主机目录
EXPOSE # 暴露的端口设置
CMD # 指定这个容器启动时要运行的命令,只有最后一个会生效,被替代 构建完容器之后执行
ENTRYPOINT # 指定这个容器启动时要运行的命令,可以追加命令
ONBUILD # 当构建一个被继承的dockerfile时,触发
COPY # 类似ADD, 将本地文件拷贝到镜像中
ENV # 构建的时候设置环境变量
Docker Hub 中99%的镜像都是从最基础的镜像开始构建 FROM scratch
FROM scratch
ADD centos-7-x86_64-docker.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" \
org.opencontainers.image.title="CentOS Base Image" \
org.opencontainers.image.vendor="CentOS" \
org.opencontainers.image.licenses="GPL-2.0-only" \
org.opencontainers.image.created="2020-08-09 00:00:00+01:00"
CMD ["/bin/bash"]
#cat docker_file_centos
FROM centos
MAINTAINER xilanxioage<843844390@123.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
docker build -f docker_file_centos -t mycentos:1.0 #构建 -f dockerfile文件路径 -t 镜像名:[tag]
docker run -it mycentos:1.0 #默认进入/usr/local/目录
docker history 镜像id #可以查看镜像的构建历史
CDM命令
#docker_file_cmd_test
FROM centos
CMD ["ls","-a"] # 构建镜像 执行 命令 ls -a
docker build -f docker_file_cmd_test -t cmdtest . # 构建镜像
docker run cmdtest # 执行镜像
docker run cmdtest ls -al # ls -al命令会覆盖 CMD 命令
ENTRYPOINT命令
#docker_file_cmd_Entry_test
FROM centos
ENTRYPOINT ["ls","-a"] # 构建镜像 执行 命令 ls -a
docker build -f docker_file_cmd_Entroy_test -t cmdEntry_test . # 构建镜像
docker run cmdEntry_test # 执行镜像
docker run cmdEntry_test -l # -l 命令会追加在 ENTRYPOINT 命令后
制作TomCat镜像
1、当前目录准备镜像文件tomcat压缩包,jdk的压缩包
2、编写dockerfile文件,官方命名Dockerfile,build时会自动寻找,不需要-f 指定目录
#Dockerfile
FROM centos
MAINTAINER xilanxiaoge<84384390@123.com>
COPY readme.txt /usr/local/readme.txt
ADD jdk-8u11-linux-x64.tar.gz /usr/local/ #jdk包放在当前目录
ADD apache-tomcat-9.0.22.tar.gz /usr/local/ #apache包放在当前目录
RUN yum -y install vim
ENV MYPATH /usr/local #相当于export命令
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_11
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINE_HOME /usr/local/apache-tomcat-9.0.22
ENV CATALINE_BASH /usr/local/apache-tomcat-9.0.22
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.22/bin/staartup.sh && tail -F /url/local/apache-tomcat-9.0.22/bin/logs/catalina.out
docker build -t diytomcat . #构建Dockerfile文件镜像
docker run -d \
-p 9090:8080 \
--name xilantomcat \
-v /home/xilanxiaoge/build/tomcat/test:/usr/local/apache-tomcat-9.0.22/webapps/test \
-v /home/xilanxiaoge/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.22/logs \ #tomcat日志目录
diytomcat
发布镜像
发布到dockerHub上
1、dockerHub上注册自己的账号
2、docker login -u username -p 密码 # 登录账号
3、docker push username/diytomcat:1.0 # 上传镜像
给镜像更改标签
docker tag 镜像id xilanxioage/tomcat:1.0 # 复制镜像,更改名称和标签(更改REPOSITORY 和 TAG)
镜像发布时也是按照层级进行提交
发布到阿里云镜像服务上:
去了解阿里云如何使用,参考官方文档
小结
docker save 和 load 保存为本地jar包和加载本地包
docker网络
理解docker0
#清空docker环境
docker rm -f $(docker ps -aq) #删除全部容器
docker rmi -f $(docker image ls -aq) #删除全部镜像
#ip addr
三个网卡 lo eth0 docker0
lo:本地回环地址
eth0: 内网地址
docker0:docker 地址
技术原理:
每启动一个docker容器,docker都会给容器分配一个ip;
桥接模式,使用evth-pair技术;
# 发现容器带来的网卡都是成对出现的
# evth-pair 是一对虚拟设备接口,他们是成对出现的,一端连着协议,另一端连着彼此
# evth-pair 充当一个桥梁,连接各种虚拟网络设备
# OpenStack, Docker容器之间的连接,OVS的连接,都是使用evth-pair技术
小结:Docker使用的是Linux的网桥,宿主机中是一个Docker容器的网桥docker0,,,,,,,最多可以分配65535个容器?
Docker中的所有网络接口都是虚拟的。虚拟的转发效率高
--Link
docker run -d -P --name tomcat03 --link tomcat02 tomcat
在tomcat03中 执行 ping tomcat02 可以ping通
反过来,在tomcat02中 执行 ping tomcat03 不可以ping通
原理:在tomcat03这个linux环境下,配置的/etc/hosts修改的
--link不适用大范围
自定义网络
docker network ls # 查看所有网卡
docker network rm 网卡名或者id # 删除指定网卡
网络模式
bridge : 桥接 docker (默认)
none :不配置网络
host :和宿主机共享网络
container : 容器网络连通(用的少)
#直接启动的命令, --net bridge,默认设置
docker run -d -P --name tomcat01 tomcat
docker run -d -P --name tomcat01 --net bridge tomcat
# 自定义一个网络 不使用--ling 也可以直接ping 容器名 可以ping通
# --driver bridge
# --subnet 192.168.0.0/16 子网 范围192.168.0.2-----192.168.255.255
# --gateway 192.168.0.1 网关
docker network creat --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet #创建网络
docker network inspect mynet #查看自己的网络
docker run -d -P --name tomcat-net-01 --net mynet tomcat #创建容器01,使用自己的网络
docker run -d -P --name tomcat-net-02 --net mynet tomcat #创建容器01,使用自己的网络
docker network inspect mynet #查看自己的网络
docker exec -it tomcate-net-01 ping 192.168.0.3 #直接ping tomcat-net-02的ip
docker exec -it tomcate-net-01 ping tomcate-net-02 #直接ping tomcat-net-02 是可以通的
网络连通
docker0网络与mynet网络之间进行连接
docker network connect mynet tomcat01 #将docker0网络中的tomcat01与mynet网络连接
docker network inspect mynet #查看mynet网络的信息,可以观察到,将tomcat01放到了mynet网络中,给其赋值一个ip地址
docker exec -it tomcat01 ping tomcat-net-01 #可以ping通
SpringBoot 微服务打包成Docker镜像
1、构建springboot微项目
2、生成.jar包,执行java -jar ****.jar 可以运行
3、在idear中添加docker插件,编写Dockerfile文件
4、只需要将Dockerfile和*****.jar包文件上传到服务器;
5、运行测试