dockerfile以alpine为基础镜像构建nginx镜像
文章目录
- dockerfile以alpine为基础镜像构建nginx镜像
- 1:alpine
- 2:alpine软件包管理命令 apk
- add
- update
- del
- list
- search
- info
- 3:alpine服务管理命令
- 4:ubuntu
- 5: ubuntu软件包管理命令
- 6:apt命令
- 7:dpkg 命令
- 8:ubentu服务管理命令
- 9:使用dockerfile,alpine作为基础镜像,部署nginx。
- 9.1、apk 安装nginx
- 9.2、源代码编译安装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;
}
}
/ #
文章来源:https://uudwc.com/A/09p4
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
浏览器访问测试
文章来源地址https://uudwc.com/A/09p4