Dockerfile构建LAMP基础环境镜像

文章目录

  • 1)创建环境目录
  • 2)编写dockerfile
  • 3)编写init.sh并准备bbs.tar.gz
  • 4)执行命令制作LAMP镜像
  • 5)查看镜像,启动容器
  • 6)根据随机生成的端口,检查服务是否可以正常启动和运行
  • 7)补充注意事项

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的通用性。

你可能感兴趣的:(docker,docker,centos,运维)