一般呢,docker构建镜像容器的方式有两种:一种是pull dockerhub仓库里面的镜像,一种是使用Dockerfile自定义构建镜像。
很多时候,公司要求的镜像并不一定符合dockerhub仓库里面的镜像,这时候我们就要自己构建镜像了,通过编辑dockerfile文件,来实现我们对镜像的要求。
无论是服务器更换或者是增加新的网站节点,只要把这个镜像放进私有仓库,新的服务器拉取到自己本地就可以使用,是不是很方便呢?
因为很多公司的网站平台是基于php语言来写的,我就举个例子:
构建一个wordpress的php网站环境的镜像。
镜像构成:Httpd、MySQL、PHP、wordpress。
首先呢,先写一个简单的控制脚本:
1 [root@smbands~]#vi start.sh 2 service httpd start #开启httpd服务。 3 service mysqld start #开启MySQL。 4 mysqladmin -uroot -p $MYSQL_ROOT_PASSWORD 更改默认MySQL登录密码。 5 tail -f #持续运行
编写Dockerfile文件
1 [root@smbands~]#vi Dockerfile #创建一个空Dockerfile文件。 2 3 FROM centos:6 #基于哪个操作系统 4 MAINTAINER Smbands #作者名称 5 RUN yum -y install httpd php php-gd php-mysql mysql mysql-server #使用yum安装一些必要的服务。 6 ENV MYSQL_ROOT_PASSWORD 123123 #使用变量给MySQL设置密码。 7 RUN echo "" > /var/www/html/index.php #创建php测试页。 8 ADD start.sh /start.sh #添加一个sh脚本。 9 RUN chmod +x /start.sh #给脚本赋予可执行权限。 10 11 ADD wordpress-4.9.4-zh_CN.tar.gz /var/www/html #将wordpress压缩包下载到本地,并解压到/var/www/html目录。 12 COPY wp-config-simple.php wp-config.php #将wordpress解压后的wp-config-simple.php文件复制一份重命名为wp-config.php。 13 COPY wp-config.php /var/www/html/wordpress #将文件拷贝到网站发布路径。 14 VOLUME ["/var/lib/mysql"] #将MySQL数据库目录挂载到容器。 15 16 CMD /start.sh #执行脚本 17 EXPOSE 80 3306 #开放 80 和3306端口
构建镜像容器
1 [root@smbands~]#docker build -t wordpress:v1 Dockerfile的路径 #说明一下 -t 给镜像命名 wordpress:v1 镜像名:TAG 。
等10分钟左右的时间镜像就可以构建完成。
然后你可以在镜像列表里面看到你构建的wordpress:v1的镜像
1 [root@smbands~]#docker images 2 REPOSITORY TAG IMAGE ID CREATED SIZE 3 wordpress v1 29364aa4074d About an hour ago 406 MB
启动镜像
1 [root@smbands~]# docker run -itd --name wordpress -p 80:80 wordpress:v1 2 [root@smbands~]#docker ps 3 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4 fe55c05eb309 wordpress:v1 "/bin/sh -c /start.sh" About an hour ago Up About an hour 0.0.0.0:80->80/tcp, 3306/tcp wordpress
启动容器后打开浏览器访问宿主机的IP就可以看到效果了。
把镜像放到私有仓库,今后的工作中,如果公司服务器新增节点或者更换服务器,直接将镜像拉取过来就可以直接使用了。