【前言】作为一名前端工程师,我们的职责就是写页面还有解决提出需求的人🥹,鸽了很久的服务器搭建第二篇终于来了,整篇文章我估计会是万字系列,我会尽可能讲的有趣一些,如有问题也可以一起交流学习,本人只有简单服务器搭建基础,目前也在不断学习中,若下面的内容有错误,请各位大佬指正,理性讨论,谢谢☃️
【备注】本文服务器系统装的是 centos 7.6,各位小伙伴可以采用其他的实现,只是方便使用就好,根据自己所需要的业务场景进行更换即可。由于内容有点多,因此将本文拆分成多个文章,如果下面没有文章三的链接,就是笔者还没更新啦,请关注笔者,你的点赞转发关注将会是我更新文章的动力。
【前文】「一个长篇系列」万字述说很多前端工程师都不会的服务器搭建(一)
Docker-Compose
简介
上篇以Nginx
镜像为例子,使用了Docker
进行安装,安装命令如下docker run -d --name inginx -p 80:80 nginx
,这个命令会随着你业务需求的复杂程度而加长,是不是十分不好记嘞,而且随着要部署的服务越来越多,每次都得重新跑一次docker run
,要是服务有依赖的话还得要按照先后顺序进行部署,万一一个不小心部署错乱了,就得重新部署。如果没有记录下来,你还得去找配置文件,看看当时到底是怎么配置的容器,十分繁琐。因此,为了解决Docker
的痛点问题,Docker-Compose
应运而生。
Docker Compose
是一个用于定义和运行多容器 Docker
应用程序的工具。它允许你通过一个简单的 YAML 文件来配置应用程序的服务、网络和卷等参数,然后使用一个单一的命令启动整个应用程序。Docker Compose
主要用于简化容器化应用程序的部署和管理过程。
特点
- 声明式配置: 使用 YAML 文件定义应用程序的服务、网络、卷等配置,使配置文件易于理解和编写。
- 多容器应用: Docker Compose 适用于多容器应用场景,可以同时启动和管理多个相关的容器。
- 服务定义: 在配置文件中定义应用程序的服务,包括使用的镜像、端口映射、环境变量等。
- 网络和卷配置: 允许定义自定义网络、卷以及它们之间的关联。
- 简化部署: 通过一个命令 (
docker-compose up
) 启动整个应用程序,简化了部署和运行多容器应用的过程。 - 容器编排: Docker Compose 提供了容器编排的能力,使得容器之间的依赖关系和启动顺序得以管理。
Docker-Compose
常用命令
日常惯例,先写一下常用命令,下面看到不会的时候再往上翻翻,以下命令都需要在 docker-compose.yaml
或docker-compose.yml
文件根目录下执行
shell
// 启动服务,up 的参数 -d 指的是将在后台启动容器并使它们继续运行
docker-compose up -d
docker-compose start
// 停止服务
docker-compose down
docker-compose stop
// 重启服务
docker-compose restart
// 列出所有运行中的容器
docker-compose ps
// 查看日志
docker-compose logs
// 重新构建服务
docker-compose build
docker-compose up 和 docker-compose start 的区别
以下内容引用自ChatGpt
,懒得去搜资料了,请大家仔细阅读。
-
docker-compose up:
docker-compose up
命令用于创建并启动Compose文件中定义的服务。它会首先构建缺失的镜像,然后启动容器。- 如果Compose文件中定义了多个服务,它们将同时启动,并通过配置的网络连接在它们之间建立通信。
- 此命令还会输出容器的日志到控制台,方便查看容器的输出信息。
- 默认情况下,该命令会监控容器的状态,并在容器退出时终止运行。
-
docker-compose start:
docker-compose start
命令用于启动Compose文件中定义的服务的已停止容器。- 如果容器已经在运行,则该命令不会产生任何影响。
- 与
docker-compose up
不同,该命令不会构建镜像,只是启动已经存在的容器。 - 它也不会输出容器的日志到控制台。
因此,docker-compose up
用于启动服务并创建容器,而docker-compose start
仅用于启动已停止的容器。在使用Docker Compose时,你可以根据需要选择适合的命令。
docker-compose down 和 docker-compose stop 的区别
以下内容引用自ChatGpt
,懒得去搜资料了,请大家仔细阅读。
-
docker-compose down:
docker-compose down
命令用于停止并移除Compose文件中定义的服务及其相关的网络、容器和卷。- 它会停止Compose文件中定义的所有容器,并移除它们。
- 同时,它还会移除创建的网络,并删除与Compose文件中定义的服务关联的卷。
- 此命令会清理Compose项目的资源,并还原到停止状态,可以方便地重新构建和启动服务。
-
docker-compose stop:
docker-compose stop
命令用于停止Compose文件中定义的服务的正在运行的容器。- 它会停止Compose文件中定义的所有正在运行的容器,但不会移除它们。
- 它不会移除网络或卷,只是停止容器的运行状态。
- 它保留容器的状态和配置,可以使用
docker-compose start
命令重新启动这些容器。
因此,docker-compose down
用于停止并移除服务及其相关资源,而docker-compose stop
用于停止正在运行的容器,但保留其状态和配置。根据需要,你可以选择适当的命令来管理Compose项目中的容器。
Docker-Compose
具体使用
先将具体的步骤写在下方,接下来会按照下面的步骤去实战配置,不记得的小伙伴可以回来这里看看。
- 编写 Docker Compose 文件: 创建一个
docker-compose.yml
文件,定义应用程序的服务、网络、卷等配置。 - 配置服务: 在文件中为每个服务指定镜像、端口映射、环境变量等配置。
- 启动应用程序: 使用
docker-compose up
命令启动整个应用程序。使用-d
选项可以在后台运行。 - 停止应用程序: 使用
docker-compose down
命令停止应用程序,会停止并删除相关的容器、网络和卷。 - 管理多容器应用:
Docker-Compose
提供了一系列命令来管理应用程序,如docker-compose ps
查看服务状态、docker-compose logs
查看日志等。 - 扩展和定制: 可以根据需要扩展和定制 Docker Compose 配置,以适应不同的应用程序需求。
Nginx
获取Nginx
镜像(与第一篇的步骤一致)
默认获取最新版本的镜像,如果有问题再降低镜像版本即可
shell
docker pull nginx
创建Nginx
挂载文件夹(与第一篇的步骤一致)
这一步是为了将Nginx
容器内的配置文件挂载到服务器上,因此需要创建存放的目录文件夹,可以自定义目录文件夹,不一定要按照我的来,如果有修改的话,按照自己修改后的目录文件夹来。
shell
// 存放配置文件
mkdir -p /home/nginx
// 用于存放nginx日志
mkdir -p /home/nginx/logs
// 这个最关键,用于存放静态资源,也就是vue或者react打包出来后的产物(dist文件夹)
mkdir -p /home/nginx/html
不挂载的生成一个Nginx
容器!!!!这一步很重要!!!(与第一篇的步骤一致)
如果有docker基础的小伙伴可能会知道,有一些容器可以直接挂载到宿主机上,但是nginx不可以,docker安装Nginx
的时候,需要先读取配置才运行,如果宿主机对应的目录是空的话,就启动不了了,所以需要先安装不挂载的容器(来自好朋友的解释)然后再将容器内的配置文件复制出来,再进行挂载,听不懂的小伙伴也没关系,照着步骤往下走就对了!别跳过!
执行以下命令,生成一个Nginx
容器,我这里命名为inginx,如果你们喜欢其他名字自己命名即可,下面对应着自己的命名进行操作。
shell
docker run -d --name inginx -p 80:80 nginx
进入nginx容器,查看Nginx
的配置,这步可做可不做,你随意~(与第一篇的步骤一致)
shell
// 进入容器
docker exec -it inginx bash
// 查看nginx配置文件
cat /etc/nginx/nginx.conf
// 退出nginx
exit
不出意外的话你会得到下面的内容
复制配置文件到宿主机(服务器)上
执行下面三条命令
bash
docker cp inginx:/etc/nginx/nginx.conf /home/nginx/nginx.conf
docker cp inginx:/etc/nginx/conf.d /home/nginx/
docker cp inginx:/usr/share/nginx/html /home/nginx/
不出意外你应该会得到下面的提示
删除刚刚空挂载的容器(与第一篇的步骤一致)
把配置文件复制出来后,原来的那个Nginx
容器已经没用了,做个渣男(无不良取向,富强明主文明和谐),删了它,找新欢去了。
这时候你有两种方式删除这个Nginx
容器
第一种:先暂停运行容器,再删除容器
shell
docker stop inginx
docker rm inginx
第二种:直接删除正在运行的容器
shell
docker rm - f inginx
编写docker-compose.yml
文件
关于yml
语法这里不讲解,可以自行查阅资料,yml个人感觉相当于js
的对象key
与value
的关系,在Docker-Compose
中记住几个关键的key
即可,其他的key
在有需要的时候去网上搜一下就行。
version
:版本,现在默认写3即可
services
:需要部署的服务(Nginx、Jenkins......)
image
:镜像(nginx:latest)
container_name
:容器名称(自取)
ports
:端口映射("80:80")
volumes
:相当于docker run -v
,指的是数据卷挂载地址
(Eg: /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime)
networks
:网络名称
depends_on
:依赖
redis
:redis相关配置
mysql
:mysql相关配置
command
: 附加命令
Docker-Compose
部署最重要的一步便是编写yml
文件,从这里开始与Docker
直接部署有区别,在哪里新建yml
文件呢,应该是项目的根目录下,在这里我部署nginx
,所以我选择在/home/nginx
下新建docker-compose.yml
。
shell
// 切换到项目根目录下
cd /home/nginx
// 生成文件
touch docker-compose.yml
// 插入内容
vim docker-compose.yml
按i
插入,复制粘贴以下编写完成的yml
内容进去
yml
version: '3'
services:
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime
- /home/nginx/nginx.conf:/etc/nginx/nginx.conf
- /home/nginx/conf.d:/etc/nginx/conf.d
- /home/nginx/logs:/var/log/nginx
- /home/nginx/html:/usr/share/nginx/html
restart: always
container_name: inginx
按下esc
,输入:wq
保存退出
如果你认真阅读了第一篇文章,就会发现其实yml
只是将docker run
的命令写成变量存储在里面而已。
上面编写的yml
文件部署了nginx
服务,镜像选取最新的nginx
镜像,开放端口均为80,挂载了时区变量,nginx
配置文件的映射文件夹,允许服务自启动,容器取名为inginx
。
启动应用程序服务
执行一下
docker-compose up -d
看到下图即说明部署成功
(下面与第一篇的步骤一致)
这时候就可以去访问一下你自己的ip地址,你就会发现下面的内容。
恭喜你已经成功使用Docker-compose
部署了nginx
。
但也别着急,还没完成呢,还差几步,接着来
arduino
vim /home/nginx/conf.d/default.conf
进入 vim 模式下,按下 i
进入插入模式,删除掉以#
开头的语句,将光标移动到location /
语句块下面回车,修改为如下语句
shell
server {
listen 80;
listen [::]:80;
+ root /usr/share/nginx/html/dist/;
server_name localhost;
location / {
+ root /usr/share/nginx/html/dist/;
+ index index.html;
+ try_files $uri $uri/ /index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
插入后,按下esc
,输入:wq
,这个就是保存退出。
更改完配置后记得要重启一下Nginx
容器
shell
docker restart inginx
然后就可以上传你自己本地的dist文件夹上去服务器测试一下
shell
scp -r ./dist root@[你自己的服务器ip]:/home/nginx/html
Eg: scp -r ./dist root@123.123.123.123:/home/nginx/html
然后就可以访问http://123.123.123.123/
(只是示例,按你自己真实情况进行访问)
✅ 成功案例
❌ 错误案例
如果你发现404,解决方法在第一篇文章内。
Portainer
简介
Portainer 是一个用于管理 Docker 容器的图形用户界面工具。使用 Docker Compose 部署 Portainer 非常简单。
这个应该就不用解释了吧,dddd~
直接准备安装吧
编写 yml
文件
在services
中新增
yml
portainer:
image: portainer/portainer-ce
ports:
- "9000:9000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /home/nginx:/home/docker_compose
restart: always
container_name: portainer
整个文件如下
yml
services:
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime
- /home/nginx/nginx.conf:/etc/nginx/nginx.conf
- /home/nginx/conf.d:/etc/nginx/conf.d
- /home/nginx/logs:/var/log/nginx
- /home/nginx/html:/usr/share/nginx/html
restart: always
container_name: inginx
portainer:
image: 6053537/portainer-ce
ports:
- "9000:9000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /home/nginx:/home/docker_compose
restart: always
container_name: iportainer
注意: 我这里安装的是镜像是6053537/portainer-ce
,这是一个汉化好了的portainer
,一打开就是中文界面,如果有更喜欢英文版的小伙伴可以改成portainer/portainer-ce
。
启动应用程序服务
执行一下
shell
// 暂停与删除容器
docker-compose down
// 重新部署与构建容器
docker-compose up -d
看到下图代表你已经完成portainer
部署
然后!!!!记得记得去服务器后台打开防火墙端口9000
,如果没打开来问我为什么打不开,你就自己反省一下吧!!!!
然后就可以访问http://123.123.123.123:9000
(只是示例,按你自己真实情况进行访问)
填写用户名、密码注册个账号
然后你登录,看到下图就完成啦(注册图没截图,懒得搞了,下面的图凑合看)!
写在最后
最近我做了一个自己的个人公众号,一方面是为了一些小伙伴能够在微信上能看到我的相关文章,另一方面也是想尝试新鲜事物,作为自己的一个挑战吧,还有一个方面是为了建立大家与我交流的渠道,这个公众号完全是由我本人运营,所以也不定期更新,回答各位小伙伴的各类问题,公司业务繁忙的时候也没办法实时更新,所以只能保证不鸽,希望大家也能多多给我的文章点赞转发在看啦,最近也会实现一些比较有趣的功能在我的公众号上,尽情期待。我也在这立个小目标粉丝先突破100好吧。
微信公众号名字与笔者名字完全相同 :微信搜索公众号陈适时点击添加关注即可。