docker 学习总结

Posted manmanrenshenglu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 "\\ndaemon 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 [email protected]    

 

    #复制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,因为在容器中的操作,日志了什么的,也会在宿主机中看到。

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

   

 

 

 

 

 

 

 

 

    





以上是关于docker 学习总结的主要内容,如果未能解决你的问题,请参考以下文章

docker的学习总结

Docker学习总结之docker入门(转自:Vikings翻译)

Docker 学习总结(74)—— Docker Swarm 全面总结

线程学习知识点总结

ROS1学习-01使用ROS系统进行相关代码开发,使用docker解决环境问题,遇到一些奇怪问题,总结汇总下,开始学习研究

ROS1学习-01使用ROS系统进行相关代码开发,使用docker解决环境问题,遇到一些奇怪问题,总结汇总下,开始学习研究