zoukankan      html  css  js  c++  java
  • docker 学习总结

       这两天开始对docker进行学习,熟话说,万事开头难,不过,由于我们是码农,所以,必须要有时刻学习新技术的决心和勇气。这两天集中突击了一下,看了些书籍,如《Docker技术入门与实战》,照着上面的实例不断的敲,终于对docker有了个深刻的理解,运用docker搭建了一下web开发环境的镜像,将项目放入容器中运行,访问,当看到项目首页的时候,那种感觉真是爽呆了。

      下面开始记录我对docker的总结:

     1. docker是什么?

      可以通过镜像构建轻量级的虚拟服务器的一门技术。具体百度吧。

      下面是几个核心概念:

      镜像:

      服务器环境知道吧?如果要快速生成一套服务器环境,需要由镜像来new一个。docker有公共的镜像仓库,可以类比github。你可以将镜像pull到本地。在本地通过镜像生成容器,本地没有该镜像就会直接从远程镜像地址下载。

      比如,我想看一下关于mysql的镜像。

        然后就可以下载下来了,官网的那个docker.io 可以省略

        docker pull mysql   

        然后通过 一下命令可以查看本地的镜像

        docker images  

        

      容器

       通过镜像可以创建容器,可以理解服务器环境。创建容器十分轻量级,创建十个八个的,对真实的宿主机的影响很小。但是你要是开十个centos,电脑要卡死了都

       用centos镜像来运行一个centos的容器,没有centos镜像的可以从官方镜像拉取

       docker run centos 

       

       为什么看不到效果?因为运行一个容器,如果不加别的参数,容器创建后就会销毁终止了。

       怎么才能让容器持续工作呢?我们可以 这样

       

          -t    docker 分配一个终端绑定到容器的标准输入上

        -i     让容器的标准输入保持打开

        这样你会看到,我们进入了一个id为c865b的容器内,这就是centos的容器,一个全新的环境。

       还可以加上 -d ,让Docker容器在后台以守护状态运行,再后边想进入容器的时候,通过 docker exec -i -t db25e /bin/bash 进入这个容器

       

       查看目前正在运行的容器用 docker ps   

       查看全部的容器  docker ps  -a   ,包括运行的和退出的

       

     

       创建docker镜像

        创建docker镜像,将根据我们自己的需求,搭建一套服务器环境。这样以后可以很方便的通过镜像来生成我们所要的容器,比用虚拟机搭建环境,方便太多了,只需要一个文件,就可以搞定。

        创建镜像用dockerfile文件方式创建,还有一种是通过命令,不太直观。通过文件创建镜像也是推荐的一种方式。

    #this dockerfile use ubuntu:14.04 image
    #Author:chenwei
    
    #第一行必须指定基于的基础镜像
    FROM ubuntu:14.04
    #维护者信息
    MAINTAINER chenwei 123456@qq.com
    
    #镜像的操作指令。每条 RUN 指令将在当前镜像基础上执行指定命令,并提交为新的镜像。当命令较长时可以使用  来换行。
    RUN 
        apt-get update &&  
        apt-get install -y nginx && 
        rm -rf /var/lib/apt/lists/* && 
        echo "
    daemon off;" >> /etc/nginx/nginx.conf && 
        chown -R www-data:www-data /var/lib/nginx
        
    RUN echo "Asia/Shanghai" > /etc/timezone 
    
    #该命令将复制指定的 <src> 到容器中的 <dest>。其中 <src> 可以是Dockerfile所在目录的一个相对路径;
    ADD run.sh /run.sh
    
    RUN chmod 755 /*.sh
    #创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。
    VOLUME ["/etc/nginx/sites-enabled","/etc/nginx/certs","/etc/nginx/conf.d","/var/log/nginx"]
    
    #为后续的 RUN、CMD、ENTRYPOINT 指令配置工作目录。
    WORKDIR /etc/nginx
    
    #指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。
    CMD ["/run.sh"]    
    #告诉 Docker 服务端容器暴露的端口号,供互联系统使用。在启动容器时需要通过 -P,Docker 主机会自动分配一个端口转发到指定的端口
    EXPOSE 80 
    EXPOSE 443

        主要是这些指令,后面我们通过一个例子,来看怎么通过dockerfile来创建docker镜像。

        首先我们创建一个 tomcat_jdk_ubuntu的文件夹,然后在该文件夹下创建一个空的Dockerfile文件,一个run.sh脚本,该脚本主要做初始化操作,再从往下下载tomcat和jdk的压缩包,就是那种tar.gz结尾的,免安装的。解压后,目录结构如下:

      

      dockerfile 文件内容如下

          #基于一个以前下载的linux操作系统镜像来搭建 

        FORM   ubuntu                                                 

        # 维护者信息

          MAINTAINER   chenwei 609605093@qq.com    

        #复制tomcat和jdk文件到镜像中,镜像中若没有文件夹,则会新建

        ADD apache-tomcat /tomcat7              
        ADD jdk8 /jdk8
        ADD run.sh /run.sh

        #设置环境变量 ,形式类似于key -value

        

        ENV CATALINA_HOME   /tomcat7
        ENV JAVA_HOME   /jdk8
        ENV PATH   $PATH:$JAVA_HOME/bin

        # 在基础镜像上执行指令,每执行一次,都会在镜像上新建一层文件,生成新的镜像 

        RUN chmod +x /*.sh

           RUN chmod +x /tomcat7/bin/*.sh 

         #暴露一下容器的端口,

        EXPOSE  8080

        EXPOSE  80

        #容器启动时,执行的初始化命令

        CMD  ["/run.sh"]

        

        dockerfile 书写完毕 ~~ 

         我们的run.sh中就只是开启一下tomcat

        

        

        然后开始构建镜像  docker build -t tomcat7:jdk8 .             !!!不要忘了最后还有一个点,意思是在当前目录下查找dockerfile 和其他的文件

     

       最后通过   docker run -d  -P   tomcat7:jdk8    看下 ,

         

       通过docker ps  可以看到   容器id为   a87ee 的容器,已经在运行了,映射的端口号是   32779 --》8080,访问一下  宿主机的  ip + 32779 端口 

       

        

        看到已经起来了吧,剩下最后一步,就是把你的项目复制到容器中,在 dockerfile中通过  ADD  或者挂载命令 VOLVME 。推荐用VOLVMN,因为在容器中的操作,日志了什么的,也会在宿主机中看到。

        不写了,太晚了,周末愉快

       

        

  • 相关阅读:
    Django中怎么做图片上传--图片展示
    Django框架获取各种form表单数据
    django中的数据库迁移
    flask中单选、多选、下拉框的获取
    解析web应用处理流程
    细说flask数据库迁移
    vue和jQuery嵌套实现异步ajax通信
    java
    nginx的主要用途
    mvn常用命令
  • 原文地址:https://www.cnblogs.com/manmanrenshenglu/p/9090417.html
Copyright © 2011-2022 走看看