Linux搭建服务器

系统环境

$ lsb_release -a

LSB Version: :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description: CentOS Linux release 8.2.2004 (Core)
Release: 8.2.2004
Codename: Core

Linux搭建Docker环境

  • 安装Docker的依赖库
$ yum install -y yum-utils device-mapper-persistent-data lvm2
# 参数说明
# -y 对所有的问题均回答yes

# 也可以使用官方安装脚本自动安装,可跳过2、3步
$ curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
  • 添加Docker CE的软件源信息。
$ yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  • 安装Docker CE。
# 将服务器上的软件包信息在本地缓存一下,提高搜索速度
$ yum makecache fast
$ yum -y install docker-ce
  • 启动Docker服务
$ systemctl start docker
  • 配置Docker的自定义镜像仓库地址
# 仅针对阿里云服务器
# 请将下面命令中的镜像仓库地址https://kqh8****.mirror.aliyuncs.com替换为阿里云为您提供的专属镜像加速地址。
# 地址:容器镜像服务 -> 镜像中心 -> 镜像加速器

$ tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://kqh8****.mirror.aliyuncs.com"]
}
EOF
  • 重新加载服务配置文件
$ systemctl daemon-reload
  • 重启Docker服务
$ systemctl restart docker

docker中安装Nginx并部署静态文件

  • 查看Docker镜像仓库中Nginx的可用版本
$ docker search nginx
  • 拉取最新版的Nginx镜像
$ docker pull nginx:latest
  • 查看本地镜像
$ docker images
  • 运行容器
$ docker run --name nginx-test -p 8080:80 -d nginx

# 参数说明
# --name nginx-test -> 容器名称。
# -p 8080:80 -> 端口进行映射,将本地8080端口映射到容器内部的80端口。
# -d nginx -> 设置容器在后台一直运行。

运行完之后可以在浏览器地址栏输入http://<ECS公网地址>:8080访问Nginx服务

  • 如果访问不通,需要检查容器是否启动正常,以及服务器是否开放了当前端口

    • 查看当前启动的容器
    $ docker ps
    • 阿里云开放端口

    对应菜单:云服务器 ECS -> 网络与安全 -> 安全组
    点进安全组,选择手动添加,具体配置如下图
    安全组配置

  • 自定义nginx配置

我们往往希望自己定制nginx的配置,这时候需要将nginx的配置挪出来。

$ docker container cp nginx-test:/etc/nginx .
# 上面命令的含义是,把mynginx容器的/etc/nginx拷贝到当前目录。不要漏掉最后那个点。

执行完成后,当前目录应该多出一个nginx子目录。然后,把这个子目录改名为conf。

$ mv nginx conf

然后在conf目录下的配置文件中就可以对nginx进行配置了。同样,对于log日志和静态文件也可以自定义。
在conf同级目录下执行下列命令。

$ mkdir logs www

然后我们将静态文件放入www文件夹中。因为我们改了配置,所以需要重启nginx。

  • 重启nginx
# 停止nginx-test
$ docker stop nginx-test

# 启动服务
$ docker run -d \
-p 80:80 \
-p 443:443 \
--rm -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/logs:/var/log/nginx \
-v $PWD/www:/usr/share/nginx/html \
-v $PWD/conf/cert:/etc/nginx/cert \
-v $PWD/conf/cert:/etc/nginx/conf.d/cert \
--name my_nginx nginx

docker run --name nginx -p 443:443 -p 80:80 -v /home/nginx/html:/usr/share/nginx/html -v /home/nginx/config/nginx.conf:/etc/nginx/nginx.conf/ -v /home/nginx/logs:/var/log/nginx/ -v /home/nginx/ssl:/etc/nginx/ssl/ --privileged=true -d --restart=always nginx

# 参数说明
# -- -rm -> 容器停止运行后,自动删除容器文件
# -- -v -> 绑定一个卷
# -- $PWD -> 当前目录

这时候再去访问8080端口,就可以看到放在www文件夹中静态文件输出的内容了。

docker上安装node.js

# 查看Docker镜像仓库中node的可用版本
$ docker search node

# 拉取最新版的Nginx镜像
$ docker pull node:latest

# 运行node容器
$ docker run -itd --name node-test node

# 参数说明
# -- -i -> 以交互模式运行容器,通常与 -t 同时使用
# -- -t -> 为容器重新分配一个伪输入终端,通常与 -i 同时使用
# -- -d -> 后台运行容器,并返回容器ID

# 进入node容器
$ docker exec -it node-test /bin/bash

# 参数说明
# -- -i -> 即使没有附加也保持 STDIN 打开
# -- -t -> 分配一个伪终端
  • STDIN ?

STDIN 通常和 STDOUT 、STDERR 一起出现,他们是终端的标准输入(standard input)、标准输出(standard output)和标准错误输出(standard error)。当linux开始执行程序的时候,程序默认会打开这3个文件流,这样就可以对终端进行输入输出操作。

docker安装MySQL

# 查看mysql可用版本
$ docker search mysql

# 拉取官方的最新版本的镜像
$ docker pull mysql:latest

# 查看本地镜像
$ docker images

# 运行容器
$ docker run --name mysqlserver \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d -i -p 3306:3306 mysql:latest

# 参数说明

# -p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口。
# -v -v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。
# -v $PWD/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。
# -v $PWD/data:/var/lib/mysql :将主机当前目录下的 data 目录挂载到容器的 /var/lib/mysql 。
# -e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。

# 进入容器
$ docker exec -it mysqlserver bash

参考

Nginx 容器教程
快速搭建Docker环境
使用docker安装mysql并连接
linux下的stdin,stdout和stderr理解

文章作者: JaCo Wu
文章链接: https://jacokwu.cn/blog/2020/06/15/Linux搭建服务器/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 JaCo Wu的博客