Linux Alpine安装 Nginx
EXPOSE
EXPOSE用于告诉Docker服务器容器暴露的端口号,供互联系统使用。
在启动容器时通过-P,Docker主机会自动分配一个端口转发到指定的端口;
使用-p则可以具体指定哪个本地端口映射过来
格式为EXPOSE <port> [<port>...]
//暴露端口号
EXPOSE 80
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f70fa47da42a nginx:v0.1 "/bin/sh" 42 seconds ago Up 40 seconds 80/tcp web1
VOLUME
格式为VOLUME ["/data"]。
创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等
[root@localhost ~]# vim nginx/Dockerfile
FROM alpine
# 维护者信息
LABEL MAINTAINER="yt 3091530433<@qq.com>"
#ONBUILD COPY soft/nginx-1.18.0.tar.gz /usr/src
#ONBUILD RUN cd /usr/src
VOLUME ["/data"]
RUN echo 'hello' > /data/abcd
CMD ["/bin/sh"]
//映射
[root@localhost ~]# docker run -it --rm --name web1 -v $(pwd):/data nginx:v0.11 /bin/sh
/ # ls
bin etc media proc sbin tmp var
data home mnt root srv top
dev lib opt run sys usr
/ # cd /data/
/data # ls nginx/
Dockerfile soft
ENV
指定一个环境变量,会被后续RUN指令使用,并在容器运行时保持
//格式为ENV<key> <value>。
ENV version 1.18.0
ENV PATH /usr/local/nginx/sbin:$PATH //环境变量
RUN apk add wget && \
wget -O nginx-$version.tar.gz http://nginx.org/download/nginx-$version.tar.gz && \
ADD
该命令将复制指定的到容器中的。其中可以是Dockerfile所在目录的一个相对路径(文件或目录);也可以是一个URL;还可以是一个tar文件(会自动解压为目录)
//格式为ADD <src> <dest>
ADD a/nginx-1.19.6.tar.gz /top //自动解压
ADD a/nginx-1.19.6.tar.gz /tom/abcd //自动解压
COPY
复制本地主机的(为Dockerfile所在目录的相对路径,文件或目录)为容器中的。目标路径不存在时会自动创建。
当使用本地目录为源目录时,推荐使用COPY
//格式为COPY <src> <dest>
COPY a/nginx-1.19.6.tar.gz /tom/abcde/
ENTRYPOINT
配置容器启动后执行的命令,并且不可被docker run提供的参数覆盖。而且,如果在docker run的后面提供了参数,这些命令行参数会被当作参数传递给ENTRYPOINT指定的程序。
每个Dockerfile中只能有一个ENTRYPOINT,当指定多个ENTRYPOINT时,只有最后一个生效
ENTRYPOINT有两种格式:
ENTRYPOINT ["executable","param1","param2"]
ENTRYPOINT command param1 param2(在shell中执行)
ONBUILD
格式为ONBUILD [INSTRUCTION]。
配置当所创建的镜像作为其他镜像的基础镜像时,所执行的操作指
ONBUILD COPY soft/nginx-1.18.0.tar.gz /usr/src
ONBUILD RUN cd /usr/src && tar xf nginx-1.18.0.tar.gz
Linux Alpine安装 Nginx
[root@localhost ~]# vi nginx/Dockerfile
# 指定基于的基础镜像
FROM alpine
# 维护者信息
LABEL MAINTAINER="yt 3091530433<@qq.com>"
# 镜像操作指令
ADD soft/nginx-1.18.0.tar.gz /home/
ADD soft/pcre-8.44.tar.gz /home/
RUN echo http://mirrors.aliyun.com/alpine/v3.10/main/ > /etc/apk/repositories && \
echo http://mirrors.aliyun.com/alpine/v3.10/community/ >> /etc/apk/repositories
RUN apk update && apk upgrade && \
apk add gcc g++ make && \
addgroup -S nginx && \
adduser -DHS -s /sbin/nologin -G nginx nginx && \
cd /home/nginx-1.18.0 && \
./configure --prefix=/usr/local/nginx --with-pcre=/home/pcre-8.44 --without-http_gzip_module && \
make && make install && \
ln -s /usr/local/nginx/sbin/nginx /usr/sbin/ && \
mkdir -p /usr/local/nginx/conf/vhost/
#容器启动时默认要执行的指令
CMD ["-g", "bin/sh","daemon off;"]
//执行
[root@localhost ~]# docker build -t nginx:v1.34 nginx
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx v1.30 c6984ccdf4f5 About a minute ago 197MB
<none> <none> 538284751b02 7 minutes ago 197MB
alpine latest 389fef711851 3 weeks ago 5.58MB
[root@localhost ~]# docker run -it --rm --name web1 nginx:v0.34 /bin/sh
/ # nginx
/ # cd usr/local/
bin/ lib/ nginx/ share/
/ # cd usr/local/nginx/
client_body_temp/ html/ sbin/
conf/ logs/ scgi_temp/
fastcgi_temp/ proxy_temp/ uwsgi_temp/
/ # cd usr/local/nginx/html/
/usr/local/nginx/html # ls
50x.html index.html
/usr/local/nginx/html # cd