从小白到大神之路之学习运维第73天-------基于Dockerfile构建镜像应用(构建Tomcat镜像、MySQL、LNMP、Redis、面试题《CMD、ENTRYPOINT与RUN命令对比》)
一、Dockerfile构建Tomcat镜像二、Dockerfile构建MySQL镜像三、Dockerfile构建LNMP镜像四、Dockerfile构建Redis镜像五、Dockerfile面试题CMD、ENTRYPOINT与RUN命令对比
第四阶段
时 间:2023年8月3日
参加人:全班人员
内 容:
基于Dockerfile构建镜像应用
目录
3、生成新的镜像 secondtonone1/alpine-cmd
(四)RUN和CMD、ENTRYPOINT支持参数形式命令 :
一、Dockerfile构建Tomcat镜像
1、建立工作目录
[root@huyang1 ~]# mkdir tomcat
[root@huyang1 ~]# cd tomcat/
[root@huyang1 tomcat]# ls
apache-tomcat-8.5.40.tar.gz jdk-8u191-linux-x64.tar.gz
[root@huyang1 tomcat]# tar xf
jdk-8u191-linux-x64.tar.gz
[root@huyang1 tomcat]# tar xf
apache-tomcat-8.5.40.tar.gz

2、编写Dockerfile文件
[root@huyang1 tomcat]# vim Dockerfile

3、构建镜像
[root@huyang1 tomcat]# docker build -t tomcat:new .
[root@huyang1 ~]# docker images tomcat:new

4、测试容器
[root@huyang1 tomcat]# docker run -d -p 8080:8080 --name tomcat-test tomcat:new

5、浏览器访问测试:
http://192.168.100.131:8080

二、Dockerfile构建MySQL镜像
1、建立工作目录
[root@huyang1 ~]# mkdir mysql
[root@huyang1 ~]# cd mysql/

2、编写Dockerfile文件
[root@huyang1 mysql]# vim Dockerfile

[root@localhost mysql]# cat mysql.sh

3、构建镜像
[root@huyang1 mysql]# docker build -t mysql:new .
[root@huyang1 mysql]# docker run -d -p 3306:3306 --name mysql-test mysql:new

4、测试容器
[root@huyang1 mysql]# yum -y install mariadb mariadb-devel
[root@huyang1 mysql]# mysql -h 192.168.200.111 -u root -P 3306 -p123456

三、Dockerfile构建LNMP镜像
1、建立工作目录
[root@huyang1 ~]# mkdir lnmp/
[root@huyang1 ~]# cd lnmp/

2、编写Dockerfile文件
[root@huyang1 lnmp]# vim Dockerfile

[root@localhost lnmp]# vim mysql.sh

[root@localhost lnmp]# vim index.php

[root@localhost lnmp]# vim default.conf

[root@huyang1 lnmp]# vim run.sh

3、构建镜像
[root@huyang1 lnmp]# docker build -t lnmp:new .
[root@huyang1 lnmp]# docker images lnmp

4、测试容器
[root@huyang1 lnmp]# docker run -d -p 80:80 -p 3306:3306 -p 9000:9000 --name lnmp-test lnmp:new
备注:每一个端口都必须加上-p选项,否则不启动!

5、浏览器访问测试:
http://192.168.100.131/index.php

四、Dockerfile构建Redis镜像
1、建立工作目录
[root@huyang1 ~]# mkdir redis
[root@huyang1 ~]# cd redis/

2、编写Dockerfile文件
[root@huyang1 redis]# vim Dockerfile

3、构建镜像
[root@localhost redis]# docker build -t redis:new .
[root@localhost redis]# docker images redis:new

4、测试容器
[root@localhost redis]# docker run -d -p 6379:6379 --name redis-test redis:new

[root@localhost redis]# rpm -ivh /root/epel-release-latest-7.noarch.rpm
[root@localhost redis]# yum -y install redis

[root@localhost redis]# redis-cli -h localhost -a 123456

五、Dockerfile面试题
CMD、ENTRYPOINT与RUN命令对比
(一)CMD命令
是在容器启动后执行的命令,一个Dockerfile可以有多个CMD,但是只有最后一个CMD生效。当容器启动时如果指定了命令,那么CMD的命令将被忽略。
例:
下载alpine镜像
docker pull alpine

1、建立工作目录

2、编写Dockerfile文件

3、生成新的镜像 secondtonone1/alpine-cmd
docker build -t secondtonone1/alpine-cmd .

4、生成后生成容器
docker run --rm --name cmd secondtonone1/alpine-cmd
可以看到输出Docker了

接下来我们在容器启动时后边增加一个命令
docker run --rm -it --name cmd
secondtonone1/alpine-cmd sh

此时进入了容器内部,执行了sh命令。Dockerfile中的CMD被忽略了。
(二)RUN命令
是在构建镜像时执行的命令,我们可以安装一些应用。
例:Dockerfile文件如下:

1、生成镜像
docker build -f Dockerfile -t cmd2 .

2、生成容器并启动
docker run -it --rm cmd2
可以看到容器启动后调用了cmd命令netstat

(三)ENTRYPOINT
和CMD不同,他不会被docker启动后执行的命令覆盖
例:Dockerfile文件如下:

1、生成镜像
docker build -f Dockerfile -t cmd3 .

2、生成容器并启动
docker run -it --rm cmd3 /bin/bash
可以看到容器启动后并没有执行/bin/bash命令,而是调用了ENTRYPOINT命令netstat

(四)RUN和CMD、ENTRYPOINT支持参数形式命令 :

1、生成镜像
docker build -f ./Dockerfile -t cmd4 .

2、运行容器 :
docker run -it --rm cmd4
可以看到输出了Hello, Docker!

更多推荐




所有评论(0)