Dockerfile 其实一个文本文件,其中包含了若干个符合 Docker 解析规范的指令,指令描述了构建镜像的步骤或者一些细节。
首先,我们新建一个简单的 Dockerfile,文件名就叫做Dockerfile
,其内容如下:
FROM nginx RUN echo ‘<h1>SpringCloud-Docker</h1>‘ > /usr/share/nginx/html/index.html
上面的 Dockerfile 基于 nginx 镜像修改了 index.html 首页,首页显示SpringCloud-Docker
内容。
我们可以通过 Docker 来构建此镜像并运行:
tom@ubuntu:~/Desktop/3/docker1$ sudo docker build -t nginx-demo .
Sending build context to Docker daemon 2.048kB
Step 1/2 : FROM nginx
latest: Pulling from library/nginx
45b42c59be33: Pull complete
8acc495f1d91: Pull complete
ec3bd7de90d7: Pull complete
19e2441aeeab: Pull complete
f5a38c5f8d4e: Pull complete
83500d851118: Pull complete
Digest: sha256:f3693fe50d5b1df1ecd315d54813a77afd56b0245a404055a946574deb6b34fc
Status: Downloaded newer image for nginx:latest
---> 35c43ace9216
Step 2/2 : RUN echo ‘<h1>SpringCloud-Docker</h1>‘ > /usr/share/nginx/html/index.html
---> Running in c8bb31f5043d
Removing intermediate container c8bb31f5043d
---> 16e25cfdf65d
Successfully built 16e25cfdf65d
Successfully tagged nginx-demo:latest
tom@ubuntu:~/Desktop/3/docker1$ sudo docker run -p 8080:80 nginx-demo
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
192.168.154.1 - - [21/Feb/2021:08:18:51 +0000] "GET / HTTP/1.1" 200 28 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36" "-"
2021/02/21 08:18:51 [error] 31#31: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 192.168.154.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "192.168.154.131:8080", referrer: "http://192.168.154.131:8080/"
192.168.154.1 - - [21/Feb/2021:08:18:51 +0000] "GET /favicon.ico HTTP/1.1" 404 555 "http://192.168.154.131:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36" "-"
随后访问http://localhost:8080
得到如下响应:
或者控制台执行如下指令:
curl localhost:8080
响应如下:
<h1>SpringCloud-Docker</h1>
常见指令
上面的 Dockerfile 提到了 FROM、RUN 指令。事实上,Dockerfile 有十多个指令,一般格式是:指令名称 参数。 FROM 指定基础镜像:FROM <image>:<tag> 比如基于 Java JDK 环境的镜像:openjdk:8-jre-alpine:latest ADD 复制文件:ADD <src> <dest> 从src目录复制文件到容器的dest目录,其中 src 可以是 Dockerfile 所在目录的相对路径,也可以是一个 URL,还可以是一个压缩包。 COPY 复制文件:COPY <src> <dest> COPY 和 ADD 指令类似,COPY 不支持 URL 的压缩包。 ENTRYPOINT 入口点:ENTRYPOINT command param1 param2
指定 Docker 容器启动时执行的命令。
更多指令可以参考官方文档,这里不一一讲解。接下来开始对我们前面的 Eureka Server 微服务进行改造,使其运行在 Docker 容器中。
原文:https://www.cnblogs.com/lzjloveit/p/14426136.html