您的 Dockerfile 中需要纠正的地方很少
为您的基础图像使用特定版本
FROM ubuntu:18.04 将特定版本添加到您的FROM 映像中,这有助于了解此 Docker 映像是使用什么版本的基础映像(Ubuntu:18.04)构建的 .
组合多个RUN 命令
将多个 RUN 命令合并到单个 RUN 命令,如果可能的话,有助于减少 docker 层的数量,从而减小图像的大小。
检查 Dockerfile 最佳实践 - https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#run
改变这个
RUN apt-get update
RUN apt-get install apache2 -y
RUN apt-get install apache2-utils -y
到
RUN apt-get update && \
apt-get install -y apache2 apache2-utils && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
CMD 修正
正如您在ENTRYPOINT 中已经提到的apache2ctl 无需在您的CMD 中再次提及。您的命令被解释为 apache2ctl /usr/sbin/apache2ctl -DFOREGROUND。因此 docker run 命令失败。
以下是您的Dockerfile 的修改方式:
$ cat Dockerfile
FROM ubuntu:18.04
RUN apt-get update && \
apt-get install -y apache2 apache2-utils && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
EXPOSE 80
ENTRYPOINT ["apache2ctl"]
CMD ["-DFOREGROUND"]
现在构建 Docker 映像,就像你所做的那样。
$ docker build -t myimage:1.0 .
Sending build context to Docker daemon 38.3MB
Step 1/5 : FROM ubuntu:18.04
---> cf0f3ca922e0
Step 2/5 : RUN apt-get update && apt-get install -y apache2 apache2-utils && apt-get clean && rm -rf /var/lib/apt/lists/*
---> Using cache
---> 2f47b3a5e735
Step 3/5 : EXPOSE 80
---> Using cache
---> 5b395b19a0dc
Step 4/5 : ENTRYPOINT ["apache2ctl"]
---> Using cache
---> be1afc8d76c3
Step 5/5 : CMD ["-DFOREGROUND"]
---> Running in 3d0d78c566e2
Removing intermediate container 3d0d78c566e2
---> 00167996f7f3
Successfully built 00167996f7f3
Successfully tagged myimage:1.0
以分离模式运行容器,-d,用于在后台运行进程。
$ docker run -d -p 80:80 myimage:1.0
eccb77059f9ce8628e7a47d64adb9d20a3ca6cb3cecce06935b46eb13652b992
$ docker ps | grep eccb77
eccb77059f9c myimage:1.0 "apache2ctl -DFOREGR…" 14 seconds ago Up 12 seconds 0.0.0.0:80->80/tcp charming_payne
$ docker ps | grep eccb77
eccb77059f9c myimage:1.0 "apache2ctl -DFOREGR…" 27 seconds ago Up 25 seconds 0.0.0.0:80->80/tcp charming_payne
$ docker ps | grep eccb77
eccb77059f9c myimage:1.0 "apache2ctl -DFOREGR…" 4 minutes ago Up 4 minutes 0.0.0.0:80->80/tcp charming_payne
使用 localhost 和端口 80 访问 URL
$ curl http://localhost:80
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!--
Modified from the Debian original for Ubuntu
Last updated: 2016-11-16
See: https://launchpad.net/bugs/1288690
-->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Apache2 Ubuntu Default Page: It works</title>
<style type="text/css" media="screen">
* {
margin: 0px 0px 0px 0px;
padding: 0px 0px 0px 0px;
也来自浏览器