Docker学习之路04:创建定制Nginx镜像
Docker学习之路04:创建定制Nginx镜像
Docker学习路线传送门:
Docker学习之路01:Docker的安装
Docker学习之路02:阿里云镜像加速器
Docker学习之路03:Docker的常用命令
Docker学习之路04:创建定制Nginx镜像
目的:
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
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sv8Bom5l-1615959316575)(C:\Users\John\AppData\Roaming\Typora\typora-user-images\image-20210317130719145.png)]](https://img-blog.csdnimg.cn/20210317135308974.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NzU4MDA4MQ==,size_16,color_FFFFFF,t_70)
# 测试
[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测试效果~

网页测试效果~

posted on 2021-03-17 13:56 JohnZhuang 阅读(313) 评论(0) 收藏 举报
浙公网安备 33010602011771号