dockerfile自动构建镜像LNMP

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测试

dockerfile自动构建镜像LNMP

 

PS:此例完整dockerfile文件在下方下载

赞赏

微信赞赏支付宝赞赏

下载权限

查看
  • ¥{{right.value}}
    {{right.value}}
    免费下载
    评论后下载
    登录后下载

  • {{attr.name}}:
您当前的等级为
您有每天下载所有资源次的特权,今日剩余 已取得下载权限
Docker

什么是docker容器

2020-3-3 11:58:00

Docker

手动制作Centos7的docker镜像

2020-3-4 9:19:22

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索