Alibaba Cloud Linux 部署

Alibaba Cloud Linux 3.2

1、查看版本

#系统内核信息
uname -r
#获取系统信息
cat /etc/os-release
#查询当前 Linux 系统的发行版本
lsb_release -a

2、升级系统

yum update

3、修改ssh默认端口号

vi /etc/ssh/sshd_config

找到 #Prot 这一行,按 i 编辑模式

然后把 # 号去掉,修改默认端口号 22

然后按Esc退出编辑模式,输入**:wq** 保存退出

 :w 保存,但不退出  
 :wq 保存并退出  
 :x 同:wq  
 :q 退出,如果当前文件没有保存,禁止退出  
 :q! 不保存退出

重启ssh服务

service sshd restart
#或者
systemctl restart sshd

查看端口

netstat -ntlp

查看进程

ps aux

4、防火墙配置

1.查看防火墙状态

systemctl status firewalld

2.关闭、启动、取消自启动 防火墙

systemctl stop firewalld        #临时关闭防火墙
systemctl start firewalld       #启动防火墙
systemctl disable firewalld     #取消自启动
systemctl enable firewalld      #防火墙开机自启

注意启动后就生效了,可能导致你无法连接到服务器

3.添加放行端口,或移除端口

firewall-cmd --zone=public --add-port=220/tcp --permanent #添加220端口
firewall-cmd --reload #重载
firewall-cmd --zone=public --remove-port=220/tcp --permanent #移除220端口
firewall-cmd --reload #重载

firewall-cmd --zone=public --add-port=8000-8999/tcp --permanent #添加8000-8999端口范围
firewall-cmd --reload #重载

4.查看端口号是否已添加

firewall-cmd --list-all

5.最后我们重启防火墙

systemctl restart firewalld.service

6.参数解释

--add-service #添加的服务
--zone #作用域
--add-port=80/tcp #添加端口,格式为:端口/通讯协议
--remove-port=80/tcp #移除端口
--permanent #永久生效,没有此参数重启后失效

5、修改登录界面信息

vi /etc/motd

6、docker配置

1.卸载旧版本的

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

2.需要的安装包

yum install -y yum-utils

看到complete,就安装完成了!

3.设置镜像的仓库

#默认是从国外下载的
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo   

推荐使用阿里国内源安装docker

#推荐使用阿里云的
yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo   

4.更新yum软件包索引

yum makecache fast

报错提示fast参数的问题,这是因为版本问题,centos8没有该参数。 解决办法为:去掉fast参数。

处理更新软件包出现的问题:

  • 去掉fast参数,执行命令
yum makecache 

5.安装docker

yum install -y docker-ce docker-ce-cli containerd.io

但安装完成之后的默认是未启动的,需要进行启动操作。

6.启动Docker

systemctl start docker

查看Docker状态

systemctl status docker

开机自启

#开机自启
systemctl enable docker

#关闭自启
systemctl disable docker

除了启动Docker,一些其他启动相关的命令:

#守护进程重启:
systemctl daemon-reload
#重启Docker服务:
systemctl restart docker / service docker restart
#关闭Docker服务:
docker service docker stop / docker systemctl stop docker

7.shell脚本安装一键安装

新建docker_install_yum.sh文件

#!/bin/bash
echo "准备完善docker环境安装!"
sleep 1
echo "准备倒计时 3!"
sleep 1
echo "准备倒计时 2!"
sleep 1
echo "准备倒计时 1!"
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
echo "安装yum-utils!"
yum install -y yum-utils
echo "更换阿里云镜像仓库!"
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
echo "更新yum软件包索引"
yum makecache fast
yum makecache
echo "安装docker"
yum install -y docker-ce docker-ce-cli containerd.io
echo "启动Docker"
systemctl start docker
echo "开机自启"
systemctl enable docker
echo "守护进程重启"
systemctl daemon-reload
echo "重启Docker服务"
systemctl restart docker
echo "查看Docker状态"
systemctl status docker
exit

8.安装常备软件

进入docker的Hub搜索镜像,建议按版本下载

https://hub.docker.com/open in new window

1.容器网络配置

docker默认采用”bridge”连接,启动容器的时候会按照顺序来获取ip。

这就导致启动时候ip不固定的问题

当前网络

#查看所有网络
docker network ls
#创建新网络xx_network
docker network create xx_network
#删除网络xx_network
docker network rm xx_network
#查看网络详细配置
docker network inspect bridge

1.创建自定义网络,指定网段172.17.0.0/16

docker network create --subnet=172.19.0.0/16 xo

2.创建容器

#php举例
docker run -itd --name php7  --net xo --ip 172.19.0.3 php:latest
#mysql举例
docker run -itd --name mysql  --net xo --ip 172.19.0.2 mysql:latest 
#nginx举例
docker run -itd --name nginx  --net xo --ip 172.19.0.4 nginx:latest 

3.查看容器IP

docker inspect php7 | grep IPAddress
docker inspect mysql | grep IPAddress
docker inspect nginx | grep IPAddress

2.Mysql镜像安装

docker pull mysql:8.0.32

宿主机先把文件夹目录建好

mkdir /home/mysql
mkdir /home/mysql/conf

创建my.cnf文件

touch /home/mysql/conf/my.cnf
#my.cnf写入配置
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
secure_file_priv=/var/lib/mysql

创建并运行容器

docker run -p 3888:3306 \
--net xo --ip 172.19.0.2 \
-v /home/mysql/log:/var/log/mysql \
-v /home/mysql/data:/var/lib/mysql \
-v /hwoo/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
--name mysql \
--restart=always \
-d mysql:8.0.32

重新加载mysql

docker restart mysql

如果不能访问主机就进入设置为所有主机可访问

#进入主机
docker exec -it mysql bash

设置MySQL

mysql -u root -p
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';

如果文件夹无法删除,用-rf强制删除

rm -rf 文件夹名称

查找镜像中my.cnf文件地址

find / -name my.cnf

3.php镜像安装

docker pull php:8.2.5-fpm

查找确定php.ini位置

php -r "phpinfo();" | grep 'php.ini'

创建php配置目录和本地挂载路径

mkdir /home/php
mkdir /home/www

创建临时php容器从容器中复制出要挂载的文件

docker run --name php -p 9000:9000 -d php:8.2.5-fpm

从容器中复制文件到宿主机

docker cp php:/usr/local/etc/php /home

停止、删除容器

docker stop php
docker rm php

得到php.ini

#生产环境
php.ini-production
#开发环境
php.ini-development

复制配置文件内容到php.ini

创建php容器

docker run -p 127.0.0.1:9000:9000 \
--net xo --ip 172.19.0.3 \
-v /home/php:/usr/local/etc/php \
-v /home/www:/www \
--name php8 \
--restart=always \
-d php:8.2.5-fpm

注意了:不要暴露9000端口,Docker的-p端口映射会绕过ufw直接对外开放,linux系统内的防火墙是拦不住的,本来PHP-FPM的FastCGI协议应该仅在内网使用,暴露在外网是致命的,导致被挖矿等病毒感染,Docker暴露的端口绕过了ufw的限制,导致可以从外部任意访问,进而被下载病毒感染。本人经历一次PHP的Docker容器感染kdevtmpfsi挖矿病毒,深有体会。 后面docker设置暴露端口时仅监听本机:-p 127.0.0.1:9000:9000

重启php

docker restart php8

安装pod_mysql扩展

#在php.ini把下面参数冒号去掉
extension=pdo_mysql
#exec进入容器
docker exec -it php8 bash
#安装pdo扩展支持
docker-php-ext-install pdo pdo_mysql
#查找pdo_mysql
php -m | grep pdo_mysql
#重启php容器
docker restart php8

PHP 8.2: 动态属性被弃用

添加#[AllowDynamicProperties] 豁免模式隐藏报错

#[AllowDynamicProperties]

 class User {
      private int $uid;
  }

  $user = new User();
  $user->name = 'Foo';

4.nginx镜像安装

docker pull nginx:1.23.4

创建临时nginx容器从容器中复制出要挂载的文件

docker run --name nginx -p 80:80 -d nginx:1.23.4

宿主机先把文件夹目录建好

mkdir /home/nginx

从容器中复制文件到宿主机

docker cp nginx:/etc/nginx/nginx.conf /home/nginx/
docker cp nginx:/etc/nginx/conf.d/ /home/nginx/conf.d/
docker cp nginx:/usr/share/nginx/html/ /home/nginx/html/
docker cp nginx:/var/log/nginx/ /home/nginx/logs/

停止、删除容器

docker stop nginx
docker rm nginx

重新创建并运行容器

多端口再加 -p 333:333

注意:link根据php容器的name输入

docker run \
-p 80:80 \
-p 8080:8080 \
--net xo --ip 172.19.0.4 \
-v /home/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /home/nginx/logs:/var/log/nginx \
-v /home/nginx/html:/usr/share/nginx/html \
-v /home/nginx/conf.d:/etc/nginx/conf.d \
-v /home/www:/www \
-v /etc/localtime:/etc/localtime \
--name nginx \
--restart=always \
--link php8:php \
-d nginx:1.23.4

conf.d目录下的配置文件

server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;
   
    location / {
        root   /www/cxxx;
        index index.php index.html index.htm;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

#以下是php配置文件
    location ~ \.php$ {
        root           /www/cxxx;
        fastcgi_pass   php:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }


}


在宿主机上修改nginx.conf和conf目录下的配置文件后,需要重启容器重新加载配置。

docker restart nginx

查docker容器内网地址

docker inspect mysql | grep IPAddress
docker inspect php8 | grep IPAddress
docker inspect nginx | grep IPAddress

5.compose编排

1、安装compose

compose的github地址

https://github.com/docker/compose/open in new window

#服务器自带python3,检查当前pip3版本并升级到最新版本。
pip3 install --upgrade pip
#直接用pip3安装
pip3 install docker-compose
#其他linux版本安装 1.29.2是目前最新最稳定的版本
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#对二进制文件应用可执行权限
chmod +x /usr/local/bin/docker-compose
#检查是否安装成功
docker-compose version

2、创建编排文件 docker-compose.yml


6.其他

Docker参数说明:

参数说明:
--name 容器名称。 
-d 后台运行容器的镜像名。 
-i 以交互模式运行,通常与-t同时使用
-t 为容器重新分配一个伪输入终端,通常与-i同时使用
-P 随机端口映射,大写P
-p 指定端口映射,小写p
-v 挂载文件
-e TZ=Asia/Shanghai  设置时区
--privileged=true 让容器中的root用户拥有真正的root权限
--restart=always docker启动时自动启动容器

Docker操作命令:

#搜索仓库镜像:
docker search 镜像名
#拉取镜像:
docker pull 镜像名
#查看正在运行的容器:
docker ps
#查看所有容器:
docker ps -a
#删除容器:
docker rm container_id
#查看镜像:
docker images
#删除镜像:
docker rmi image_id
#启动(停止的)容器:
docker start 容器ID
#停止容器:
docker stop  容器ID
#重启容器:
docker restart 容器ID
#启动(新)容器:
docker run -it ubuntu /bin/bash
#进入容器:
docker attach 容器ID
#或
docker exec -it 容器ID /bin/bash,推荐使用后者

#更多的命令可以通过docker help命令来查看。
游荡时间:
到此一游: 大荣, xoxu