Centos7.6新建环境

打算从docker,python3,redis,mysql,nginx,部署服务

这个顺序开始安装

查看服务器整体情况

# 显示物理CPU个数
[root@hiddeninfo ~]#  cat /proc/cpuinfo |grep "physical id"|sort|uniq|wc -l
16

# cpu cores
[root@hiddeninfo ~]# cat /proc/cpuinfo |grep "cpu cores"|uniq
cpu cores    : 1

# 逻辑cpu个数
[root@hiddeninfo ~]# cat /proc/cpuinfo|grep "processor"|wc -l
16
# 配置应用时,以逻辑cpu个数为准
# 逻辑CPu个数=physical * cpu cores

# 内存使用情况
[root@hiddeninfo ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:            31G        336M         26G        1.6G        4.5G         28G
Swap:            0B          0B          0B

# 磁盘使用情况
# vda高效云盘 tmpfs普通磁盘
[root@hiddeninfo ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        20G  3.2G   16G  17% /
devtmpfs         16G     0   16G   0% /dev
tmpfs            16G     0   16G   0% /dev/shm
tmpfs            16G  1.6G   15G  11% /run
tmpfs            16G     0   16G   0% /sys/fs/cgroup
tmpfs           3.2G     0  3.2G   0% /run/user/0

# pid:port对应查找
# port找pid
netstat -nap | grep PORT
lsof -i:PORT
# pid找port
lsof -i|grep PID
netstat -nap | grep PID
# 进程名找pid,port
ps -ef|grep ...

# 查看tcp,udp连接状态并显示进程pid
[root@service37 ~]# netstat -ntulp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      3191/sshd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      9487/master         
tcp6       0      0 :::22                   :::*                    LISTEN      3191/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      9487/master         
udp        0      0 127.0.0.1:323           0.0.0.0:*                           602/chronyd         
udp        0      0 0.0.0.0:68              0.0.0.0:*                           704/dhclient        
udp6       0      0 ::1:323                 :::*                                602/chronyd
# 查看系统信息
[root@hiddeninfo ~]# cat /proc/version
Linux version 3.10.0-862.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) ) #1 SMP Fri Apr 20 16:44:24 UTC 2018

# 适用于redhat的发行版本
[root@hiddeninfo ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)

# 适用于Ubuntu等版本
root@ubuntu:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04 LTS
Release:        14.04
Codename:       trusty
# 查看进程信息
yum install psmisc
pstree -p

# top 查看cpu,mem占用情况,查看load average: 表示过去1,5,15分钟进程队列中的平均进程数量,这个数长期大于逻辑CPU时说明服务器负载过大



top - 11:44:28 up 104 days, 23:56,  3 users,  load average: 0.00, 0.01, 0.05
Tasks: 179 total,   1 running, 178 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni, 99.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 32772604 total, 27680264 free,   345976 used,  4746364 buff/cache
KiB Swap:        0 total,        0 free,        0 used. 30333224 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                           
 3706 root      20   0  162012   2308   1592 R   0.3  0.0   0:00.07 top                               
49235 root      20   0  113708   2132   1320 S   0.3  0.0   0:06.01 bash                              
`
  • vmstat监控Linux系统的整体性能

[root@hiddeninfo ~]# vmstat 1 2
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 27679372  99568 4646824    0    0     0     0    0    0  0  0 100  0  0
 0  0      0 27679356  99568 4646824    0    0     0     0  145   86  0  0 100  0  0
  • 参数:

    • procs:

      • r: 等待运行的进程数

      • b: 处于非中断睡眠状态的进程数    

    • memory:

      • swpd: 虚拟内存使用情况(KB)

      • free: 空闲内存(KB)

    • swap:

      • si: 从磁盘交换到内存的交换页数量

      • so: 从内存交换到磁盘的交换页数量

    • io:

      • bi: 发送到设备的块数(块/s)

      • bo: 从块设备接收到的块数(块/s)

    • system:

      • in: 每秒中断数

      • cs: 每秒的环境上下文切换数

    • cpu:(cpu总使用的百分比)

      • us: cpu使用时间

      • sy: cpu系统使用时间

      • id: 闲置时间

      • wa: IO等待时间百分比 wa的值高时,说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)。

安装docker

一开始尝试rpm安装总是报错:

[root@localhost ~]# wget -P /opt/env/ https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-18.09.1-3.el7.x86_64.rpm
--2019-07-05 10:25:47--  https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-18.09.1-3.el7.x86_64.rpm
正在解析主机 download.docker.com (download.docker.com)... 52.222.201.173, 52.222.201.219, 52.222.201.29, ...
正在连接 download.docker.com (download.docker.com)|52.222.201.173|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:19596676 (19M) [binary/octet-stream]
正在保存至: “/opt/env/docker-ce-18.09.1-3.el7.x86_64.rpm”

100%[==============================================================================>] 19,596,676  1.87MB/s 用时 8.9s

2019-07-05 10:25:57 (2.09 MB/s) - 已保存 “/opt/env/docker-ce-18.09.1-3.el7.x86_64.rpm” [19596676/19596676])

[root@localhost ~]# yum install /opt/env/docker-ce-18.09.1-3.el7.x86_64.rpm
已加载插件:fastestmirror, langpacks
正在检查 /opt/env/docker-ce-18.09.1-3.el7.x86_64.rpm: 3:docker-ce-18.09.1-3.el7.x86_64
/opt/env/docker-ce-18.09.1-3.el7.x86_64.rpm 将被安装
正在解决依赖关系
--> 正在检查事务
---> 软件包 docker-ce.x86_64.3.18.09.1-3.el7 将被 安装
--> 正在处理依赖关系 container-selinux >= 2.9,它被软件包 3:docker-ce-18.09.1-3.el7.x86_64 需要
Loading mirror speeds from cached hostfile
 * base: centos.uhost.hk
 * epel: mirror1.ku.ac.th
 * extras: centos.uhost.hk
 * updates: centos.uhost.hk
 * webtatic: us-east.repo.webtatic.com
--> 正在处理依赖关系 containerd.io,它被软件包 3:docker-ce-18.09.1-3.el7.x86_64 需要
--> 正在检查事务
---> 软件包 container-selinux.noarch.2.2.99-1.el7_6 将被 安装
---> 软件包 docker-ce.x86_64.3.18.09.1-3.el7 将被 安装
--> 正在处理依赖关系 containerd.io,它被软件包 3:docker-ce-18.09.1-3.el7.x86_64 需要
--> 解决依赖关系完成
错误:软件包:3:docker-ce-18.09.1-3.el7.x86_64 (/docker-ce-18.09.1-3.el7.x86_64)
          需要:containerd.io
 您可以尝试添加 --skip-broken 选项来解决该问题
** 发现 8 个已存在的 RPM 数据库问题, 'yum check' 输出如下:
icedtea-web-1.7.1-1.el7.x86_64 有缺少的需求 java-1.8.0-openjdk
icedtea-web-1.7.1-1.el7.x86_64 有缺少的需求 jpackage-utils
icedtea-web-1.7.1-1.el7.x86_64 有缺少的需求 jpackage-utils
jline-1.0-8.el7.noarch 有缺少的需求 jpackage-utils
rhino-1.7R5-1.el7.noarch 有缺少的需求 jpackage-utils
rhino-1.7R5-1.el7.noarch 有缺少的需求 jpackage-utils
tagsoup-1.2.1-8.el7.noarch 有缺少的需求 jpackage-utils
tagsoup-1.2.1-8.el7.noarch 有缺少的需求 jpackage-utils >= ('0', '1.6', None)

还是按官网上yum安装吧= ='

yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

yum-config-manager     --add-repo     https://download.docker.com/linux/centos/docker-ce.repo

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

docker -v
docker info
# docker info可能报错,执行以下命令启动守护进程就好了
systemctl daemon-reload
systemctl restart docker

systemctl start docker
top
docker run hello-world
[root@localhost ~]# docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:41a65640635299bab090f783209c1e3a3f11934cf7756b09cb2f1e02147c6ed8
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

出现这样的界面就代表安装完毕了,接下来换镜像源:

# ps:其实可以在pull的时候指定镜像源
docker pull registry.docker-cn.com/library/ubuntu:16.04

# 1.修改/新建配置文件,国内镜像源要把daemon.json换成daemon.conf
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["http://hub-mirror.c.163.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

# 然后
systemctl daemon-reload
systemctl restart docker
  • docker操作

docker info    # 查看docker详细的信息
docker search [option] KEYWORD # 搜索镜像
docker pull
docker rmi [OPTIONS] IMAGE [IMAGE...] # 删除tag或者指定镜像id删除此镜像和tag,注意:当有另一个镜像引用要删除的镜像的时候是删除不了的(-f 不建议使用),根据提示给出引用的镜像进行确认

docker image ls -all # 查看所有镜像
# 通过dockerfile创建镜像
docker image build -t [REPOSITORY[:TAG]]

docker container ls    -a # 查看所有容器
docker container commit   [OPTIONS] CONTAINER [REPOSITORY[:TAG]] # 本地提交镜像

docker save [OPTIONS] IMAGE [IMAGE...]
    docker save -o python_3.tar python:3 # 将镜像保存为tar文件
docker load < python_3.tar # 加载这个镜像
# 接下来可以取dockerhub创建公共/私有仓库
# https://www.exception.site/docker/docker-push-image

docker tag NAME1 NAME2 # 为image_id新建一个tag,可以快速找到镜像

docker inspect REPOSITORY # 查看image信息

docker run [OPTIONS] IMAGE [COMMAND] [ARG...] # 运行的容器

# mysql命令
docker run -d \
--name mysql \
-p 5001:3306 \
-v /usr/local/docker/mysql/config/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf \
-v /usr/local/docker/mysql/data/mysql:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:8

docker run --name=mysql_3309 \
-v /data/mysql_3309/data:/var/lib/mysql \
-v /data/mysql_3309/conf/my.cnf:/etc/mysql/my.cnf \
--privileged=true \
-p 3309:3306 \
-e MYSQL_ROOT_PASSWORD=123456\
-d
# redis命令
docker run -d -ti --name redis_5101 -p 5101:6379 -v /usr/local/docker/redis/config/redis.conf:/etc/redis/redis.conf -v /usr/local/docker/redis/data:/data --privileged=true --restart always redis:5.0.5 redis-server /etc/redis/redis.conf
# 用ssh转发链接redis
ssh -C -f -N -g -L 6381:127.0.0.1:6379  -i /c/Users/MicroWu/Desktop/小悟资料/im/imid root@45.250.40.67 -p 22

# php命令
docker run -p 9000:9000 --name  php -v /data/php/www/html:/var/www/html -v /data/php/php/conf:/usr/local/etc/php -v /data/php/php/conf/conf.d:/usr/local/etc/php/conf.d -d  php:7.2.9-fpm

-v [REAL_PATH]:[CONTAINER_PATH] # 指定挂载目录
-p [REAL_PORT]:[CONTAINER_PORT] # 指定内外部端口
-e # 指定容器环境变量

docker exec -it 775c7c9ee1e1 bash  # 进入某个容器,参数-t让Docker分配一个伪终端并绑定在容器的标准输入上,-i让容器的标准输入保持打开。

docker inspect [CONTAINERID/NAME] |grep "IPAddress" # 查看容器ip

docker stop CONTAINER ID # 停止
docker restart CONTAINER ID # 重启

docker cp 宿主机目录 CONTAINER ID:目录 # 宿主机项容器传输文件
docker cp CONTAINER ID:目录 宿主机目录 # 容器向宿主机传输文件

Mysql操作

ALTER user 'root'@'%' IDENTIFIED WITH

mysql_native_password BY 'MySqLPsWd#3309'; # local可改成其他Ip

update user set host = '%' where user = 'root'; # 改成所有ip可连接

flush privileges; # 刷新权限
mysql> select host,user from mysql.user;
+-----------+------------------+
| host      | user             |
+-----------+------------------+
| %         | root             |
| localhost | healthchecker    |
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
+-----------+------------------+
5 rows in set (0.00 sec)

create database <数据库名> character set utf8mb4; # 新建数据库时指定字符集
source 容器目录/xx.sql # 导入sql脚本

php环境配置

docker run -p 9000:9000 --name  php -v /data/php/www/html:/var/www/html -v /data/php/php/conf:/usr/local/etc/php -v /data/php/php/conf/conf.d:/usr/local/etc/php/conf.d -d  php:7.2.9-fpm
# 安装pdo扩展
docker-php-ext-install pdo pdo_mysql
# 安装redis扩展
pecl install redis

Last updated