zoukankan      html  css  js  c++  java
  • docker简单介绍----Dockerfile命令

    DockerFile的组成部署:

    下面优先介绍下Dcokerfile的基础指令

    一、CMD指令:容器启动时要莫热门运行的命令,如果有多个CMD指定,最后一个生效

    使用方法:

    CMD ["executable","param1","param2"] 使用 exec 执行,推荐方式;

    CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用;

    CMD ["param1","param2"] 提供给 ENTRYPOINT 的默认参数;

    举例:CMD ["/usr/sbin/httpd","-c","/etc/httpd/conf/httpd.conf"]

    二、ENTRYPOINT 指令:功能类似于CMD,但是优先级较高,如果CMD和ENTRYPOINT指令同时存在,ENTRYPOINT会覆盖CMD指令

    使用方法:

    ENTRYPOINT ["executable", "param1", "param2"]

    ENTRYPOINT command param1 param2(shell中执行)

    举例:(使用列表的方式来指定参数)

    ENTRYPOINT ["top", "-b"]    

    三、WORKDIR指令:从镜像创建一个新容器时,在容器内部设置一个工作目录,ENTRYPOINT和/或CMD指定的程序会在这个目录下执行,

    个人理解:例如需要执行自带的tomcat脚本  需要切换到$HOME/bin下执行start.sh脚本来启动,

    举例:

    WORKDIR /opt/tomcat/bin

    RUN  ./start.sh

    四、ENV指令:用来在镜像构建过程中设置环境变量,这些变量会写入到镜像中永久有效,也可以用docker run -e参数来传递环境变量,这些变量只在容器运行时有效

    例如:

    ENV JAVA_HOME /usr/local/java/bin   yum install nginx

    WORKDIR $JAVA_HOME

    设置容器临时变量运行:

    docker run -it -e "JAVA_HOME=/usr/local/java"  tomcat  env

    HOME=/

    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin

    WEB_PORT=8080

    五、USER指令:指定该镜像会以什么用户运行,默认是root

    语法:

    USER  nginx

    USER  nginx:nginx

    USER  uid

    USER  uid:gid

    USER  user:gid

    USER   uid:group

    也可以使用docker run -u选项来覆盖指令指定的值

    六、VOLUME指定:用来向基于镜像创建的容器添加卷,一个卷是可以存在于一个或者多个容器内的特定目录,绕过联合文件系统,并提供如下共享数据或者

    对数据进行持久化的功能

    用法:只能使用docker-managed volume而不能使用Bind-mount Volume,意思是无法指定宿主机上的挂载目录

    VOLUME  ["/data"]

    七、ADD指令:用来将构建环境下的文件和目录复制到镜像中,相当于将宿主机的文件复制到镜像新创建的镜像中

    例如:

    ADD /opt/boss.war  /opt/tomcat/webapps/boss.war

    源文件也可以是url格式的

    ADD http://wordpress.org/latest.zip /root/wordpress.zip

    ADD还可以用来解压#将ghd.tar.gz 解压到/var/www  如果目标目录存在和压缩包命名相同的文件,则不会覆盖

    ADD ghd.tar.gz /var/www 

    八、COPY指令:和ADD指令很相似,但是没有解压功能

    语法:源文件或者目录必须宇dockerfile文件在同一目录     复制目录时。des目标目录必须以"/"结尾

    COPY 源文件/目录    目标文件/目录

    例子:

    COPY文件:COPY  index.html  /opt/

    COPY目录: COPY  opt  /data/opt/   #将宿主机的opt目录拷贝到容器的/data下,必须写目录名称并且以“/ ”结尾

    九、ONBUILD指令:能为镜像添加触发器,当一个镜像被用做其他镜像的基础镜像时(比如你的镜像需要从某未准好的位置

    添加源代码,或者你需要执行特定于构建镜像环境的构建脚本),该镜像中的触发器将会被执行

    举例:

    使用一个ubuntu基础镜像来构建一个新镜像,并使用ONBUILD来创建一个mydir的目录

    FROM ubuntu
    MAINTAINER hello
    ONBUILD RUN mkdir mydir
    构建镜像:
    docker build -t imagea .
    利用imagea镜像创建容器: docker run --name test1 -it imagea /bin/bash
    这时会发现根目录下没有mydir目录
    我们在写一个新的Dockerfile文件,以imagea作为基础镜像
    十、EXPOSE:指定容器启动端口号
    语法:默认是tcp协议并且可以指定多个EXPOSE

     
    EXPOSE  80/tcp
    EXPOSE  2222/udp

     

     FROM imagea
       RUN ls

    [root@guohaidong dockerfile]# docker build -t imageb .
    Sending build context to Docker daemon 2.048 kB
    Step 1/2 : FROM imagea
    # Executing 1 build trigger...
    Step 1/1 : RUN mkdir mydir
     ---> Running in 13c2e09dafb9
    
     ---> 085a6989e15d
    Removing intermediate container 13c2e09dafb9
    Step 2/2 : RUN ls
     ---> Running in 0cf60df45aa6
    
    anaconda-post.log
    bin
    dev
    etc
    home
    lib
    lib64
    media
    mnt
    mydir
    opt
    proc
    root
    run
    sbin
    srv
    sys
    tmp
    usr
    var
     ---> 753e79c490a3
    Removing intermediate container 0cf60df45aa6
    Successfully built 753e79c490a3
    View Code
    利用上面的dockerfile文件构建镜像: docker build -t imageb .
    利用imagea镜像创建容器: docker run --name test2 -it imageb /bin/bash
    我们没有看到根目录下已经有mydir目录了,从构建过程中也可以看出来


    ============================================================
    案例:编译安装redis
    首先下载centos镜像
    docker search centos
    docker pull centos
    然后使用docker run进入到容器,将c++和make安装上
    yum update
    yum -y install gcc gcc-c++ make vim curl
    使用docker commit生成新的基础镜像
    docker commit 容器id 镜像名称:tag
    在基础镜像上编写Dockerfile来build镜像
    FROM    centos:base-v2
    MAINTAINER      "Guohaidong <18310208368@163.com>"
    WORKDIR /etc/redis-3.2.8/
    ADD redis-3.2.8.tar.gz  /etc/
    RUN cd /etc/redis-3.2.8/src
    RUN  sh -c make
    COPY redis.conf /etc/redis-3.2.8/redis.conf
    EXPOSE 6379
    CMD ["/etc/redis-3.2.8/src/redis-server","redis.conf"]
    View Code
    使用docker build生成新镜像
    docker build -t redis:v2 . #注意点

    运行镜像
     
    docker run -d --name redis-node-79 -h redis-server -p 10.10.32.150:8379:6379 -v /etc/redis-3.2.8/ a455

    测试正常并且已经将容器中的目录挂载到了宿主机目录
  • 相关阅读:
    DGA域名可以是色情网站域名
    使用cloudflare加速你的网站隐藏你的网站IP
    167. Two Sum II
    leetcode 563. Binary Tree Tilt
    python 多线程
    leetcode 404. Sum of Left Leaves
    leetcode 100. Same Tree
    leetcode 383. Ransom Note
    leetcode 122. Best Time to Buy and Sell Stock II
    天津Uber优步司机奖励政策(12月28日到12月29日)
  • 原文地址:https://www.cnblogs.com/python-cat/p/10375978.html
Copyright © 2011-2022 走看看