构建镜像的方式
1.1 使用docker commit创建镜像使用docker commit创建镜像的过程是这样的,首先下载一个干净的系统基础镜像,在其运行出的容器里面安装你想要的安装的软件,在安装完设置完成之后,使用docker commit来完成创建。
dockerfile 就是一个docker官方定义的一个小的用于构建镜像的脚本语言。
举例测试(使用Dockerfile构建mysql镜像)
1、创建Dockerfile并写入以下内容
root@mike-k8smaster:~/dockertest# mkdir -p /home/dockertest/nginx
root@mike-k8smaster:~/dockertest# cd /home/dockertest/nginx
root@mike-k8smaster:~/dockertest# vi Dockerfile
内容如下
FROM centos:7
MAINTAINER this is nginx image
RUN yum install -y wget proc-devel net-tools gcc zlib zlib-devel make openssl-devel
RUN wget http://nginx.org/download/nginx-1.9.7.tar.gz
RUN tar zxvf nginx-1.9.7.tar.gz
WORKDIR nginx-1.9.7
RUN ./configure --prefix=/usr/local/nginx && make && make install
EXPOSE 80
EXPOSE 443
RUN echo "daemon off;">>/usr/local/nginx/conf/nginx.conf
WORKDIR /opt/nginx
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]
root@mike-k8smaster:~/dockertest# vim run.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx
2、开始构建
root@mike-k8smaster:~/dockertest# docker build -t nginx:new .
构建成功:
3、测试
docker run -d -P nginx:new //启动容器,-p随机指定宿主机端口映射容器中nginx服务相关端口
docker ps -a //查看容器
可以看到端口为49154,我主机为172.21.6.132,浏览器访问172.21.6.133:172.21.6.132
语法规则介绍:
1. FORM 这个命令是放在脚本首行,用于说明构建的新镜像的基础镜像是哪个镜像哪个版本,和commit构建镜像的时候我们准备一个干净的系统镜像是一样的。
2. MAINTAINER 用来指定作者是谁
3. RUN 运行一条指令,这个命令就是指定要运行的命令是什么
example:
RUN cd /usr/bin && ll > dirs.txt
RUN ehco “hello”
4. CMD 用于容器启动的时候指定的 *** 作,可以是一条命令或一个脚本,而且这个命令只能有一条
5. ENTRYPOINT 和cmd命令的 *** 作是一样的
6. USER 用于指定容器启动的用户,默认是root
7. EXPOSE 用于暴露端口,如果容器是mysql的容器就指定出来暴露3306端口,如果是web应用指定暴露8080端口等等。
8. ENV 向容器内部注入环境变量,比如说要设置JAVA_HOME环境变量需要ENV JAVA_HOME /usr/local/jdk1.8
9. ADD 向容器中添加文件
10. COPY 向容器中添加文件和ADD的效果是一样的,不同的是COPY不会解压压缩文件,ADD 遇到tar.gz等压缩文件会进行解压,ADD 还可以指定url地址下载并添加
11. WORKDIR 切换目录,和Linux的cd命令是一样的,和RUN cd …效果是一样的
12. ONBUILD 这个命令其实不是给定义的镜像,自己使用的,而是如果别人拿你现在定义的这个镜像去构建新的镜像的时候它才会运行。
example:
ONBUILD RUN xxx.sh
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)