dockerfile以alpine为基础镜像构建nginx镜像

1:alpine

Alpine Linux 是一个社区开发的面向安全应用的轻量级Linux发行版。 Alpine 的意思是“高山的”,它采用了musl libc和busybox以减小系统的体积和运行时资源消耗,同时还提供了自己的包管理工具apk。
由于其小巧、安全、简单以及功能完备的特点,被广泛应用于众多Docker容器中。

2:alpine软件包管理命令 apk

add

apk add nginx               // 安装软件包(并自动安装依赖项)
apk add php=1.6.5     // 安装指定版本软件包

apk --no-cache add nginx    // 安装软件包, 不使用缓存

apk fix nginx               // 在不修改 WORLD 的情况下修复, 重新安装或升级软件包

update

apk update // 更新仓库
apk upgrade //更新已安装的所有软件包
apk upgeade <name>  //更新指定的软件包

del

apk del <name> //删除软件,如果它的依赖包不在被使用则会一并删除

list

apk list [<OPTIONS>...] PATTERN...  # 列出给定模式的软件包

 apk list --help 命令参数 (List options):
     -I, --installed       // 只显示已安装的软件包
     -O, --orphaned        // 只显示孤立的软件包
     -a, --available       // 只显示可用的软件包
     -u, --upgradable      // 只显示可升级的软件包
     -o, --origin          // 按来源列出
     -d, --depends         // 按依赖关系列出
     -P, --providers       // 按提供者列出

apk -I list                 // 列出已安装的所有软件包
apk -u list                 // 列出可升级的所有软件包
apk list <package>          // 列出指定软件包

search

apk search <name> //搜索软件包

info

apk info <name> // 查询指定的软件包的详细信息
apk info -R <name>  // 查询指定的软件包的依赖信息

3:alpine服务管理命令

alpine系统没有使用systemctl管理服务,而是使用的rc系列命令

rc-update # 主要用于不同运行级增加或者删除服务。
rc-status # 主要用于运行级的状态管理。
rc-service # 主用于管理服务的状态
openrc # 主要用于管理不同的运行级。

用法


rc-status <service> start/stop/restart //对服务进行开启/停止/重启类似centos7的service
rc-update add [service ]   //将服务设置为开机自启

4:ubuntu

Ubuntu是世界上最流行的Linux系统之一,比Ubuntu更大的是自由软件,而比自由软件更大的则是自由软件的社区。Ubuntu社区为其使用者提供了多种学习、交流、切磋和讨论方式,如论坛、星球、维基及IRC即时通信等。通过Ubuntu庞大的社区组织,Ubuntu用户可以获得很多帮助和支持,使得Ubuntu使用起来更加得心应手

5: ubuntu软件包管理命令

ubuntu使用.DEB的软件包早期 Ubuntu 使用 apt-get 命令来管理软件包,在 Ubuntu 16.04 发布时,引入了新的包管理命令 apt。为什么要引入 apt 命令呢?
因为早期 Linux 包管理命令都被分散在了 apt-get、apt-cache、apt-config 这三条命令当中。那么 apt 命令的引入就是为了解决命令过于分散的问题。简单来说就是:apt = apt-get、apt-cache、apt-config 中最常用命令选项的集合。
在系统中,我们还可以使用 dpkg 程序来安装单个的 deb 文件,APT 命令作为底层 dpkg 的前端,有时也会直接调用它。

6:apt命令

apt install <name>    //安装软件包
apt remove <name>    //移除软件包
apt purge <name>    //移除软件包及配置文件
apt update          //刷新存储库索引
apt upgrade         //升级所有可升级的软件包
apt autoremove      //自动删除不需要的包
apt full-upgrade    //在升级软件包时自动处理依赖关系
apt search <name>   //搜索软件包
apt show            //显示安装过程

7:dpkg 命令

dpkg -i  name.deb       //安装本地软件包,不解决依赖关系
dpkg -l  package         //查找已经安装软件包 package 的信息,精简
dpkg -l                 //列出当前已经按照的包
dpkg -r package         //删除软件包,但不会删除依赖包
dpkg -P package.deb     //删除包(包括配置文件)
dpkg --get-selections pattern  //查找软件包名称包含 pattern 的软件包,在后面用 grep install/deinstall 来选择是否已经被 remove 的包(曾经安装过了的)
dpkg -L package         //列出该包所包含的文件
dpkg -I package.deb //查找已经下载但末安装的 package.deb 软件包的信息
dpkg -S                //查看文件所属那个包
dpkg -c package.deb //查找已经下载但末安装的 package.deb 软件包包含哪些文件

8:ubentu服务管理命令

在ubentu中可以使用

systemctl servername start/stop/restart

命令来管理服务的开启停止和关闭
也可以使用

service servername start/stop/resstaert

管理

9:使用dockerfile,alpine作为基础镜像,部署nginx。

9.1、apk 安装nginx

[root@server1 dd]# vim Dockerfile //编写dockerfile文件
[root@server1 dd]# cat Dockerfile
FROM alpine:latest
RUN echo "https://mirrors.aliyun.com/alpine/v3.11/main/" > /etc/apk/repositories; \
    echo "https://mirrors.aliyun.com/alpine/v3.11/community/" >> /etc/apk/repositories; \
    apk add nginx && mkdir /run/nginx/
EXPOSE 80
ENTRYPOINT [ "nginx", "-g", "daemon off;" ]
[root@server1 dd]# docker build -t nginx:alpine .  //制作镜像
Sending build context to Docker daemon  2.048kB
Step 1/4 : FROM alpine:latest
 ---> c059bfaa849c
Step 2/4 : RUN echo "https://mirrors.aliyun.com/alpine/v3.11/main/" > /etc/apk/repositories;     echo "https://mirrors.aliyun.com/alpine/v3.11/community/" >> /etc/apk/repositories;     apk add nginx && mkdir /run/nginx/
 ---> Running in f59c6fbfc070
fetch https://mirrors.aliyun.com/alpine/v3.11/main/x86_64/APKINDEX.tar.gz
fetch https://mirrors.aliyun.com/alpine/v3.11/community/x86_64/APKINDEX.tar.gz
(1/2) Installing pcre (8.43-r1)
(2/2) Installing nginx (1.16.1-r8)
Executing nginx-1.16.1-r8.pre-install
Executing busybox-1.34.1-r3.trigger
OK: 7 MiB in 16 packages
Removing intermediate container f59c6fbfc070
 ---> a5b30c0f1485
Step 3/4 : EXPOSE 80
 ---> Running in a7e6baf6100a
Removing intermediate container a7e6baf6100a
 ---> cd84a802da61
Step 4/4 : ENTRYPOINT [ "nginx", "-g", "daemon off;" ]
 ---> Running in 3d76d0d3b1d9
Removing intermediate container 3d76d0d3b1d9
 ---> e016af83f75b
Successfully built e016af83f75b
Successfully tagged nginx:alpine    

[root@server1 dd]# docker run -dit --name ttt -p 88:80 nginx:alpine  //创建容器
c95dddab3fb9dc4d01f7f310dc6c3570ef6f6814ea4e13449b58aa2490e13d00
[root@server1 dd]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                               NAMES
c95dddab3fb9   nginx:alpine   "nginx -g 'daemon of…"   4 seconds ago   Up 3 seconds   0.0.0.0:88->80/tcp, :::88->80/tcp   ttt
[root@server1 dd]# docker exec -it  ttt /bin/sh  //进入容器修改配置文件使nginx能够正常访问
    modules/        nginx.conf      scgi_params     uwsgi_params
/ # vi /etc/nginx/conf.d/default.conf
/ # cat /etc/nginx/conf.d/default.conf
# This is a default site configuration which will simply return 404, preventing
# chance access to any other virtualhost.

server {
        listen 80 default_server;
        listen [::]:80 default_server;

        # Everything is a 404
        location / {
                index index.html; //修改此行为此内容
        }

        # You may need this to prevent return 404 recursion.
        location = /404.html {
                internal;
        }
}
/ #

在这里插入图片描述

9.2、源代码编译安装nginx

[root@server1 ~]# mkdir dd
[root@server1 ~]# cd dd
[root@server1 dd]# ls  
nginx-1.16.1.tar.gz  pcre-8.44.tar.gz
[root@server1 dd]# vim Dockerfile  //编写dockerfile
[root@server1 dd]# cat Dockerfile
FROM alpine:latest //指定基础镜像
ADD nginx-1.16.1.tar.gz /home/   //将本地的nginx的源码包copy并解压到镜像中
ADD 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.16.1 && \
    ./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/ && \
    rm -rf /home/nginx-1.16.1 && \
    rm -rf /home/pcre-8.44 && \
    apk del gcc && \
    apk del g++ && \
    rm -rf /apk/repositories && \
    mkdir -p /usr/local/nginx/conf/vhost/
EXPOSE 80
CMD ["/usr/sbin/nginx","-g","daemon off;"]
[root@server1 dd]# docker build -t nginx:alpine .   //制作镜像 
Sending build context to Docker daemon  3.127MB
Step 1/7 : FROM alpine:latest
 ---> c059bfaa849c
Step 2/7 : ADD nginx-1.16.1.tar.gz /home/
 ---> 5d0a00b2af46
....................
Removing intermediate container 951ba0eb420d
 ---> d6a25abc0141
Step 7/7 : CMD ["/usr/sbin/nginx","-g","daemon off;"]
 ---> Running in 28e1c65364f7
Removing intermediate container 28e1c65364f7
 ---> f4e71f504e65
Successfully built f4e71f504e65
Successfully tagged nginx:alpine
[root@server1 dd]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx        alpine    f4e71f504e65   6 seconds ago   28.8MB
alpine       latest    c059bfaa849c   9 months ago    5.59MB
centos       7         eeb6ee3f44bd   11 months ago   204MB
[root@server1 dd]# docker run -d --name vcvc -p 88:80 nginx:alpine
cb5f734cf422dc77e18de321ab9a9b602e49b52583f6a768050483e7d835efdb

浏览器访问测试
在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐