zoukankan      html  css  js  c++  java
  • Docker中级篇,看这篇就对了

    点击上方“开源Linux”,选择“设为星标”回复“学习”获取独家整理的学习资料!
    

    姊妹篇:

    Docker容器网络-基础篇

    十分钟看懂Docker和K8S

    Docker镜像是什么

    镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时库、环境变量和配置文件

    Docker镜像加载原理

    UnionFs:联合文件系统

    UnionFs(联合文件系统):Union文件系统(UnionFs)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下,UnionFs联合文件系统是Docker镜像的基础,镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录

    Docker镜像加载原理

    Docker的镜像实际上由一层一层的UnionFs文件系统组成bootfs:主要包含 bootloader和 Kernel,bootloader主要是引导加 kernel,Linux刚启动时会加bootfs文件系统,在 Docker镜像的最底层是bootfs,这一层与我们典型的Linux/Unix系统是一样的,包含bootfs加载器和内核,当bootfs加载完成之后整个内核就都在内存中了,此时内存的使用权已由 bootfs转交给内核,此时系统也会卸载bootfs。

    rootfs:在 bootfs之上,包含的就是典型 Linux系统中的/dev、/proc、/bin、/etc等标准目录和文件,rootfs就是各种不同的操作系统发行版,比如:Ubuntu,、CentOS等等

    简单理解:

    1. 对于Docker安装OS来说:就是Docker使用了Linux本身的bootfs,只需要安装自己所需的rootfs。

    2. 对于Docker安装普通镜像来说:就是Docker本身是分层下载镜像,所以可以提取出公共层镜像,进行复用。

    Docker镜像的特点

    Docker镜像都是只读的,当容器启动时,一个新的可写层加载到镜像的顶部

    这一层就是我们通常说的容器层,容器之下的都叫镜像层

    Commit镜像

    # 提交本地镜像 
    # -a:作者信息 -m:描述信息 容器ID 镜像名称:版本信息
    docker commit -a="test" -m="test" 容器id tomcat01:1.0
    

    Docker容器数据卷

    什么是容器数据卷

    容器之间可以有一个数据共享的技术!Docker容器中产生的数据,同步到本地!

    这就是卷技术!目录的挂载,将我们容器内的目录,挂载到Linux上面!

    容器数据卷使用命令

    # 命令
    docker run -it -v 主机目录:容器内目录 /bin/bash
    

    挂载MySQL数据库到Liunx宿主机

    # 1. 下载MySQL
    docker pull mysql
    # 2. 启动并挂载 -e:特别注意需要设置密码
    docker run -d -p 3344:3306 -v /home/conf:/etc/mysql/conf.d -v /home/logs:/logs -v /home/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
    

    此时我们使用远程连接软件会报错

    # 解决报错
    # 1. 进入容器内
    docker exec -it 容器ID /bin/bash
    # 2. 进入MySQL
    mysql -uroot -p123456
    # 3. 授权
    mysql> GRANT ALL ON *.* TO 'root'@'%';
    # 4. 刷新权限:
    mysql> flush privileges;
    # 5. 更新加密规则:
    mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
    # 6. 更新root用户密码:
    mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
    # 7. 刷新权限:
    mysql> flush privileges;
    

    具名和匿名挂载

    -v 容器内路径          # 匿名挂载
    -v 卷名:容器内路径         # 具名挂载
    -v 宿主机路径:容器内路径 # 指定路径挂载
    Docker容器内的卷,在没有指定目录的情况下都在/var/lib/docker/volumes/xxx/_data下
    

    拓展:绑定权限

    # 通过 -v 容器内路径:ro rw 改变读写权限
    ro # readonly 只读
    rw # readwrite 可读可写
    docker run -d nginx01 -v nginxdemo:/etc/nginx:ro nginx
    docker run -d nginx01 -v nginxdemo:/etc/nginx:rw nginx
    # ro:只要看到ro就说明这个路径只能通过宿主机来操作,容器内部是无法操作
    

    数据卷容器挂载

    目的:实现多个容器间的数据同步(多个MySQL间共享数据)

    # 使用 --volumes-from 容器名称 此命令实现数据卷容器挂载
    docker run -d --name mysql02 -p 3345:3306 --volumes-from  mysql01 -e MYSQL_ROOT_PASSWORD=123456 mysql
    

    DockerFile

    DockerFile是用来构建Docker镜像的文件(命令参数脚本)

    DockerFile构建指令

    FROM                # 基础镜像,一切从这里开始构建
    MAINTAINER             # 镜像是谁写的, 姓名+邮箱
    RUN                    # 镜像构建的时候需要运行的命令
    ADD                    # 步骤,tomcat镜像,这个tomcat压缩包!添加内容 添加同目录
    WORKDIR                # 镜像的工作目录
    VOLUME                # 挂载的目录
    EXPOSE                # 保留端口配置
    CMD                    # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
    ENTRYPOINT            # 指定这个容器启动的时候要运行的命令,可以追加命令
    COPY                # 类似ADD,将我们文件拷贝到镜像中
    ENV                    # 构建的时候设置环境变量!
    

    创建一个自己的CentOS镜像

    • 创建DockerFile

    vim mycentos
    
    • 编写DockerFile

    FROM centos
    MAINTAINER MT<1746344046@qq.com>
    
    
    ENV MYPATH /usr/local
    WORKEDIR $MYPATH
    
    
    RUN yum -y install vim
    
    
    EXPOSE 80
    
    
    CMD /bin/bash
    
    • 构建自己的镜像

    docker build -f mycentos -t mycentosdemodo:1.0 .
    
    • 查看镜像生成历史

    docker history 镜像ID
    

    创建Tomcat镜像

    1.准备镜像文件:Tomcat和JDK的压缩包

    2.编写DockerFile

    FROM centos
    MAINTAINER fortuneteller<1746344046@qq.com>
    
    
    COPY README.txt /usr/local/README.txt
    
    
    ADD jdk-8u251-linux-x64.tar.gz /usr/local
    ADD apache-tomcat-9.0.35.tar.gz /usr/local
    
    
    RUN yum -y install vim
    
    
    ENV MYPATH /usr/local
    WORKDIR $MYPATH
    
    
    ENV JAVA_HOME /usr/local/jdk1.8.0_251
    ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.35
    ENV CATALINA_BASH /usr/local/apache-toacat-9.0.35
    ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
    
    
    EXPOSE 8080
    
    
    CMD ["/usr/local/apache-tomcat-9.0.35/bin/catalina.sh", "run"]
    

    3.打包镜像

    # 这里使用的是Dockerfile来明白的脚本,所以省略-f
    docker build -t mytomcat .
    

    4.启动镜像

    docker run -d -p 3344:8080 --name mttomcat -v /home/fortuneteller/tomcat/test:/usr/local/apache-tomcat-9.0.35/webapps/test -v /home/fortuneteller/tomcat/logs:/usr/local/apache-tomcat-9.0.35/logs mytomcat
    

    5.测试运行

    6.在宿主机的/home/fortuneteller/tomcat/test目录下创建WEB-INF目录与mt.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>docker</title>
    </head>
    <body>
    ----------welcome------------
    <%="这是一个测试页面"%>
    </body>
    </html>
    

    7.在WEB-INF目录下编写web.xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
             version="3.1">
        <display-name>test</display-name>
    </web-app>
    

    8.测试访问

    搜索顶级架构师公众号回复“offer”,送你一份算法面试题和答案惊喜礼包。

    本地镜像上传阿里云

    1. 登陆阿里云容器镜像服务

    2. 创建命名空间

    3. 创建仓库

    4. 设置固定密码

    1. 查看自己的推送命令

    1. 使用推送命令完成上传

    1. 拉取时同理根据阿里云提示命令完成即可

    Docker总结

    Docker部署SpringBoot项目

    1. 使用Maven构建获得jar包

    2. 编写Dockerfile

    FROM java:8
    
    
    COPY *.jar /app.jar
    
    
    CMD ["--server.port=8080"]
    
    
    EXPOSE 8080
    
    
    ENTRYPOINT ["java", "jar", "app.jar"]
    
    1. 上传Docker与jar包到Linux服务器

    2. 使用命令获得镜像

    docker build -t ideatest .
    
    1. 使用命令查看获取到镜像编号

    docker images
    
    1. 启动镜像

    docker run -d -p 3344:8080 ideatest  # 3344端口需要提前在阿里云放开
    
    1. 测试访问

    在浏览器输入:服务器ip:3344

    作者 | Fortuneteller

    来源 | developer.aliyun.com/article/769273

    - End -

    关注「开源Linux」加星标,提升IT技能
    
    
    十年磨一剑
  • 相关阅读:
    云服务器配置
    linux云服务器的配置
    Python进阶练习与爬取豆瓣T250的影片相关信息
    实时爬取疫情动态变化并进行可视化展示
    python基础学习
    异步实现用户名的校验
    人月神话读书笔记(一)
    第三周学习进度博客
    CentOS7.4下编译Hadoop-2.7.6
    Linux 内存使用率
  • 原文地址:https://www.cnblogs.com/qinlulu/p/14671508.html
Copyright © 2011-2022 走看看