自己制作Nginx镜像
一、Dockerfile指令
Dockerfile:制作docker镜像的配方文件(配置文件) FROM 指定基础镜像 WORKDIR 指定进入容器的时候,在哪个目录下 工作目录 COPY 复制宿主机的文件和目录到容器里面 RUN 在容器里运行命令 在docker build时运行 CMD 容器运行的第一个程序命令 在启动容器时运行
CMD ["可执行命令或参数","参数"……]
ENV 定义环境变量 ENV NGINX_VERSION 19.7.0 将数值赋值给NGINX_VERSION EXPOSE 声明开放端口号 ENTRYPOINT 类似于CMD命令,单数不会被docker run命令行参数指定的命令覆盖 如果运行docker run时使用了–entrypoint选项,将覆盖CMD命令 优点:在执行docker run的时候可以指定ENTRYPOINT运行所需的参数 注意:如果Dockerfile中存在多个ENTRYPOINT指令,仅最后一个生效 启动容器时运行 ARG 与ENV 作用一致,不过作用域不一样 传递参数 在制作镜像时使用 仅对Dockerfile内有效 构建命令docker build中可以用 --build-argue<参数名>=<值>来覆盖 VOLUME 定义匿名数据卷,在启动容器时忘记挂载数据卷,会自动挂载到匿名卷 作用:避免重要的数据,因容器重启而丢失,这是非常致命的 避免容器不断变大 STOPSIGNAL 阻止信号的
二、制作镜像详解
准备:CentOS Linux release 7.9.2009 (Core)一台,需安装了Docker
1.准备好一键编译安装nginx的脚本和nginx的源代码
[root@localhost ~]# mkdir /centos-nginx
[root@localhost ~]# cd /centos-nginx/
自己准备nginx的压缩包,从Windows下载再移动到linux目的文件夹内
[root@localhost centos-nginx]# ls
nginx-1.19.6.tar.gz onekey_install_nginx.sh
一键安装nginx的脚本内容如下:
#!/bin/bash
#解决软件的依赖关系,需要安装的软件包
yum install zlib zlib-devel openssl openssl-devel pcre pcre-devel gcc gcc-c++ autoconf automake make -y
mkdir -p /nginx
cd /nginx
#解压 下载的nginx的源码包
tar xf nginx-1.19.6.tar.gz
cd nginx-1.19.6
#生成编译前配置工作-->Makefile
./configure --prefix=/usr/local/nginx1 --with-threads --with-http_ssl_module --with-http_realip_module --with-http_v2_module --with-file-aio --with-http_stub_status_module --with-stream
#编译
make
#编译安装--》将编译好的二进制程序安装指定目录/usr/local/nginx1
make install
2.编写dockerfile文件
[root@localhost centos-nginx]# vim Dockerfile
FROM centos:latest
ENV NGINX_VERSION 1.19.6
ENV OS_VERSION 1.0
LABEL maintainer="li <1491093154@qq.com>"
WORKDIR /nginx
COPY . .
RUN bash onekey_install_nginx.sh; \
yum install net-tools iproute iputils vim -y
EXPOSE 80
STOPSIGNAL SIGQUIT
ENV PATH="$PATH:/usr/local/nginx1/sbin"
CMD ["/usr/local/nginx1/sbin/nginx", "-g", "daemon off;"]
~
~
3.创建自己的镜像
[root@localhost centos-nginx]# docker build -t centos-nginx:1.0 .
制作完成
Successfully built e008b2059989
Successfully tagged centos-nginx:1.0
[root@localhost centos-nginx]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos-nginx 1.0 e008b2059989 31 seconds ago 572MB
getting-started latest b3baeccf3400 2 days ago 179MB
node 12-alpine dc1848067319 3 days ago 88.9MB
redis latest aa4d65e670d6 3 weeks ago 105MB
nginx latest 08b152afcfae 3 weeks ago 133MB
mysql latest c60d96bd2b77 3 weeks ago 514MB
hello-world latest d1165f221234 5 months ago 13.3kB
centos latest 300e315adb2f 8 months ago 209MB
制作镜像过程中遇到问题 制作过程中报错 —> [Warning] IPv4 forwarding is disabled. Networking will not work. 解决办法: vi /usr/lib/sysctl.d/00-system.conf 添加如下代码: net.ipv4.ip_forward=1 重启network服务 systemctl restart network 查看是否修改成功 sysctl net.ipv4.ip_forward 如果返回为“net.ipv4.ip_forward = 1”则表示成功了
4.启动自己制作的镜像的容器
[root@localhost centos-nginx]# docker run -dp 5580:80 --name self-nginx1 centos-nginx:1.0
20ef95e63e711869794522f15474a4cfeafb5a52a7fc7328808d9761e2183620
[root@localhost centos-nginx]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
20ef95e63e71 centos-nginx:1.0 "/usr/local/nginx1/s…" 3 seconds ago Up 2 seconds 0.0.0.0:5580->80/tcp, :::5580->80/tcp self-nginx1
排错 用docker ps 命令查看是否启动,如果没有启动,用docker logs + 容器名字/id 可以查看出错的地方 检查Dockerfile和脚本的问题,查看是否编写的脚本和Dockerfile文件有问题
5.用本机浏览器访问验证
网址为linux主机ip地址加启动容时端口号,如下所示:
http://192.168.116.151:5580/
总结
编写一件安装的脚本的时候,要特别注意脚本的细节,Dockerfile也是,一个字母出错就会导致镜像安装失败,或者安装成功后启动不了。 通过自己制作镜像,更深地了解Docker,理解docker镜像的原理,认识到linux系统和Docker的不同,俩那个体系的差别。
|