如何打包Docker Nginx?

Docker

1 前言

一个问题,一篇文章,一出故事。
由于docker hub原版本的nginx镜像过于精简,于是一番小改重新打包。

2 最佳实践

2.1 部署前的准备

2.1.1 部署Docker环境

本章使用如下Docker环境部署,参阅本章建议你先搭建以下Docker集群环境并熟悉,

如何部署Docker生产环境?

2.1.2 准备系统镜像

In docker01

cd /data/docker/images/
docker load -i nginx:1.20.2.tar

另外,安装包的离线下载请在能上网的docker环境的机器上使用如下命令,

docker pull nginx:1.20.2
docker save nginx:1.20.2 -o nginx:1.20.2.tar

另外,其他版本请从以下链接下载,
https://hub.docker.com/_/nginx

2.2 创建Nginx镜像

2.2.1 创建镜像项目文件夹

mkdir -p ~/imageProject-nginx-1.20.2

2.2.2 创建Dockerfile

vim ~/imageProject-nginx-1.20.2/Dockerfile

加入如下配置,

FROM nginx:1.20.2
MAINTAINER Will 

# Install logrotate
RUN apt-get update
RUN apt-get -y install logrotate
RUN apt-get -y install iputils-ping net-tools

# Configureation logrotate for nginx
RUN echo '/var/log/nginx/*.log {\n \
        daily\n \
        rotate 5\n \
        minsize 20M\n \
        missingok\n \
        dateext\n \
        nocompress\n \
        delaycompress\n \
        notifempty\n \
        sharedscripts\n \
        postrotate\n \
                [ -e /run/nginx.pid ] && kill -USR1 `cat /run/nginx.pid`\n \
        endscript\n \
}\n' \
> /etc/logrotate.d/nginx
RUN chmod 644 /etc/logrotate.d/nginx

# Start nginx and cron as a service
CMD service cron start && nginx -g 'daemon off;'

“FROM”指令声明基于“centos:centos7.3.1611”镜像打包
“RUN”指令声明容器环境执行的命令
“CMD”指令声明启动容器执行的启动服务命令
确认所需的文件存在,

ls ~/imageProject-nginx-1.20.2/

可见如下显示,

Dockerfile

2.2.3 执行打包操作

cd ~/imageProject-nginx-1.20.2/
docker build -t build/nginx:1.20.2 .

以上“.”指当前目录为编译目录,编译程序会自动加载“Dockerfile”文件定义,可见如下显示,

Sending build context to Docker daemon   2.56kB
Step 1/6 : FROM nginx:1.20.2
 […]
Successfully built c7f8572678b4
Successfully tagged build/nginx:1.20.2

如果镜像集群公用,还需要执行以下命令,

docker tag build/nginx:1.20.2 docker01.cmdschool.org:5000/nginx:1.20.2
docker push docker01.cmdschool.org:5000/nginx:1.20.2
docker image rm build/nginx:1.20.2

完成后,可使用如下命令查看镜像,

docker images

可见如下显示,

REPOSITORY                                         TAG                        IMAGE ID            CREATED             SIZE
docker01.cmdschool.org:5000/nginx                  1.20.2                     0bd848d9f7a1        8 days ago          141MB
[...]

2.2.4 测试软件运行

docker run -d --name nginx -p 80:80 -p 443:443 docker01.cmdschool.org:5000/nginx:1.20.2

以上运行容器环境后,我们使用以下命令登录容器虚拟机,

docker exec -it `docker container ls | grep 'nginx' | cut -d" " -f1 ` /bin/bash

可使用如下命令查看软件倾听的端口,

netstat -antp

可见如下显示,

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      13/nginx: master pr

测试完成后可使用如下命令退出容器虚拟机,

exit

另外,你可以使用如下命令查询当前运行的container,

docker ps -a

可见如下显示,

429b0503a3bd        docker01.cmdschool.org:5000/nginx                                                     "/docker-entrypoint.…"   About an hour ago   Up About an hour           0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   nginx
 [...]

然后可以使用如下命令停止并删除,

docker container stop 429b0503a3bd
docker container rm 429b0503a3bd

另外,客户端可以使用如下命令测试,

curl http://docker01.cmdschool.org
没有评论

发表回复

Docker
如何修复连接Docker容器虚机无响应?

1 前言 一个问题,一篇文章,一出故事。 笔者最近使用如下命令连接容器发现一直没有响应, docke …

Docker
如何打包Docker MAC-Telnet?

1 基础知识 一款可以使用MikroTik RouterOS MAC-Telnet协议连接Mikro …

Docker
如何部署Docker Unifi-WiFi?

1 前言 一个问题,一篇文章,一出故事。 笔者Unifi-WiFi想要迁移至docker环境,于是产 …