dockerfile 创建Jenkins镜像

 

最近在学习docker,docker 基础在前面的文章已经讲解。

基本结构:

FROM ubuntu:latest

MAINTAINER wwyx wwyzxs@163.com

WORKDIR /opt

ADD ./tool/jdk-8u65-linux-x64.tar /opt/

ADD ./tool/apache-tomcat-8.5.9.tar.gz /opt/

ADD ./jenkins.war /opt/apache-tomcat-8.5.9/webapps

#RUN yum -y update
#RUN tar -xvf jdk-8u65-linux-x64.tar -C /opt/

#RUN tar -xvf apache-tomcat-8.5.9.tar.gz -C /opt
#set environment

ENV JAVA_HOME /opt/jdk1.8.0_65
ENV CLASSPATH .:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $JAVA_HOME/bin:$PATH

# tar -xvf redmine.tar 如果源文件是个归档文件(压缩文件),则docker会自动帮解压

#RUN useradd mysql && \
#chmod -R 777 /opt/redmine.org.cn/apache2/htdocs/ && \
#chmod -R 755 /opt/redmine.org.cn/apache2/htdocs/database/ && \
#chmod -R 777 /opt/redmine.org.cn/mysql/ && \
#chmod -R 755 /opt/redmine.org.cn/mysql/my.cnf && \
#chmod 777 /opt/redmine.org.cn/ctlscript.sh

#ADD ./configuration.yml /opt/redmine.org.cn/apache2/conf/configuration.yml
ADD run.sh /opt/run.sh
RUN chmod 755 /opt/run.sh

CMD ["/opt/run.sh"]

EXPOSE 8080

下面进行介绍。

1.FROM 

指定所创建的镜像的基础镜像,如果本地 不存在则会去docker hub下载指定镜像。

格式为FROM<images>,FROM<images>:<tag>

每个Dockerfile中的第一条指令必须为FROM指令。

2.MAINTAINER

指定维护者信息,格式为MAINTAINER<name>

3.RUN

运行指定 命令。格式为RUN <command>或者RUN ["exec","param1","param2"]

前者在终端中执行命令,即bin/sh -c;后者在exec中执行,不会启动shel环境。

指定其他终端类型可以用RUN ["bin/bash","-c","echo hello"].

每条RUN指令将在当前镜像中执行,并提交为新的镜像。当命令较长时,可以用\换行。

RUN apt-get update \

                      && apt-get install -y libsnappy-dev zliblg-dev libbz2-dev \

                      && rm -rf /var/cache/apt

4.CMD

CMD 指令用来指定容器时默认执行的命令。它支持三种方式:

CMD ["exec","param1","param2"]使用exec执行,是推荐使用的方式。

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

CMD ["param1","param2"]提供给ENTRYROINT的默认参数。

每个dockerfile只能有一个cmd。多了则执行最后一条,如果run的时候进行了其他命令,则会覆盖掉CMD的命令。

6.EXPOSE

指定服务器监听的端口。

7.ENV

指定环境变量,在镜像生成过程中会被后续RUN指令使用。

ENV<key><value>或者ENV<key>=<value>。。。

运行环境可以覆盖环境变量,例如:docker run --env <key>=<value> build_image。

8.ADD

ADD<src><dest>

将指定<src>路径下的内容复制到<dest>路径下。

<src>可以使dokcerfile所在目录的相对路径,也可是URL,还可以是tar(tar 会自动解压到<dest>路径下)。<dest>可以是镜像内的绝对路径,或者是WORKDIR的相对路径。

创建一个镜像的命令。

1.执行构建命令。

我的命令:docker build -t wang/jenkins .

例子:docker build -t liuge1988/jenkins:base -f /opt/test/dockerfile /opt/test

 

-t 要生成的镜像, user/repo:tag

 

-f dockerfile文件所在路径

 

/opt/test 可以是任意目录,要同步拷贝到新生成镜像的目录,用于初始化目录内容

2.容器启动

我的命令:docker run -itd --name jenkins -p 8080:8080 wang/jenkins

3.查看容器启动情况

3.查看logs 

docker logs jenkins

4.查看Jenkins页面(成功)

 

 问题解决:

docker启动ubuntu(别的)cmd会自动退出问题

docker启动ubunt镜像有两种版本可以解决自动退出的问题:

 方式一:

     docker run -d -it 【image-ID】 /bin/sh

  

  方式二:

    在启动脚本里面增加一个执行进程:

      1.在镜像内部执行 RUN touch /var/log/1.txt  然后最后用CMD "tail" "-f" "/var/log/1.txt"结尾

      2.启动脚本的方式 

 #!/bin/bash

set -m && \
    sh /opt/redmine.org.cn/ctlscript.sh start && \
    touch /var/log/1.txt && \
    tail -f /var/log/1.txt
posted @ 2018-01-29 17:13  汪一溪  阅读(759)  评论(0编辑  收藏  举报