说明

本文介绍如何构建一个包含常用的命令的 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配置,按如下操作:

  1. 进入容器中执行 shell。
root@ubuntu:~# docker exec -it nginx /bin/bash
root@b67da4091091:~#
  1. 使用 vi 修改 /usr/local/nginx/conf/nginx.conf 配置文件。
  2. 执行 nginx -s reload 命令使 nginx 以新的配置工作。
  3. 执行 exit 退出shell。