文章目录
1)创建环境目录
[root@docker ~]# mkdir -p /opt/dockerfile/lamp
[root@docker ~]# cd /opt/dockerfile/lamp/
[root@docker lamp]#
2)编写dockerfile
[root@docker lamp]# cat dockerfile
# Centos6.9_sshd_LAMP
FROM centos:6.9
RUN mv /etc/yum.repos.d/*.repo /tmp && echo -e "[ftp]\nname=ftp\nbaseurl=ftp://10.0.0.71/centos6.9\ngpgcheck=0">/etc/yum.repos.d/ftp.repo && yum makecache fast && yum install openssh-server htppd mysql mysql-server php php-mysql -y
RUN /etc/init.d/sshd start && echo "123456" | passwd root --stdin && /etc/init.d/mysqld start && /etc
/init.d/httpd start
COPY init.sh /
ADD bbs.tar.gz /var/www/html/
EXPOSE 22
EXPOSE 80
EXPOSE 3306
CMD ["/bin/bash","/init.sh"]
3)编写init.sh并准备bbs.tar.gz
[root@docker lamp]# pwd
/opt/dockerfile/lamp
[root@docker lamp]# ll
total 10136
-rw-r--r-- 1 root root 10370204 Jun 12 11:30 bbs.tar.gz
-rw-r--r-- 1 root root 501 Jun 12 12:03 dockerfile
-rwxrwxrwx 1 root root 228 Jun 12 11:54 init.sh
[root@docker lamp]# cat init.sh
#!/bin/bash
/etc/init.d/mysqld start
mysql -e "grant all on *.* to root@'%' identified by '123';grant all on *.* to discuz@'%' identified by '123';create database d
iscuz charset utf8;"
/etc/init.d/httpd start
/usr/sbin/sshd -D
4)执行命令制作LAMP镜像
[root@docker lamp]# docker build -t lamp:v4 ./
5)查看镜像,启动容器
[root@docker lamp]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
lamp v4 6179002d4b71 7 seconds ago 466MB
lamp_v3 latest fc7af5ee8b90 25 hours ago 566MB
lamp v2 ac3360003236 25 hours ago 509MB
lamp_v1 latest cd120b6e4dc1 26 hours ago 331MB
centos 6.9 2199b8eb8390 3 years ago 195MB
[root@docker lamp]# docker container run -d -p 22 -p 80 -p 3306 lamp:v4
cd4e7953e97c802f369b1dd7b51d9bf9cc0e2101308441e19ced43167167f243
[root@docker lamp]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cd4e7953e97c lamp:v4 "/bin/bash /init.sh" 9 seconds ago Up 7 seconds 0.0.0.0:49155->22/tcp, :::49155->22/tcp, 0.0.0.0:49154->80/tcp, :::49154->80/tcp, 0.0.0.0:49153->3306/tcp, :::49153->3306/tcp reverent_driscoll
6)根据随机生成的端口,检查服务是否可以正常启动和运行
7)补充注意事项
1)RUN后面可以有两种命令执行方式,一种是bash,一种是服务类命令。服务类命令用中括号括起来,每个参数用双引号表示,不同参数用逗号隔开。
2)COPY 从dockerfile所在目录,拷贝目标文件到容器的制定目录下,可以支持统配符,如果拷贝的是目录,只拷贝目录下的子文件子目录。
3)ADD 相比于COPY,可以自动解压.tar*的软件包到目标目录下。但如果后面是URL源文件的下载地址,则不能自动解压。本案例的init.sh与bbs.tar.gz解压后的文件全部设定是可读可写。
chmod -R 777 *
4)CMD和ENTRYPOINT的区别在于,在利用镜像启动容器时,前者加载的第一进程可以被其他命令覆盖掉,后者的其他命令不会覆盖ENTRYPOINT的命令。
5)ENV就相当于创建一个变量,方便根据情况赋予不同值,体现了dockerfile的通用性。