Docker学习之路04:创建定制Nginx镜像
Docker学习路线传送门:
Docker学习之路01:Docker的安装
Docker学习之路02:阿里云镜像加速器
Docker学习之路03:Docker的常用命令
Docker学习之路04:创建定制Nginx镜像
Docker学习之路05:五分钟用docker compose搭建一个自己的个人博客网站!
Docker学习之路06:基于 Docker 在Ubuntu系统部署Hadoop、Hbase以及Spark
目的:
1、掌握利用commit命令构建镜像的方法
2、掌握利用Dockerfile构建镜像的方法
内容:
下载镜像
# 查看docker镜像
[root@master ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 7 8652b9f0cb4c 4 months ago 204MB
elasticsearch 7.6.2 f29a1ee41030 11 months ago 791MB
# 下载nginx镜像
[root@master ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
a076a628af6f: Pull complete
0732ab25fa22: Pull complete
d7f36f6fe38f: Pull complete
f72584a26f32: Pull complete
7125e4df9063: Pull complete
Digest: sha256:10b8cc432d56da8b61b070f4c7d2543a9ed17c2b23010b43af434fd40e2ca4aa
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
[root@master ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest f6d0b4767a6c 2 months ago 133MB
centos 7 8652b9f0cb4c 4 months ago 204MB
elasticsearch 7.6.2 f29a1ee41030 11 months ago 791MB
方式一:利用commit命令构建镜像
1、利用nginx镜像生成容器后,进入容器,并修改主页
# 下载镜像nginx
[root@master ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 7 8652b9f0cb4c 4 months ago 204MB
elasticsearch 7.6.2 f29a1ee41030 11 months ago 791MB
[root@master ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
a076a628af6f: Pull complete
0732ab25fa22: Pull complete
d7f36f6fe38f: Pull complete
f72584a26f32: Pull complete
7125e4df9063: Pull complete
Digest: sha256:10b8cc432d56da8b61b070f4c7d2543a9ed17c2b23010b43af434fd40e2ca4aa
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
# 后台运行
[root@master ~]# docker run -dit --name nginx_my -p 3344:80 nginx
61b07df37ef72416b9e8175dcd1aced6ef857002df2e2ab3e966a1bd21d06a43
[root@master ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
61b07df37ef7 nginx "/docker-entrypoint.…" 2 seconds ago Up 2 seconds 0.0.0.0:3344->80/tcp nginx_my
# 进入进行nginx
[root@master ~]# docker exec -it nginx_my /bin/bash
# 修改页面内容
root@61b07df37ef7:/# echo "John Zhunang's Docker Nginx" >/usr/share/nginx/html/index.html
# 退出
root@61b07df37ef7:/# exit
exit
2、利用commit命令构建新镜像nginx1.0
# 创建新的nginx镜像1.0
[root@master ~]# docker commit -a="John Zhuang" -a="echo message" nginx_my nginx_my:1.0
sha256:42a10034f25eff710dd126c41ccb02a829d5d301f90ec20cb5e391e2e19a5ded
[root@master ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx_my 1.0 42a10034f25e 3 seconds ago 133MB
nginx latest f6d0b4767a6c 2 months ago 133MB
centos 7 8652b9f0cb4c 4 months ago 204MB
elasticsearch 7.6.2 f29a1ee41030 11 months ago 791MB
3、利用新构建的镜像nginx1.0生成容器
# 后台运行新的nginx镜像1.0
[root@master ~]# docker run -dit --name nginx_1.0_test -p 3355:80 nginx_my:1.0
d6c908e88b10fe9d0c55933707aec4550d2b2e6c7fb9fe12191bf56885442fd2
[root@master ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d6c908e88b10 nginx_my:1.0 "/docker-entrypoint.…" 3 seconds ago Up 2 seconds 0.0.0.0:3355->80/tcp nginx_1.0_test
61b07df37ef7 nginx "/docker-entrypoint.…" 2 minutes ago Up 2 minutes 0.0.0.0:3344->80/tcp nginx_my
# 进入新的nginx镜像1.0
[root@master ~]# docker exec -it nginx_1.0_test /bin/bash
root@d6c908e88b10:/# ls
bin dev docker-entrypoint.sh home lib64 mnt proc run srv tmp var
boot docker-entrypoint.d etc lib media opt root sbin sys usr
root@d6c908e88b10:/# exit
exit
4、测试
# 测试
[root@master ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d6c908e88b10 nginx_my:1.0 "/docker-entrypoint.…" 7 minutes ago Up 7 minutes 0.0.0.0:3355->80/tcp nginx_1.0_test
61b07df37ef7 nginx "/docker-entrypoint.…" 9 minutes ago Up 9 minutes 0.0.0.0:3344->80/tcp nginx_my
[root@master ~]# curl localhost:3344
John Zhunang's Docker Nginx
[root@master ~]# curl localhost:3355
John Zhunang's Docker Nginx
curl测试效果~
网页测试效果~
方式二:利用Dockerfile构建镜像
1、建立镜像目录,将nginx安装包复制到当前目录,然后在该目录中新建Dockerfile文件
Nginx安装包下载地址:http://nginx.org/en/download.html
# 创建工作目录
[root@master ~]# mkdir /usr/dockertestFile
# 创建Dockerfile文件
[root@master ~]# cd /usr/dockertestFile
# 拷贝nginx安装包复制到当前目录
[root@master dockertestFile]# cp /opt/software/nginx-1.12.2.tar.gz /usr/dockertestFile/
# 配置Dockerfile文件
[root@master dockertestFile]# vim Dockerfile
Dockerfile文件配置信息如下:
# 基础镜像
FROM centos:7
# 作者信息
MAINTAINER JohnZhuang<825165686@qq.com>
# 容器内执行的命令:创建用户 创建文件 安装编译依赖
RUN useradd John -M -s /sbin/nologin
RUN mkdir -p /var/log/nginx
RUN yum install -y cmake pcre pcre-devel openssl openssl-devel gd-devel \
zlib-devel gcc gcc-c++ net-tools iproute telnet wget curl &&\
yum clean all && \
rm -rf /var/cache/yum/*
# 解压nginx安装包
ADD nginx-1.12.2.tar.gz /usr/local/src
WORKDIR /usr/local/src/nginx-1.12.2
# 配置
RUN ./configure --prefix=/usr/local/nginx --with-http_image_filter_module --user=John --group=John \
--with-http_ssl_module --with-http_v2_module --with-http_stub_status_module \
--error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx/nginx.pid
RUN make -j 4 && make install && \
rm -rf /usr/local/nginx/html/* && \
echo "John Zhunang's Docker Nginx" >/usr/local/nginx/html/index.html && \
rm -rf nginx* && \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&\
ln -sf /dev/stdout /var/log/nginx/access.log && \
ln -sf /dev/stderr /var/log/nginx/error.log
# 设置权限
RUN chown -R John.John /var/log/nginx
# 设置环境
ENV LOG_DIR /var/log/nginx
ENV PATH $PATH:/usr/local/nginx/sbin
# 设置端口号
EXPOSE 80
# 设置工作目录
WORKDIR /usr/local/nginx
# nginx命令参数
CMD ["nginx","-g","daemon off;"]
注意:以上配置文件中用户信息、nginx安装包版本、nginx安装目录等差异根据自身的需求修改!
2、利用docker build命令生成镜像
# 创建新的nginx镜像2.0
[root@master ~]# docker build -t nginx_my:2.0 .
构建过程...
构建过程...
Successfully built eaa8c9f8b689
Successfully tagged nginx_my:2.0
[root@master ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx_my 2.0 eaa8c9f8b689 2 minutes ago 421MB
nginx_my 1.0 42a10034f25e 24 minutes ago 133MB
nginx latest f6d0b4767a6c 2 months ago 133MB
centos 7 8652b9f0cb4c 4 months ago 204MB
elasticsearch 7.6.2 f29a1ee41030 11 months ago 791MB
如果出现两个Successful则表示成功!
3、利用新构建的镜像生成容器
# 后台运行镜像nginx2.0
[root@master ~]# docker run -d --name nginx_test_2 -p 3366:80 nginx_my:2.0
9c17e93ae9dd7d0066d40fb68dcad99d0f8814c77a3535d2b4b5fabc16f30b1e
[root@master ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9c17e93ae9dd nginx_my:2.0 "nginx -g 'daemon of…" 8 seconds ago Up 6 seconds 0.0.0.0:3366->80/tcp nginx_test_2
d6c908e88b10 nginx_my:1.0 "/docker-entrypoint.…" 24 minutes ago Up 24 minutes 0.0.0.0:3355->80/tcp nginx_1.0_test
61b07df37ef7 nginx "/docker-entrypoint.…" 27 minutes ago Up 27 minutes 0.0.0.0:3344->80/tcp nginx_my
# 进入镜像nginx2.0
[root@master ~]# docker exec -it nginx_test_2 /bin/bash
[root@9c17e93ae9dd nginx]# ls
client_body_temp conf fastcgi_temp html proxy_temp sbin scgi_temp uwsgi_temp
# 退出
[root@9c17e93ae9dd nginx]# exit
exit
# 测试
[root@master ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9c17e93ae9dd nginx_my:2.0 "nginx -g 'daemon of…" About a minute ago Up About a minute 0.0.0.0:3366->80/tcp nginx_test_2
d6c908e88b10 nginx_my:1.0 "/docker-entrypoint.…" 26 minutes ago Up 26 minutes 0.0.0.0:3355->80/tcp nginx_1.0_test
61b07df37ef7 nginx "/docker-entrypoint.…" 28 minutes ago Up 28 minutes 0.0.0.0:3344->80/tcp nginx_my
[root@master ~]# curl localhost:3366
John Zhunang's Docker Nginx
curl测试效果~
网页测试效果~