1.dockerfile自动构建镜像的思路
#手动制作docker镜像,记录历史命令
#根据历史命令编写dockerfile文件
#docker build构建docker镜像
#测试镜像的功能
2.dockerfile常用指令
1.FROM 基础镜像 例子:FROM centos:7 2.RUN 制作镜像过程中需要的执行命令(安装服务) 例子:RUN yum install nginx php-mbstring php-fpm php-gd php-mysql -y 3.CMD 容器启动的时候执行的初始命令,容易被替换(启动服务) 例子:CMD ["/bin/bash","/init.sh"] 4.ENTRYPOINT 容器启动的时候执行的初始命令,不能被替换,如果同时使用CMD和ENTRYPOINT,cmd命令将作为ENTRYPOINT命令的参数 #未使用ENTRYPOINT制作的镜像,然后启动镜像符加命令fadfafasdf [root@docker01 dockerfile]# docker run -d -p 180:80 kod:v7 fadfafasdf 391dab61c85d595d970e5ae4680f7b90682d2a7b7dbf0bd844016a9a4a26a0d2 docker: Error response from daemon: OCI runtime create failed: container_Linux.go:346: starting container process caused "exec: \"fadfafasdf\": executable file not found in $PATH": unknown. #使用ENTRYPOINT制作的镜像,然后启动镜像符加命令fadfafasdf(实际上运行的是dockerfile里面ENTRYPOINT指定的命令) [root@docker01 dockerfile]# docker run -d -p 180:80 kod:v7 fadfafasdf 391dab61c85d595d970e5ae4680f7b90682d2a7b7dbf0bd844016a9a4a26a0d2 5.ADD 把dockerfile当前目录下的文件拷贝到容器中(自动解压tar包) 例子:ADD www.conf /etc/php-fpm.d/www.conf 6.COPY 把dockerfile当前目录下的文件拷贝到容器中(不解压tar包) 例子:COPY kodexplorer4.40.zip . 7.WORKDIR 指定容器的默认工作目录 例子:WORKDIR /html 8.EXPOSE 镜像要暴露的端口 例子:EXPOSE 80 8080 随机映射到80和8080两个端口 结合docker run -d -P centos:7 9.VOLUME 持久化卷 例子:VOLUME /usr/share/nginx/html 10.ENV 环境变量(ssh的密码,数据库的密码) 例子:ENV SSH_PWD=123456 vi init.sh #!/bin/bash if [ -z $SSH_PWD ];then SSH_PWD=$1 fi echo $SSH_PWD|passwd --stdin root nginx /usr/sbin/sshd -D 11.LABEL 镜像的属性标签 例子:LABEL name=test mail=test@163.com 12.MAINTAINER 管理者标识 例子:MAINTAINERxiaohuzi(admin@xiaohuzi.cn)
3.dockerfile的优化
a: 使用体积小的linux镜像alpine b:尽可能的清理无用的缓存文件 c:修改dockerfile的时候,尽可能把修改的内容放在最后 d:使用.dockerignore忽略构建docker镜像时,不需要的文件
4.根据历史命令编写dockerfile文件
FROM centos:7 RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Cento s-7.repo RUN yum install nginx php-mbstring php-fpm php-gd php-mysql -y ADD www.conf /etc/php-fpm.d/www.conf ADD nginx.conf /etc/nginx/nginx.conf RUN mkdir /html WORKDIR /html COPY kodexplorer4.40.zip . RUN yum install unzip -y RUN unzip kodexplorer4.40.zip RUN chown -R nginx:nginx . RUN yum install mariadb-server -y ADD init.sh /init.sh CMD ["/bin/bash","/init.sh"]
CMD脚本文件
#!/bin/bash /usr/libexec/mariadb-prepare-db-dir &>/dev/null & /usr/bin/mysqld_safe --basedir=/usr &>/dev/null & sleep 5 mysql -e "create database kod;" mysql -e "grant all on kod.* to discuz@localhost identified by '123456'"; /usr/sbin/php-fpm --daemonize nginx -g 'daemon off;'
5.docker build构建docker镜像
#切换到dockerfile文件所在目录 [root@docker01 dockerfile]# cd /opt/dockerfile/ #开始构建 [root@docker01 dockerfile]# docker build -t kod:v8 . #构建完成 Successfully built 29c2786cc6dc Successfully tagged kod:v8
6.测试镜像的功能
[root@docker01 dockerfile]# docker run -d -p 80:80 kod:v8 7451c4975acbb4a6208137540b12b48f088a800060a23705e1036b6a6270dcbe [root@docker01 dockerfile]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7451c4975acb kod:v8 "/bin/bash /init.sh" 5 minutes ago Up 5 minutes 0.0.0.0:80->80/tcp condescending_leakey
访问web测试
PS:此例完整dockerfile文件在下方下载
赞赏微信赞赏
支付宝赞赏