综合实战一:搭建一个 nginx 服务
Web 服务器
Web 服务器,一般是指“网站服务器”,是指驻留于互联网上某种类型计算机的程序。Web 服务器可以向 Web 浏览器等客户端提供文档,也可以放置网站文件,让全世界浏览,更可以放置数据文件,让全世界下载。
Web 服务器,也称为“WWW 服务器”( 英文全写:World Wide Web,翻译成中文:万维网或环球信息网 ),主要功能是“提供网上信息浏览服务”。 WWW 是 Internet(互联网)的多媒体信息查询工具,是 Internet(互联网)上发展起来的服务,也是发展最快和目前使用最广泛的服务。正是因为有了 WWW 工具,才使得近十几年来互联网迅速繁荣发展,用户数量飞速飙升。据最新数据显示,目前全球人口数量达到 76.76 亿人,其中全球“网民”(互联网用户)达到惊人的 43.88 亿。
例如百度就是一个 web 服务器,提供搜索服务
Nginx
Nginx 是一款自由的、开源的、高性能的 HTTP 服务器和反向代理服务器;同时也是一个 IMAP、POP3、SMTP 代理服务器;Nginx 可以作为一个 HTTP 服务器进行网站的发布处理,另外 Nginx 可以作为反向代理进行负载均衡的实现。
可以理解 Nginx 是 web 服务器的一种实现。
• Web 服务器
Nginx 作为 Web 服务器可以向各种浏览器等客户端提供浏览服务,比如我们通过手机、电脑、平板可以访问百度来实现对 web 服务器的访问。
• 正向代理
由于防火墙的原因,我们并不能直接访问谷歌,那么我们可以借助 VPN 来实现,这就是一个简单的正向代理的例子。这里你能够发现,正向代理“代理”的是客户端,而且客户端是知道目标的,而目标是不知道客户端是通过 VPN 访问的。
• 反向代理
当我们在外网访问百度的时候,其实会进行一个转发,代理到内网去,这就是所谓的反向代理,即反向代理“代理”的是服务器端,而且这一个过程对于客户端而言是透明的。
本机运行nginx
• 安装
# ubuntu 安装 nginx
apt install nginx -y
• 启动 nginx 作为一个网站
- 查看 nginx 是否启动
root@ubuntu1:/data# ps -ef |grep nginx
root 12920 1 0 12:29 ? 00:00:00 nginx: master process nginx
www-data 12921 12920 0 12:29 ? 00:00:00 nginx: worker process
www-data 12922 12920 0 12:29 ? 00:00:00 nginx: worker process
root 12951 2672 0 12:30 pts/0 00:00:00 grep --color=auto nginx
root@ubuntu1:/data#
- 如果没有启动,手动启动 nginx
#查看版本
nginx -v
#手动启动
nginx
- 访问 nginx 首页
- nginx 调整配置
#ubuntu 安装后首页的信息可能被调整了,需要确认下修改,注意 centos 7.9 默认的位置就是/usr/share/nginx/html 无需修改,大家针对自己的系统可以检查后看是否需要调整配置
sudo vi /etc/nginx/sites-available/default
将原先的网址换成自己的
5. 首页内容
可以自行调整文本当中的内容
6. 停止 nginx,kill master 进程来杀死进程
7. 再重新启动nginx,就可以看到自己调整的文本内容了
查找 nginx 镜像
Docker search 可以查找,但是 nginx 的详细的 tag 我们看不见
所以通常不用search来查找镜像直接去官网查
容器运行nginx
方式1:拉取 Nginx 镜像,启动 Nginx 站点
- 拉取 nginx 镜像
我们到 https://hub.docker.com/ 上找到 nginx 镜像
root@ecs-144421:~# docker pull nginx:1.23.3
1.23.3: Pulling from library/nginx
3f9582a2cbe7: Pull complete
9a8c6f286718: Pull complete
e81b85700bc2: Pull complete
73ae4d451120: Pull complete
6058e3569a68: Pull complete
3a1b8f201356: Pull complete
Digest:
sha256:aa0afebbb3cfa473099a62c4b32e9b3fb73ed23f2a75a65ce1d4b4f55a5
c2ef2
Status: Downloaded newer image for nginx:1.23.3
docker.io/library/nginx:1.23.3
- 查看本地是否有该镜像
hacha@LAPTOP-H2EI4I6A:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
crpi-xp37q81m2et6ppvz.cn-hangzhou.personal.cr.aliyuncs.com/hacha/hacha latest d2c94e258dcb 19 months ago 13.3kB
nginx 1.23.3 ac232364af84 20 months ago 142MB
- 运行镜像
docker run --name nginx1 --rm -it -p 80:80 nginx:1.23.3 bash
-
查看我们现在是在容器的 shell 里面,执行 cat /etc/release查看操作系统不是Ubuntu
-
在容器中启动 nginx
-
shell 不退出打开另外一个 shell 窗口执行 curl 命令,可以看到 nginx 的欢迎信息返回
如果你的服务器的 80 端口外部能访问那么可以用浏览器看到 nginx 的欢迎页面,注意云厂商一般都屏蔽了 80 端口,需要联系客服开通。 -
shell 退出观察再 curl 发现我们已经 ping 不同了,说明 nginx 是容器里面的而不是服务器里面的
root@LAPTOP-H2EI4I6A:~# curl 127.0.0.1
curl: (7) Failed to connect to 127.0.0.1 port 80: Connection refused
方式2:拉取某个组织或者用户定制的镜像
拉取某个组织或者用户镜像
docker pull bitnami/nginx:1.23.4
方式3:通过 DIGEST 拉取镜像
我们找到 1.22.1 版本的 nginx
查看本地镜像
root@LAPTOP-H2EI4I6A:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
crpi-xp37q81m2et6ppvz.cn-hangzhou.personal.cr.aliyuncs.com/hacha/hacha latest d2c94e258dcb 19 months ago 13.3kB
nginx <none> 0f8498f13f3a 20 months ago 142MB
nginx 1.23.3 ac232364af84 20 months ago 142MB
查看镜像实际 id
综合实战二:Docker hub 上创建自己私有仓库
Busybox
BusyBox 是一个集成了三百多个最常用 Linux 命令和工具的软件。BusyBox 包含了一些简单的工具,例如 ls、cat 和 echo 等等,还包含了一些更大、更复杂的工具,例grep、find、mount 以及 telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。
简单的说 BusyBox 就好像是个大工具箱,它集成压缩了 Linux 的许多工具和命令,也包含了 Linux 系统的自带的 shell。busybox 是一个集成了一百多个最常用 linux 命令和工具的软件,他甚至还集成了一个 http 服务器和一个 telnet 服务器,而所有这一切功能却只有区区 1M 左右的大小.因海外带宽较小,我们拉取该镜像推送到自己的仓库。
• 安装
#Ubuntu 安装
apt install -y busybox
• 执行命令
busybox ls
busybox ifconfig
busybox ifconfig |busybox grep lo
• 如果不使用后面可以卸载
#ubuntu 卸载
apt --purge autoremove busybox
#centos 卸载
#清理对应目录就好
创建账号
进入 https://hub.docker.com/,点击注册按钮,输入注册信息
创建仓库
登录后点击仓库,我们创建一个个人仓库
如果提示需要进入,进入自己的邮箱完成激活
我们输入仓库信息,可见信息,点击创建完成
推送镜像到仓库
• 拉取 busybox 镜像
root@139-159-150-152:~# docker pull busybox
Using default tag: latest
latest: Pulling from library/busybox
1487bff95222: Pull complete
Digest:
sha256:c118f538365369207c12e5794c3cbfb7b042d950af590ae6c287ede74f2
9b7d4
Status: Downloaded newer image for busybox:latest
docker.io/library/busybox:latest
•给镜像打标签
docker tag busybox:latest maxhou/mybusybox:v0.1
此时查看我们多了个镜像
root@139-159-150-152:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest bab98d58e29e 3 days ago 4.86MB
maxhou/mybusybox v0.1 bab98d58e29e 3 days ago 4.86MB
grafana/grafana latest 944e84f25bc7 7 days ago 329MB
nginx <none> 8c9eabeac475 8 days ago 142MB
nginx 1.23.3 904b8cb13b93 8 days ago 142MB
hello-world latest feb5d9fea6a5 17 months ago 13.3kB
• 推送镜像到仓库,报错,因为没有登录
root@139-159-150-152:~# docker push maxhou/mybusybox:v0.1
The push refers to repository [docker.io/maxhou/mybusybox]
427701cb9c96: Preparing
denied: requested access to the resource is denied
• 登录 docker hub
root@139-159-150-152:~# docker login -u maxhou
Password:
WARNING! Your password will be stored unencrypted in
/root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#creden
tials-store
Login Succeeded
• 推送镜像成功
root@139-159-150-152:~# docker push maxhou/mybusybox:v0.1
The push refers to repository [docker.io/maxhou/mybusybox]
427701cb9c96: Mounted from library/busybox
v0.1: digest:
sha256:2c8ed5408179ff4f53242a4bdd2706110ce000be239fe37a61be9c52f70
4c437 size: 528
• 在我们的 docker hub 仓库里面查看
• 退出
docker logout
综合实战三:阿里云创建自己的私有仓库
创建账号
进入阿里云 https://www.aliyun.com/,点击右上角完成注册,可以使用支付宝快速注册
创建仓库
在产品上搜索容器镜像服务
点击管理控制台
点击创建个人实例
创建后,提示设置登录密码
完成登录密码的设置,这个密码就是我们的 docker login 的密码
点击创建镜像仓库,提示创建命名空间
配置仓库参数
设置仓库为本地仓库,完成创建
推送镜像到仓库
可以看到阿里云也提供了快捷指令
登录
查看服务器镜像
退出
root@LAPTOP-H2EI4I6A:~# docker logout crpi-xp37q81m2et6ppvz.cn-hangzhou.personal.cr.aliyuncs.com
Removing login credentials for crpi-xp37q81m2et6ppvz.cn-hangzhou.personal.cr.aliyuncs.com
实战经验
• Q:我入职了一个公司,开发一个镜像,我怎么选择用哪个作为基础镜像啊?
A:一般大型公司有自己专门的镜像制作组织,他们会选取对应的系统版本作为基础镜像,例如华为某部门选取欧拉来制作基础镜像,腾讯选择自己的 TLinux 制作基础镜像,不会因为出现 CentOS 不维护了无法使用的情况,而且这些镜像一般都会经过严格的安全扫描,然后作为基础组件提供给各个部门。一般的公司往往也会同意镜像的基础版本,所以这个选择个人一般不用太多纠结。