美文网首页
什么是Docker?(部署篇)

什么是Docker?(部署篇)

作者: 山野乔治 | 来源:发表于2020-04-19 23:34 被阅读0次

    Docker部署

    MySQL部署

    在Docker容器中部署MySQL,并通过外部MySQL客户端去操作MySQL。

    docker容器软件部署步骤

    1 搜索镜像;2 拉取镜像;3 创建容器;4 操作容器中的MySQL

    注意

    • 容器内的网络服务和外部机器(客户端)是不能直接进行通信的。

    • 外部机器和宿主机器可以直接进行通信。

    • 当容器中的网路服务需要被外部机器访问时,可以将容器中提供服务的端口映射到宿主机的端口上,外部机器访问宿主机的该端口,从而间接的访问容器的服务。(3306容器端口映射到宿主机的3307端口 访问3307即访问3306实体容器) ---这种方法解决容器和外部机器不能直接通信的问题,叫做端口映射

    #搜索镜像
    docker search mysql
    
    #拉取镜像
    docker pull mysql:5.6
    
    #创建容器 设置端口映射 目录映射
    #在root目录下创建MySQL目录用于存储MySQL数据信息
    mkdir ~/mysql
    cd ~/mysql
    
    #创建容器脚本
    docker run -id \   #守护示创建
    -p 3307:3306 \     #容器和外部机器端口一般选择一致
    --name=c_mysql \   #name
    -v $PWD/conf:/etc/mysql/conf.d \  #容器卷配置文件
    -v $PWD/logs:/logs \   #容器卷log文件
    -v $PWD/data:/var/lib/mysql \  #容器卷data文件
    -e MYSQL_ROOT_PASSWORD=123456 \  #env环境文件 定义环境变量
    mysql:5.6
    
    #进入容器
    docker exec -it c_mysql /bin/bash
    
    #通过外部机链接容器中的sql
    #注意address是宿主机的ip 端口是宿主机被映射的端口3306端口
    

    Tomcat部署

    搜索和拉取的方式和mysql相似

    mkdir tomcat
    cd tomcat 
    #创建容器
    docker run -id --name=c_tomcat \
    -p 8080:8080 \
    -v $PWD:/usr/local/tomcat/webapps \
    tomcat
    

    在~/tomcat 路径下创建一个test文件夹,在test之下创建一个index.html文件然后ifconfig指令查看宿主机ip 可以在地址栏访问 ip:8080/test/index.html路径了

    NGINX部署

    拉取和搜索方式同上;但是NGINX服务器一般会有一个配置文件,因为会有反向代理的需求;

    docker run -id --name=c_nginx \
    -p 80:80 \
    -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
    -v $PWD/logs:/var/log/nginx \
    -v $PWD/html:/usr/share/nginx/html \
    nginx
    

    参数:-p80:80 容器的端口映射

    -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf 将主机当前目录下的/conf/nginx.conf挂载到容器相应的目录上

    Redis部署

    搜索和拉取和上述指令一致。

    #创建容器
    docker run -id --name=c_redis -p 6379:6379 redis:5.0
    

    使用外部机器连接redis

    ./redis-cli.exe -h 192.168.1.4 -p 6379
    

    Dockerfile

    Docker镜像原理

    问题:

    • docker镜像本质是什么呢?

    是一个分层文件系统;

    • docker中的centos镜像为什么只有200m,但是centos操作系统需要几个g?

    centos的iso镜像文件包含了bootfs和rootfs,而docker镜像复用操作系统的bootfs,只有rootfs和其他镜像层

    • docker中tomcat镜像有500m,但是tomcat安装包只有70m?

    由于docker中镜像是分层的,tomcat虽然只有70多m,但是它依赖的父镜像和基础镜像,所有整个对外暴露的tomcat镜像大小是由500m

    分析:

    从操作系统首先入手,其组成部分:

    1,进程调度子系统;2,进程通信子系统;3,内存管理子系统;4,设备管理子系统;5,文件管理子系统;6,网络通信子系统;7,作业控制子系统。

    Linux文件系统由bootfs和rootfs两部分组成

    • Bootfs:包含BootLoader(引导加载程序)和kernel(内核心)
    • rootfs: root文件系统,包含的就是典型的Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件
    • 不同的Linux发行版,bootfs基本一样,而rootfs不同。如Ubuntu,centos等。

    原理解密:

    Docker镜像是由特殊的文件系统叠加而成的。最低端是bootfs,并使用宿主机的bootfs。第二层是root文件系统,被称为base image;然后再往上可以叠加其他的镜像文件。统一文件系统技术能够将不同的层叠加成一个文件系统,为这些层提供一个统一的视角,这样就隐藏了多层的存在。在用户的角度看来,只存在一个文件系统。一个镜像可以放在另一个镜像的上面,位于下面的镜像称为父镜像,最底部的镜像称为基础镜像。

    当从一个镜像启动容器时,docker会在最顶层加载一个读写文件系统作为容器;(即生成一个新的镜像实例,这样就可以进行修改相关文件 否则是不能修改只读文件的)

    镜像制作

    docker镜像如何制作?

    1 容器转为镜像;(上述中生成的镜像 变成自己的镜像)

    在新的镜像中只包换了不是通过目录加载的文件;)

    #转化 注意通过挂载的方法不能使进行同步转化过去
    docker commit 容器id 镜像名称:版本号
    

    比如把项目放到nginx服务上,重新转化为镜像 进行压缩,给到测试人员进行测试

    #压缩
    docker save -o 压缩文件名称 镜像名称:版本号
    

    给到测试人员,测试人员进行解压;

    #解压
    docker load -i 压缩文件名称
    

    因为这样挂载文件会有问题,所有指令示的操作了解即可。主要通过dockerfile

    Dockerfile概念及作用

    本质就是一个文本文件,包含了很多条指令,每一条指令构建一层,基于基础镜像,最终构建一个新的镜像。

    好处:对于开发人员,可以为开发团队提供一个完全一致的开发环境。对于测试人员,可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了。对于运维人员,在部署时,可以实现应用的无缝移植。

    Dockerfile关键字

    关键字 作用 备注
    FROM 制定父镜像 指定Dockerfile基于那个image构建
    RUN 执行命令 执行一段命令,默认是/bin/sh格式:RUN command
    CMD 容器启动命令 提供启动容器时候的默认命令
    ENTRYPOINT 入口 一般在制作一些执行就关闭的容器中会使用 配合CMD
    COPY 复制文件 build的时候复制文件到image中
    ADD 添加文件 build的时候添加文件到image中,不仅仅局限于上下文,可以来源于远程服务
    ENV 环境变量 制定build时候的环境变量 可以在启动的容器的时候 通过-e 覆盖 格式:name=value
    ARG 构建参数 构建参数 只在构建的时候使用的参数 如果有ENV 那么env 相同的名字会覆盖arg的参数
    VOLUME 定义外部可以挂载的数据卷
    关键字 作用 备注
    EXPORSE 暴露端口 定义容器运行的时候监听的端口 启动容器的使用-p来绑定暴露端口,格式 EXPORSE 8080或者 EXPORSE 8080/udp
    WORKDIR 工作目录 制定容器内部的工作没目录 如果没有创建的话则自动创建 如果指定/使用的是绝对地址
    USER 指定执行用户 指定build或者启动的时候 用户在RUN CMD ENTRYPOINT执行的时候的用户
    HEALTHCHECK 健康检查 指定监测当前容器的健康监测的命令 基本上没用
    OUTBUILD 触发器 存在OUTBUILD关键字的镜像作为基础镜像的时候,当执行FROM完成后会执行OUTBUILD的命令,用处不大
    STOPSIGNAL 发送信号量到宿主机 该指令设置将发送到容器的系统调用信号以退出;
    SHELL 指定执行脚本的shell 指定RUN CMD ENTRYPOINT执行命令的时候,使用的shell

    案例

    上述的指令 只需要掌握经常使用的关键字即可;

    docker build -f(指定Dockerfile文件地址) ./centos_dockerfile -t(设置新的镜像的名称和版本) ht_centos:1 .(.代表一个路径) 
    

    相关文章

      网友评论

          本文标题:什么是Docker?(部署篇)

          本文链接:https://www.haomeiwen.com/subject/jvjgbhtx.html