Docker实战:从基础镜像到Nginx定制
实战案例:Dockerfile 制作基于基础镜像的Base镜像
准备目录结构,下载镜像并初始化系统
root@ubuntu2404:~# #mkdir /data/dockerfile/{web/{nginx,apache,tomcat,jdk},system/{centos,ubuntu,alpine,debian}} -p
root@ubuntu2404:~# docker pull centos:7
root@ubuntu2404:~# docker images centos
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 7 eeb6ee3f44bd 3 years ago 204MB
先制作基于基础镜像的系统Base镜像
root@ubuntu2404:~# cd /data/dockerfile/system/centos/
root@ubuntu2404:/data/dockerfile/system/centos# vim Dockerfile
root@ubuntu2404:/data/dockerfile/system/centos# cat Dockerfile
FROM centos:7
LABEL maintainer="caoge <ywxe@aliyun.com>"
RUN sed -i 's|mirrorlist=http://mirrorlist.centos.org|#mirrorlist=http://mirrorlist.centos.org|g' /etc/yum.repos.d/CentOS-Base.repo && sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://mirrors.aliyun.com|g' /etc/yum.repos.d/CentOS-Base.repo
&& yum makecache
&& yum -y install vim-enhanced tcpdump lrzsz tree telnet bash completion net-tools wget bzip2 lsof tmux man-pages zip unzip nfs-utils gcc make gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel zlib-devel
root@ubuntu2404:/data/dockerfile/system/centos# vim build.sh
root@ubuntu2404:/data/dockerfile/system/centos# cat build.sh
#!/bin/bash
docker build -t centos7-base:v1 .
root@ubuntu2404:/data/dockerfile/system/centos# chmod +x build.sh
root@ubuntu2404:/data/dockerfile/system/centos# ./build.sh
root@ubuntu2404:/data/dockerfile/system/centos# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos7-base v1 46549083b7ee 4 hours ago 804MB
centos 7 eeb6ee3f44bd 3 years ago 204MB
root@ubuntu2404:/data/dockerfile/system/centos# docker image history centos7-base:v1
IMAGE CREATED CREATED BY SIZE COMMENT
46549083b7ee 4 hours ago RUN /bin/sh -c sed -i 's|mirrorlist=http://m… 600MB buildkit.dockerfile.v0
<missing> 4 hours ago LABEL maintainer=caoge <ywxe@aliyun.com> 0B buildkit.dockerfile.v0
<missing> 3 years ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 3 years ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 3 years ago /bin/sh -c #(nop) ADD file:b3ebbe8bd304723d4… 204MB
实战案例:Dockerfile 制作基于Base镜像的 nginx 镜像
在Dockerfile目录下准备编译安装的相关文件
root@ubuntu2404:~# mkdir -p /data/dockerfile/web/nginx/1.26/
root@ubuntu2404:~# cd /data/dockerfile/web/nginx/1.26/
root@ubuntu2404:/data/dockerfile/web/nginx/1.26# wget https://nginx.org/download/nginx-1.26.3.tar.gz
root@ubuntu2404:/data/dockerfile/web/nginx/1.26# mkdir app
root@ubuntu2404:/data/dockerfile/web/nginx/1.26# echo hello nginx >app/index.html
root@ubuntu2404:/data/dockerfile/web/nginx/1.26# tar zcf app.tar.gz app
root@ubuntu2404:/data/dockerfile/web/nginx/1.26# ls
app app.tar.gz nginx-1.26.3.tar.gz
在一台测试机进行编译安装同一版本的nginx 生成模版配置文件
[root@rocky8 ~]# yum -y install gcc make gcc-c++ glibc glibc-devel pcre pcre-devel openssl-devel systemd-devel zlib-devel
[root@rocky8 ~]# wget -P /usr/local/src/ https://nginx.org/download/nginx-1.26.3.tar.gz
[root@rocky8 ~]# cd /usr/local/src/
[root@rocky8 ~]# tar xvf nginx-1.26.3.tar.gz
[root@rocky8 ~]# cd nginx-1.26.3/
[root@rocky8 ~]# ./configure --prefix=/apps/nginx && make && make install
#将配置文件复制到nginx镜像的服务器相应目录下
[root@rocky8 ~]# scp /apps/nginx/conf/nginx.conf 192.168.1.30:/data/dockerfile/web/nginx/1.26root@ubuntu2404:/data/dockerfile/web/nginx/1.26# vim nginx.conf
user nginx;
worker_processes 1;
daemon off; #增加此行,前台运行nginx
编写Dockerfile文件
root@ubuntu2404:~# cd /data/dockerfile/web/nginx/1.26
[root@ubuntu2404 1.26]#vim Dockerfile
FROM centos7-base:v1.2
LABEL maintainer="caoge.com<ywxr@aliyun.com>"
ADD nginx-1.26.3.tar.gz /usr/local/src
RUN cd /usr/local/src/nginx-1.26.3 && ./configure --prefix=/apps/nginx && make && make install && rm -rf /usr/local/src/nginx* && useradd -r nginx
COPY nginx.conf /apps/nginx/conf
ADD app.tar.gz /apps/nginx/html
EXPOSE 80 443
CMD ["/apps/nginx/sbin/nginx"]#第二种方法不推荐
FROM centos7-base:v1.2
LABEL maintainer="caoge.com<ywxr@aliyun.com>"
ADD nginx-1.26.3.tar.gz /usr/local/src
RUN cd /usr/local/src/nginx-1.26.3 && ./configure --prefix=/apps/nginx
RUN cd /usr/local/src/nginx-1.26.3 && make
RUN cd /usr/local/src/nginx-1.26.3 && make install
run cd /root/ && rm -rf /usr/local/src/nginx* && useradd -r nginx
COPY nginx.conf /apps/nginx/conf
ADD app.tar.gz /apps/nginx/html
EXPOSE 80 443
CMD ["/apps/nginx/sbin/nginx"]
[root@ubuntu2404 nginx]#
生成 nginx 镜像
[root@ubuntu2404 ~]#cd /data/dockerfile/web/nginx/1.26/
[root@ubuntu2404 1.26]#ls
app app.tar.gz nginx-1.26.3.tar.gz nginx.conf Dockerfile
[root@ubuntu2404 1.26]#vim build.sh
#!/bin/bash
docker build -t nginx-centos7:v1.0 .
[root@ubuntu2404 1.26]#chmod +x build.sh
[root@ubuntu2404 1.26]#./build.sh
[root@ubuntu2404 1.26]#docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx-centos7 v1.0 7f0907c0f8f4 2 minutes ago 967MB
生成的容器测试镜像
[root@ubuntu2404 1.26]#docker run -d -p 80:80 nginx-centos7:v1.0
37b882a1ce79f08bdb6f527191e9ac7a9465f498003521decba3ce1094ed4401
[root@ubuntu2404 1.26]#docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
37b882a1ce79 nginx-centos7:v1.0 "/apps/nginx/sbin/ng…" 22 seconds ago Up 21 seconds 0.0.0.0:80->80/tcp, [::]:80->80/tcp, 443/tcp adoring_kalam
hello nginx
[root@ubuntu2404 1.26]#docker exec -it 37b882a1ce79 bash
[root@37b882a1ce79 /]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 20604 2688 ? Ss 07:09 0:00 nginx: master process /apps/nginx/sbin/nginx
nginx 7 0.0 0.0 21048 2928 ? S 07:09 0:00 nginx: worker process
root 8 0.2 0.0 11844 2688 pts/0 Ss 07:13 0:00 bash
root 24 0.0 0.0 51748 3328 pts/0 R+ 07:13 0:00 ps aux
[root@37b882a1ce79 /]# exit
exit
[root@ubuntu2404 1.26]#docker port 37b882a1ce79
80/tcp -> 0.0.0.0:80
80/tcp -> [::]:80
[root@ubuntu2404 1.26]#curl 127.0.0.1/app/
hello nginx
[root@ubuntu2404 1.26]#curl 172.17.0.2/app/
hello nginx
实战案例:Dockerfile 直接制作 nginx 镜像
在Dockerfile目录下准备编译安装的相关文件
[root@ubuntu2404 ~]# mkdir /data/dockerfile/web/nginx/1.26
[root@ubuntu2404 ~]# cd /data/dockerfile/web/nginx/1.26
[root@ubuntu2404 1.26]#vim nginx.conf
user nginx;
worker_processes 1;
#daemon off;
[root@ubuntu2404 1.26]# wget https://nginx.org/download/nginx-1.26.3.tar.gz
编写 Dockerfile 文件
[root@ubuntu2404 1.26]#vim Dockerfile
FROM centos:7
LABEL maintainer="caoge.com<ywxr@aliyun.com>"RUN sed -i 's|mirrorlist=http://mirrorlist.centos.org|#mirrorlist=http://mirrorlist.centos.org|g' /etc/yum.repos.d/CentOS-Base.repo && sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://mirrors.aliyun.com|g' /etc/yum.repos.d/CentOS-Base.repo && yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel && useradd -r -s /sbin/nologin nginx && yum clean all
ADD nginx-1.26.3.tar.gz /usr/local/srcRUN cd /usr/local/src/nginx-1.26.3 && ./configure --prefix=/apps/nginx && make && make install && rm -rf /usr/local/src/nginx*
ADD index.html /apps/nginx/html/
RUN ln -s /apps/nginx/sbin/nginx /usr/sbin/nginx
EXPOSE 80 443
CMD ["nginx","-g","daemon off;"]
[root@ubuntu2404 1.26]#
生成 nginx 镜像
[root@ubuntu2404 1.26]#vim build.sh
#!/bin/bash
docker build -t nginx-centos7:v1.2 .
[root@ubuntu2404 1.26]#chmod +x build.sh
[root@ubuntu2404 1.26]#./build.sh
[+] Building 57.7s (11/11) FINISHED docker:default=> [internal] load build definition from Dockerfile 0.0s=> => transferring dockerfile: 784B 0.0s=> [internal] load metadata for docker.io/library/centos:7 0.0s=> [internal] load .dockerignore 0.0s=> => transferring context: 2B 0.0s=> CACHED [1/6] FROM docker.io/library/centos:7 0.0s=> [internal] load build context 0.0s=> => transferring context: 89B 0.0s=> [2/6] RUN sed -i 's|mirrorlist=http://mirrorlist.centos.org|#mirrorlist=http://mirrorlist.centos.org|g' /etc/yum.repos.d/CentOS-Base. 41.5s=> [3/6] ADD nginx-1.26.3.tar.gz /usr/local/src 0.1s => [4/6] RUN cd /usr/local/src/nginx-1.26.3 && ./configure --prefix=/apps/nginx && make && make install && rm -rf /usr/local/src/nginx* 15.3s => [5/6] COPY index.html /apps/nginx/html/ 0.0s => [6/6] RUN ln -s /apps/nginx/sbin/nginx /usr/sbin/nginx 0.2s => exporting to image 0.4s => => exporting layers 0.4s => => writing image sha256:d36538f56f0661bc726d57c6567f72c736ec05b13a553f08dbfe2c49a4b3b7b7 0.0s => => naming to docker.io/library/nginx-centos7:v1.2 0.0s
[root@ubuntu2404 1.26]#docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx-centos7 v1.2 d36538f56f06 47 seconds ago 346MB
生成容器测试镜像
[root@ubuntu2404 1.26]#docker run -d -p 80:80 nginx-centos7:v1.2
79c5de6e9b7b28e16b7736763616811eaeadf8b3131c3460d831eb3889b2c2ca
[root@ubuntu2404 1.26]#docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
79c5de6e9b7b nginx-centos7:v1.2 "nginx -g 'daemon of…" 4 seconds ago Up 4 seconds 0.0.0.0:80->80/tcp, [::]:80->80/tcp, 443/tcp nervous_jepsen
[root@ubuntu2404 1.26]#curl 127.0.0.1
hello nginx
#第二种
[root@ubuntu2404 ~]#curl 172.17.0.2
hello nginx[root@ubuntu2404 1.26]#docker exec -it 79c5de6e9b7b bash
[root@79c5de6e9b7b /]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 20600 2816 ? Ss 07:51 0:00 nginx: master process nginx -g daemon off;
nobody 7 0.0 0.0 21044 2800 ? S 07:51 0:00 nginx: worker process
root 8 0.3 0.0 11844 2816 pts/0 Ss 07:52 0:00 bash
root 22 0.0 0.0 51748 3200 pts/0 R+ 07:52 0:00 ps aux
[root@79c5de6e9b7b /]# exit
exit
[root@ubuntu2404 1.26]#