第四阶段
时 间: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!