Loading

DockerFile学习

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、运行测试

 

posted @ 2020-11-11 21:19  KairusZhang  阅读(48)  评论(0编辑  收藏  举报