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