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