Dockerfile文件的使用,创建apache镜像,启动容器并访问外部网站

image.png

这节我们要实现下面一些内容
image.png

我们根据上节课的镜像(centos) docker run -i -t centos(上节课这样加入镜像到容器)
image.png

下面我们创建一个新的镜像也叫centos 只不过tag名称不一样
通过Dockerfile方式创建(官方推荐的方式)
Dockerfile可以简单为一个配置文件 可以在我们构建镜像的时候放入一些命令
官方文档地址如下
下面我们使用Dockerfile构建镜像 先看个案例
image.png

接下来进行操作
比如我们想在纯净的centos镜像里安装apache
首先创建个空文件夹build
mkdir build
cd build
vim Dockerfile
加入如下内容
image.png

保存退出
FROM 表示从一个已有的纯净的镜像创建一个新的镜像 RUN 表示在创建镜像的时候执行的命令 EXPOSE 80表示暴露80端口
cat Dockerfile
image.png

根据Dockerfile创建一个新的镜像
使用docker build命令 用于读取Dockerfile创建镜像
image.png

接下来在xshell中执行
docker build -t centos:httpd .
其中-t指定镜像名称(centos) httpd是tag名称 最后面有个点. 必须要有 代表当前文件夹
运行如下
image.png

下载了一些相关的依赖和httpd(apache)
下面执行docker images
image.png

出现如下镜像 就是我们使用Dockerfile创建的镜像
镜像创建好了 下一步 我们使其以容器的方式启动
image.png

xshell中执行
运行如下(创建了个容器)
image.png

执行docker ps 查看正在运行的镜像
image.png

发现刚刚的容器并没有运行
docker ps -a
image.png

说明容器没有启动(已经创建了)
接下来执行如下
image.png

说明myhttpd还没有启动(实际上是启动后自动关闭了)
为了解决容器启动不出 我们首先把创建的这个容器删掉
docker rm myhttpd
image.png

image.png

接下来使用交互式命令
docker run -i -t -p 8080:80 --name myhttpd centos:httpd
运行如下
image.png

进入到root下面了(可以启动了)
查看httpd状态
image.png

发现没有权限
执行ps -ef | grep httpd
image.png

发现容器里面httpd的进程没有被启动
接下来ctrl+d退出交互式命令
docker ps
image.png

下面我们解决下为什么启动不了
image.png

接下来执行如下命令
首先删除刚创建的容器
接着执行下面命令
docker run --privileged -d -p 8080:80 --name myhttpd centos:httpd /usr/sbin/init
--privileged 表示给容器加特权 否则交互式方式进入容器无法操作(灭有权限) /usr/sbin/init 表示容器启动成功后执行的进程(由于centos启动容器的时候并没有执行,所以需要手动执行一次init进程)
image.png

执行docker ps
image.png

可以发现启动成功了新的容器 myhttpd
这个容器跟上节课的纯净的容器有很多区别
纯净的容器里面COMMAND指向命令 /bin/bash
而新的容器 指向/usr/sbin/init
新创建的容器有端口 并且将宿主机的8080端口(虚拟机)映射到了容器的80端口
容器的80端口通过Dockerfile文件暴露出80端口的(而不是通过防火墙放行)
接下来进入容器操作一些内容怎么办呢
执行下面命令
docker exec -i -t myhttpd /bin/bash
image.png

以上就通过bash方式进入了容器
执行systemctl status httpd查看httpd状态
image.png

以上就是在容器中启动centos然后安装apache暴露端口 启动网站的基本过程
接下来在浏览器输入http://192.168.31.125:8080/
image.png

可以看见apache给我们配置的默认网站
上面我们启动容器 启动apache服务加入一堆参数
那么能不能直接在Dockerfile中干这些事呢
image.png

需要先停掉新启动的容器 在删除容器 在删除镜像
docker stop myhttpd docker rm myhttpd
docker rmi centos:httpd 删除镜像
然后修改Dockerfile文件
加入如下
CMD /usr/sbin/init 这相当于
docker run --privileged -d -p 8080:80 --name myhttpd centos:httpd /usr/sbin/init
最后执行的进程参数
修改后保存
再次执行
docker build -t centos:httpd .
docker run --privileged -d -p 8080:80 --name myhttpd centos:httpd
查看容器是否启动成功 并且网站是否能够正常运行
最后了解下查看容器的日志
image.png

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容