Docker
1 前言
一个问题,一篇文章,一出故事。
由于docker hub原版本的nginx镜像过于精简,于是一番小改重新打包。
2 最佳实践
2.1 部署前的准备
2.1.1 部署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
没有评论