说明
本文介绍如何构建一个包含常用的命令的 docker ubuntu镜像,镜像运行时启动 nginx(使用的nginx是自己编译的版本)提供web服务。
创建编译目录
创建一个编译镜像的目录 build,复制本地的nginx文件夹到新目录。
mkdir build
cd build
cp -r /usr/local/nginx .
修改 nginx/conf/nginx.conf
文件为自己想要的配置。在这个例子中 nginx 监听端口8000,对外提供web服务。
创建start.sh文件
这个文件用于启动 nginx。内容如下:
#!/bin/bash
# 启动 nginx
nginx
# 循环,避免执行完命令后 docker 容器自动退出
while true; do sleep 1000; done
使用 chmod +x start.sh
命令给文件加上可执行权限。
创建Dockerfile文件
内容如下:
# 基础镜像使用ubuntu16.04
FROM ubuntu:16.04
# 设置apt源
RUN echo "deb http://mirrors.163.com/ubuntu precise main universe" > /etc/apt/sources.list
# 安装 vim ping ifconfig ip tcpdump nc curl iptables python 常用命令
RUN apt-get -y update && apt-get -qq -y install vim iputils-ping net-tools iproute tcpdump netcat curl iptables
# 指定工作目录
WORKDIR /root
# 复制 nginx 目录
COPY nginx /usr/local/nginx
# 复制进程启动脚本
COPY start.sh .
# 设置 PATH 环境变量包含 nginx 可执行文件
ENV PATH "$PATH:/usr/local/nginx/sbin"
# 对外使用端口8000
EXPOSE 8000
# 执行启动脚本
CMD ["/root/start.sh"]
编译镜像
执行 docker build --tag=myubuntu .
命令编译出名为 myubuntu 的镜像。
运行镜像
执行 docker run -d --rm --name nginx -p 127.0.0.1:8000:8000 --privileged myubuntu
命令运行镜像。这个命令将内部端口8000映射到本地端口8000,并且监听地址127.0.0.1。添加 --privileged
选项是为了可以正常使用 iptables
等命令。
验证web服务
用 curl 命令检查下容器中的 nginx 是否启动成功:
root@ubuntu:~# curl 127.0.0.1:8000 -I
HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Sun, 16 Jun 2019 12:25:37 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Sun, 16 Jun 2019 02:41:51 GMT
Connection: keep-alive
ETag: "5d05ac6f-264"
Accept-Ranges: bytes
以上说明服务是OK的。
修改nginx配置
如果需要修改nginx配置,按如下操作:
- 进入容器中执行 shell。
root@ubuntu:~# docker exec -it nginx /bin/bash
root@b67da4091091:~#
- 使用 vi 修改
/usr/local/nginx/conf/nginx.conf
配置文件。 - 执行
nginx -s reload
命令使 nginx 以新的配置工作。 - 执行
exit
退出shell。