1、apk 安装nginx
[root@localhost kod]# vim Dockerfile
[root@localhost kod]# docker build -t wwk:v1 .
Sending build context to Docker daemon 3.127MB
Step 1/4 : FROM alpine
---> 9c6f07244728
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 9053eead4bf7
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.35.0-r17.trigger
OK: 7 MiB in 16 packages
Removing intermediate container 9053eead4bf7
---> 1803193dbaa8
Step 3/4 : EXPOSE 80
---> Running in 5c4b7b21341e
Removing intermediate container 5c4b7b21341e
---> 93f91f136f52
Step 4/4 : ENTRYPOINT [ "nginx", "-g", "daemon off;" ]
---> Running in 5f47eb97ae7d
Removing intermediate container 5f47eb97ae7d
---> 402a2cdaf1b1
Successfully built 402a2cdaf1b1
Successfully tagged wwk:v1
镜像下载完成
[root@localhost kod]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
wwk v1 402a2cdaf1b1 7 seconds ago 8.54MB
运行容器
[root@localhost kod]# docker run -d --name wwk1 -p 81:80 wwk:v1
52470627b182a6dee02526a24c2ebf6f76cb1d09775833843366f0ce3fc4121d
[root@localhost kod]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
52470627b182 wwk:v1 "nginx -g 'daemon of…" 5 seconds ago Up 4 seconds 0.0.0.0:81->80/tcp, :::81->80/tcp wwk1
[root@localhost kod]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:81 0.0.0.0:*
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 [::]:81 [::]:*
LISTEN 0 128 [::]:22 [::]:*
[root@localhost ~]# docker exec -it wwk1 /bin/sh
/ # vi /etc/nginx/conf.d/default.conf
# Everything is a 404
location / {
index index.html; //修改这一行
/ # nginx -s reload
[root@localhost kod]# systemctl daemon-reload
[root@localhost kod]# systemctl restart docker
[root@localhost kod]# systemctl stop firewalld
[root@localhost kod]# systemctl enable --now docker
访问网页
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
2、源代码编译安装nginx
//准备环境
[root@localhost kod]# ls
Dockerfile nginx-1.16.1.tar.gz pcre-8.44.tar.gz
[root@localhost kod]# cat Dockerfile
FROM alpine:latest //默认从官方拉取镜像
ADD nginx-1.16.1.tar.gz /home/ //将本地的环境移动到容器的家目录中
ADD pcre-8.44.tar.gz /home/
RUN echo http://mirrors.aliyun.com/alpine/v3.11/main/ > /etc/apk/repositories && \
echo http://mirrors.aliyun.com/alpine/v3.11/community/ >> /etc/apk/repositories //从阿里云aliyun镜像中拉取工具包放到容器仓库中,以便运行
RUN apk update && apk upgrade && \ //刷新仓库并下载
apk add gcc g++ make && \ //下载c++环境
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/ && \ //做软连接方便系统识别
mkdir -p /usr/local/nginx/conf/vhost/
EXPOSE 80
CMD ["/usr/sbin/nginx","-g","daemon off;"] //默认nginx在前台启动
这里如果报找不到该目录,则可以在 build命令后面加上 --network-host 以便让本机识别外网
[root@localhost kod]# docker build -t nginx:v3 . --network=host
Sending build context to Docker daemon 3.127MB
Step 1/7 : FROM alpine:latest
---> 9c6f07244728
Step 2/7 : ADD nginx-1.16.1.tar.gz /home/
---> Using cache
---> 220f4e23aca2
Step 3/7 : ADD pcre-8.44.tar.gz /home/
---> Using cache
---> 873e5dbcb034
Step 4/7 : RUN echo http://mirrors.aliyun.com/alpine/v3.11/main/ > /etc/apk/repositories && echo http://mirrors.aliyun.com/alpine/v3.11/community/ >> /etc/apk/repositories
---> Using cache
---> 32291bb6ca0f
Step 5/7 : 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/ && mkdir -p /usr/local/nginx/conf/vhost/
---> Using cache
---> bbbd27b40d6e
Step 6/7 : EXPOSE 80
---> Using cache
---> bdd37a836a0c
Step 7/7 : CMD ["/usr/sbin/nginx","-g","daemon off;"]
---> Using cache
---> 826fd9f1e2f1
Successfully built 826fd9f1e2f1
Successfully tagged nginx:v3
查看容器运行日志
[root@localhost kod]# docker history nginx:v3
IMAGE CREATED CREATED BY SIZE COMMENT
826fd9f1e2f1 2 hours ago /bin/sh -c #(nop) CMD ["/usr/sbin/nginx" "-… 0B
bdd37a836a0c 2 hours ago /bin/sh -c #(nop) EXPOSE 80 0B
bbbd27b40d6e 2 hours ago /bin/sh -c apk update && apk upgrade && … 190MB
32291bb6ca0f 2 hours ago /bin/sh -c echo http://mirrors.aliyun.com/al… 95B
873e5dbcb034 3 hours ago /bin/sh -c #(nop) ADD file:9699722ea4b1dc7e0… 9.65MB
220f4e23aca2 3 hours ago /bin/sh -c #(nop) ADD file:3fbd659b0fd55766e… 6.2MB
9c6f07244728 3 weeks ago /bin/sh -c #(nop) CMD ["/bin/sh"] 0B
<missing> 3 weeks ago /bin/sh -c #(nop) ADD file:2a949686d9886ac7c… 5.54MB
[root@localhost kod]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx v3 826fd9f1e2f1 2 hours ago 212MB
[root@localhost kod]# docker run -d --name hh -P 826fd9f1e2f1
[root@localhost kod]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b92ae0eab0ca 826fd9f1e2f1 "/usr/sbin/nginx -g …" 2 hours ago Up About an hour 0.0.0.0:80->80/tcp, :::80->80/tcp hh
[root@localhost kod]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:80 0.0.0.0:*
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 [::]:80 [::]:*
LISTEN 0 128 [::]:22 [::]:*
systemctl enable --now docker
systemctl status docker
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
3、学习ubuntu软件包管理
1软件更新
更新源命令格式:sudo apt-get update
更新软件命令:sudo apt-get upgrade
更新系统:sudo apt-get dist-upgrade
2软件安装
命令:sudo apt-get install package (安装包)
下载该包的源代码
sudo apt-get source package
3卸载删除软件
命令格式:sudo apt-get remove 【package】
删除软件并包含相关的配置文件
sudo apt-get remove package --purge
4搜索软件包
命令格式:sudo apt-cache search package (软件包)
5.获取软件包的相关信息
命令格式:sudo apt-cache show package
6.重新安装包
命令格式:sudo apt-get install package --reinstall
7. 修复安装
命令格式:sudo apt-get -f install
8.了解安装相关的编译环境,软件依赖那些包。
安装相关的编译环境命令格式:sudo apt-get build-dep package
检查是否有损坏的依赖命令格式:sudo apt-get check
9.清理无用的包
使用命令:sudo apt-get clean 或者sudo apt-get autoclean
10.更多可使用 --help服务查看
4、学习alpine镜像软件包管理
Alpine Linux的优劣
优势
Alpine Linux的Docker镜像特点是轻巧(大小只有5M)且有完整的包管理工具(APK)。
Docker官方镜像可能会用Alpine Linux替换Ubuntu。
apk包管理命令
Alpine使用apk进行包管理,通过apk --help命令查看完整的包管理命令,下面列举常用命令:
1、update:从远程镜像源中更新本地镜像源索引
update命令会从各个镜像源列表下载APKINDEX.tar.gz并存储到本地缓存,一般在/var/cache/apk/(Alpine在该目录下)、 /var/lib/apk/ 、/etc/apk/cache/下。
$ apk update
2、add:安装PACKAGES并自动解决依赖关系
add命令从仓库中安装软件包,自动管理依赖。
$ apk add openssh openntp vim
$ apk add --no-cache mysql-client
$ apk add docker --update-cache --repository http://mirrors.ustc.edu.cn/alpine/v3.4/main/ --allow-untrusted
安装指定版本软件包
$ apk add asterisk=1.6.0.21-r0
$ apk add 'asterisk<1.6.1'
$ apk add 'asterisk>1.6.1'
3、del:卸载并删除PACKAGES
$ apk del openssh openntp vim
4、upgrade:升级当前已安装的软件包
upgrade命令升级系统已安装的所以软件包(一般包括内核),当然也可指定仅升级部分软件包(通过-u或--upgrade选择指定)。
$ apk update #更新最新本地镜像源
$ apk upgrade #升级软件
$ apk add --upgrade busybox #指定升级部分软件包
5、search:搜索软件包
search命令搜索可用软件包,-v参数输出描述内容,支出通配符,-d或—description参数指定通过软件包描述查询。
$ apk search #查找所以可用软件包
$ apk search -v #查找所以可用软件包及其描述内容
$ apk search -v 'acf*' #通过软件包名称查找软件包
$ apk search -v -d 'docker' #通过描述文件查找特定的软件包
6、info命令用于显示软件包的信息。
$ apk info #列出所有已安装的软件包
$ apk info -a zlib #显示完整的软件包信息
$ apk info --who-owns /sbin/lbu #显示指定文件属于的包