服务器资源搭建

MKOnlinePlayer搭建在线音乐播放器

地址:https://github.com/mengkunsoft/MKOnlineMusicPlayer

搭建环境:php7.2.11,httpd,mysql8.0.17

遇到的问题:

1
undefined function json_decode()

解决办法:

centos:

1
sudo yum install php-pecl-json

ubuntu

1
sudo aptitude install php5-json

音乐搜索神器

地址:https://github.com/maicong/music

搭建环境:php5.4.16 httpd

在线Json解析

地址:https://github.com/bimohxh/jsonon

ZFile(文件管理系统)

地址:https://docs.zfile.vip/#/

搭建自己的服务

appwrite

laf

supabase

使用wordPress + WebStack搭建导航网站

wordPress
WebStack

Linux常用命令

安装deb

1
sudo dpkg -i baidunetdisk_linux_2.0.2.deb

安全检测

查看恶意IP登录

1
lastb root | awk '{print $3}' | sort | uniq -c | sort -nr| more

查看是否有异常的系统用户

1
cat /etc/passwd

检查是否有新用户尤其是UID和GID为0的用户

1
awk -F":" '{if($3 == 0){print $1}}' /etc/passwd

检查是否存在空口令账户

1
awk -F: '{if(length($2)==0) {print $1}}' /etc/passwd

检查系统异常进程

使用ps -ef命令查看进程(尤其注意UID为root的进程

1
ps -ef

查看该进程所打开的端口和文件

1
2
netstat -ntlup
lsof -p 22

检查隐藏进程

1
ps -ef | awk '{print $2}'| sort -n | uniq >1; ls /proc |sort -n|uniq >2;diff -y -W 40 1 2

安装jdk

1
2
3
tar -zxvf jdk-8u171-linux-x64.tar.gz
sudo mv jdk1.8.0-171 /usr/local/jdk1.8
sudo vim /etc/profile

在文件末尾加入

1
2
3
4
export JAVA_HOME=/usr/local/jdk1.8
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=.:${JAVA_HOME}/bin:$PATH

更新生效

1
source /etc/profile

检查是否生效

1
2
java -version
javac

ubuntu安装mysql5.7

安装mysql

1
sudo apt-get install mysql-server

检查状态

1
sudo netstat -tap | grep mysql

设置root密码

1
2
3
4
5
6
7
8
9
sudo su
mysql
select user,plugin from mysql.user;
update mysql.user set authentication_string=PASSWORD('password'), plugin='mysql_native_password' where user='root';
flush privileges;
exit

sudo /etc/init.d/mysql restart
mysql -uroot -p

配置mysql远程登录
修改配置文件,bind-address = 0.0.0.0

1
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

保存退出,然后进入mysql服务,执行授权命令

1
2
3
4
5
mysql -u root -p
grant all on *.* to root@'%' identified by 'guqiao*2011_' with grant option;
flush privileges;
exit
sudo /etc/init.d/mysql restart

卸载mysql

安装nginx

1
sudo yum install -y nginx

设置开机启动

1
sudo systemctl enable nginx

关闭开机启动

1
sudo systemctl disable nginx

启动nginx

1
sudo systemctl start nginx

停止nginx

1
sudo systemctl stop nginx

查看nginx启动状态

1
sudo systemctl status nginx

重新加载nginx配置

1
sudo systemctl reload nginx

nginx默认的静态HTML文件位置

1
/usr/share/nginx/html

如果要使用NGINX作为默认的web服务器,则可以使用/var/www文件夹来存储不同的网站。但是如果将请求代理到Apache,则只需修改NGINX配置文件,就可以使用Apache网站文件的/var/www路径

安装redis

1
sudo apt-get install redis-server

查看tcp连接

1
netstat -ap | grep 6379

启动
服务:redis-server
客户端:redis-cli
修改配置文件允许局域网内的其他电脑连接redis
文件位置:/etc/redis/redis.conf
详细的使用:https://juejin.im/entry/5bac46dd5188255c960c3d27

开启SSH服务

查看ssh是否安装

1
sudo ps -e | grep ssh

安装ssh

1
2
3
4
5
sudo apt-get install openssh-server
sudo /etc/init.d/ssh start
sudo service ssh status
sudo service ssh stop
sudo service ssh restart

更改sshd_config配置

1
vim /etc/ssh/sshd_config 
1
PermitRootLogin yes
1
ssh root@192.168.1.115

配置说明

使用xshell进行文件上传和下载

1
apt-get install lrzsz

rz 上传文件

z file 下载文件

附件

linux查看公网ip

1
curl ipinfo.io/json

查看系统资源占用

查看ubuntu的资源占用

1
top

查看内存使用情况

1
free

更新系统运行时间,负载信息

1
uptime 

显示磁盘活动情况

1
vmstat 

统计CPU的使用情况及tty设备、硬盘和CD-ROM的I/O量

1
iostat

查看磁盘使用情况

1
2
df -h 
du -sh

查看mysql信息

1
ps -aux | grep mysql

安装htop工具查看

1
sudo apt-get install htop

安装seafile

https://cloud.seafile.com/published/seafile-manual-cn/deploy/using_mysql.md

安装ffmpeg

1
2
3
sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-next
sudo apt-get update
sudo apt-get install ffmpeg

查看访问数

1
cat /var/log/auth.log  | grep "sshd" | awk '/Failed/{print $(NF-3)}' | sort | uniq -c 

centos安装mysql

https://www.centos.bz/2019/02/centos7-%E5%AE%89%E8%A3%85-mysql/

卸载腾讯云自带配置

1
2
3
4
5
6
/usr/local/qcloud/stargate/admin/uninstall.sh
/usr/local/qcloud/YunJing/uninst.sh
/usr/local/qcloud/monitor/barad/admin/uninstall.sh
sudo rm -rf /usr/local/qcloud/
sudo rm -rf /usr/local/sa/
sudo rm -rf /usr/local/agenttools

安装监控(主机面板)

宝塔linux:
https://www.bt.cn/bbs/thread-19376-1-1.html
Ajenti:
Feathur:
ISPConfig:
VestaCP:
Virtualmin:
ZPanel:
WDCP:
AMH:
WDCP:
LuManager:
VPSMate:
Oneinstack:
AppNode:
cpanel:

基本命令

1
2
3
4
5
ls
ls -al
cd
mkdir aaa
mkdir -p aaa/bbb/ccc

删除文件

1
rm -r  aaa

删除文件夹

1
rm -rf  aaa

修改文件夹名

1
mv aaa bbb

创建新文件

1
2
3
touch name.txt
echo "content" > a.txt
cat a.txt

权限管理

本组删除读写权限

1
chmod g-rw  name.txt

其他组删除读写权限

1
chmod o-rw name.txt 

个人添加可执行权限

1
chmod u+x name.txt

如果要将一个文件夹的所有内容权限统一修改,则可以-R参数

1
2
chmod -R 770 aaa
chown xxx:xxx aaa/

常用操作系统命令

1
2
useradd  username
passwd username

切换身份

1
su user 

执行这条指令用root身份,执行完成后用原来的身份

1
sudo useradd zhangsan

查看主机名

1
hostname

修改主机名(重启后无效)

1
hostname  hadoop

修改主机名(重启后有效)

1
vi /etc/sysconfig/network

修改ip(重启后无效)

1
ifconfig eth0 192.168.12.22

修改ip(重启后生效)

1
vi /etc/sysconfig/network-scripts/ifcfg-eth0

查看系统命令

1
2
uname -a
uname -r

查看日期

1
date
1
2
3
mount
umount
mount -t iso9660 -o ro /dev/cdrom /mnt/cdrom

查看文件大小

1
2
du -sh
du -ah

查看分区

1
df -h

ssh命令

1
ssh root@192.168.2.11

关机

1
2
halt
shutdown -h now /init 0

重启

1
2
reboot
shutdown -r now /reboot

远程拷贝

1
scp install.log  root@192.168.1.2:/home

公钥 私钥生成

1
ssh-keygen

复制公钥到远程主机

1
ssh-copy-id 192.168.33.111

一次性将文件内容全部输出(控制台)

1
cat somefile 

可以翻页查看,下翻一页(空格),上翻一页(b),退出(q)

1
more somefile

可以翻页查看,下翻一页(空格) 上翻一页(b) 上翻一行(↑),下翻一行(↓) 可以搜索关键字(/keyword)

1
less somefile  

查看文件尾部的10行

1
tail -10 install.log

小f跟踪文件的唯一inode号,就算文件名改后,还是跟踪原来这个inode表示的文件

1
tail  -f install.log

大F按照文件名来跟踪

1
tail -F install.log

查看文件头部的10行

1
head -10 install.log

后台服务管理

查看指定服务的状态

1
service network status

停止指定服务

1
service network stop

启动指定服务

1
service network start

重启指定服务

1
service network restart

查看系统中所有的后台服务

1
service --status-all

设置后台服务的自启配置

chkconfig 查看所有服务器自启配置

chkconfig iptables off 关掉指定服务的自动启动

chkconfig iptables on 开启指定服务的自动启动

上传安装包到服务器

可以使用图形化工具,如:filezile
可以使用sftp工具, securecrt alt+p 调出后,用put命令上传
上传(如果不cd指定目录,则上传到当前用户的主目录)

1
2
sftp> cd /home/
sftp> put c:\xxx.xxx

下载

1
sftp> get xxxxx.xxxx

压缩和解压缩

1
gzip -d install.log

将1.xxx 2.xxx 343/文件夹打包到xxx.tar文件中

1
tar -cvf xxx.tar 1.xxx 2.xxx  343/
1
tar -xvf xxx.tar 

一次性压缩

1
tar -zcvf my.tar.gz  /somefile 

一次性解压缩

1
tar -zxvf my.tar.gz 

linux jdk环境变量设置

1
vi /etc/profile

大G 到最后一行

o 插入一行

1
2
3
export JAVA_HOME=/root/apps/jdkhome
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile

查询外网IP的办法

Curl纯文本格式输出

1
2
3
4
5
6
7
curl icanhazip.com
curl ifconfig.me
curl curlmyip.com
curl ip.appspot.com
curl ipinfo.io/ip
curl ipecho.net/plain
curl www.trackip.net/i

Curl JSON格式输出

1
2
3
curl ipinfo.io/json
curl ifconfig.me/all.json
curl www.trackip.net/ip?json

Curl XML格式输出

1
curl ifconfig.me/all.xml

Curl 得到所有IP细节 (挖掘机)

1
curl ifconfig.me/all

使用 DYDNS (当你使用 DYDNS 服务时有用)

1
2
curl -s 'http://checkip.dyndns.org' | sed 's/.*Current IP Address: \([0-9\.]*\).*/\1/g'
curl -s http://checkip.dyndns.org/ | grep -o "[[:digit:].]\+"

使用 Wget 代替 Curl

1
2
wget http://ipecho.net/plain -O - -q ; echo
wget http://observebox.com/ip -O - -q ; echo

使用 host 和 dig 命令

1
2
host -t a dartsclink.com | sed 's/.*has address //'
dig +short myip.opendns.com @resolver1.opendns.com

bash 脚本示例

1
2
3
#!/bin/bash
PUBLIC_IP=`wget http://ipecho.net/plain -O - -q ; echo`
echo $PUBLIC_IP

安装ftp

1
yum -y install vsftpd

CentOS上用python调用FFMepg将m3u8合成MP4后显示异常的问题

(1)判断是否有中文包

1
locale -a

(2)如果没有中文包,则使用如下命令下载

1
yum install langpacks-zh_CN.noarch

multipass虚拟机安装

官网:https://multipass.run/

/proc/kcore 128T内存爆满问题处理

1
2
3
4
5
6
7
8
# 列出磁盘使用率
df -h
# 列出删除列表
lsof | grep delete
# 删除任务
kill XXXX
kill YYYY
....

查询大文件

1
find / -type f -size +1G

#(Centos7.9)端口号管理

开放端口

1
2
3
4
5
6
# 开放5672端口
firewall-cmd --zone=public --add-port=5672/tcp --permanent
# 关闭5672端口
firewall-cmd --zone=public --remove-port=5672/tcp --permanent
# 配置立即生效
firewall-cmd --reload

查看防火墙所有开放的端口

1
firewall-cmd --zone=public --list-ports

关闭/开启防火墙

1
2
systemctl stop firewalld.service
systemctl start firewalld.service

查看防火墙状态

1
firewall-cmd --state

查看监听的端口

1
netstat -lnpt

检查端口被哪个进程占用

1
netstat -lnpt | grep 18788

Docker常用命令

查看docker版本

1
2
3
4
docker  --version
docker-compose --version
docker-machine --version
docker info

docker常用命令

1
2
3
4
docker search <image>
docker pull imagename
docker images
docker ps -a

运行nginx服务器

1
docker run -d -p 80:80 --name webserver nginx

停止服务器

1
docker stop webserver

删除服务器

1
docker rm webserver

docker命令

Docker简介

依赖于linux的cgroups和namespace

1
docker run -i -t ubuntu /bin/bash

Docker的基本组成

Docker Client/Docker Daemon

C/S架构

本地/远程

Docker Image

容器的基石(源代码)

层叠的只读文件系统

联合加载(union mount)

— 可写层

— add Apache

— add emacs

— rootfs(Ubuntu) <————基础镜像

— bootfs

Docker Container

通过镜像启动

启动和执行阶段

写时复用(copy on write)

Docker Registry

公有和私有

从DockerHub上下载

常用命令

1
2
3
4
5
6
7
8
9
10
11
docker version
docker search imagename
docker pull imagename
docker run imagename echo 'hello world'
docker ps
docker run learn/tutorial apt-get install -y ping
docker commit containerid learn/ping 修改镜像
docker run learn/ping ping www.baidu.com
docker inspect containerid 查看容器信息
docker images
docker push learn/ping 保存到dockerhub中

Docker容器相关技术简介

Namespaces命令空间

系统资源的隔离(包括进程、网络、文件系统)

(1)PID(Process ID) 进程隔离

(2)NET(Network) 管理网络隔离

(3)IPC 管理跨进程通信的访问

(4)MNT(Mount) 管理挂载点

(5)UTS(Unix Timesharing System) 隔离内核和版本标识

Cgroups 控制组

用来分配资源

来源于Google

(1)资源限制

(2)优先级限制

(3)资源计量

(4)资源控制

Docker容器的能力

(1)文件系统的隔离:每个容器都有自己的root文件系统

(2)进程隔离:每个容器都运行在自己的进程环境中

(3)网络隔离:容器间的虚拟网络接口和IP地址都是分开的

(4)资源隔离和分组:使用cgroup将cpu和内存之类的资源独立分配给每个Docker容器

Docker在Ubuntu中的安装

检查内核版本

1
uname -a

检查Device Mapper

1
ls -l /sys/class/misc/device-mapper

(1)ubuntu维护的docker版本安装

1
2
sudo apt-get install -y docker.io
source /etc/bash_completion.d/docker.io

(2)安装Docker维护的版本

1
2
sudo apt-get install -y curl
curl -sSL https://get.docker.com/ubuntu/ | sudo sh

使用非root用户

1
2
3
sudo groupadd docker
sudo gpasswd -a ${USER} docker
sudo service docker restart

Docker的客户端和守护进程

Remote API

Restful风格API

STDIN、STDOUT、STDERROR

Docker官方的Remote API Reference:

https://docs.docker.com/reference/api/docker_remote_api/

连接方式(Socket连接)

1
2
3
unix:///var/run/docker.sock(默认的连接方式)
tcp://host:port
fd://socketfd
1
ps -ef | grep docker

Remote API example:

1
nc -U /var/run/docker/docker.sock

Docker的远程访问

修改docker配置(vim /etc/default/docker)

1
sudo service docker restart

客户端的远程访问

1
2
curl http://10.211.55.5:2375/info
docker -H tcp://10.211.55.5:2375 info

Docker_HOST环境变量

Docker守护进程的配置和操作

1
2
3
4
ps -ef | grep docker
sudo service docker stop
sudo service docker start
sudo service docker restart

以守护的形式运行docker

docker -d [OPTIONS]

运行相关:

-D,–debug=false

-e,–exec-driver=”native”

-g,–graph=”/var/lib/docker”

–icc=true

-l,–log-level=”info”

–label=[]

-p,–pidfile=”/var/run/docker.pid”

Docker服务器连接相关:

-G,–group=”docker”

-H,–host=[]

–tls=false

–tlscacert=”/home/sven/.docker/ca.pem”

–tlscert=”/home/sven/.docker/cert.pem”

–tlskey=”/home/sven/.docker/key.pem”

–tlsverify=false

RemoteAPI相关:

–api-enable-cors=false

存储相关:

-s,–storage-driver=””

–selinux-enabled=false

–storage-opt=[]

Registry相关:

–insecure-registry=[]

–registry-mirror=[]

网络设置相关:

-b,–bridge=””

–bip=””

–fixed-cidr=””

–fixed-cidr-v6=””

–dns=[]

–dns-search=[]

–ip=0.0.0.0

–ip-forward=true

–ip-masq=true

–iptables=true

–ipv6=false

–mtu=0

Docker Command Line Reference:

https://docs.docker.com/reference/commandline/cli

启动配置文件

/etc/default/docker

DOCKER_OPTS =

容器的基本操作

启动容器:

1
docker run image [command] [arg]

启动交互式容器:

1
docker run -i -t image /bin/bash

-i –interactive=true|false 默认是false

-t –tty=true|false 默认是false

查看容器

-a 列出所有的容器 -l列出最新创建的容器

1
docker ps [-a] [-l] 

查看运行的容器

1
docker ps  

查看所有的容器

1
docker ps -a 

查看最近运行的容器

1
2
docker ps -l 
docker insepct containerId or containerName

Docker自定义容器名

1
docker run --name=test -i -t ubuntu /bin/bash

重新启动已经停止的容器:

1
docker start [-i] 容器名

删除已经停止的容器

1
docker rm containerId

Docker守护式容器

1
docker run -i -t image /bin/bash

Ctrl+P Ctrl+Q

重新进入容器

1
docker attach containerId

启动守护式容器

1
docker run --name dc1 -d ubuntu /bin/sh "while true;do echo hello world; sleep 1;done"

容器日志:

docker logs [-f] [-t] [–tail] 容器名

-f –follows=true|false 默认为false

-t –timestamps=true|false 默认为false

–tail=”all”

查看容器内的进程:

1
docker top containerId or containerName

在运行的容器内启动新进程

1
2
docker exec [-d] [-i] [-t] 容器名  [command] [arg...] 785d8f10f6ad
docker exec -i -t test01 /bin/bash

停止守护式容器

发送信号,等待容器停止

1
docker stop 容器名

直接停止容器

1
docker kill 容器名

在容器中部署静态网站

设置容器的端口映射

run [-P] [-p]

-P,–publish-all=true|false 默认为false 暴露所有的端口

docker run -P -i -t ubuntu /bin/bash

-p,–publish=[]

containerPort

​ docker run -p 80 -i -t ubunbu /bin/bash

hostPort:containerPort

​ docker run -p 8080:80 -i -t ubuntu /bin/bash

ip:containerPort

​ docker run -p 0.0.0.0:80 -i -t ubuntu /bin/bash

ip:hostPort:containerPort

​ docker run -p 0.0.0.0:8080:80 -i -t ubuntu /bin/bash

Nginx部署流程

1.创建映射80端口的交互式容器

1
docker run -p 80 --name web -i -t ubuntu /bin/bash

2.安装Nginx

1
apt-get install -y nginx

3.安装文本编辑器vim

1
apt-get install -y vim 

4.创建静态页面

1
2
3
4
5
mkdir -p /var/www/html

cd /var/www/html

vim index.html

5.修改nginx配置文件

1
2
3
4
5
6
7
whereis nginx

ls /etc/nginx/sites-enabled

vim /etc/nginx/sites-enabled/default

root /var/www/html;

6.运行nginx

1
2
3
nginx 

ps -ef

7.验证网站访问

查看端口的映射情况

1
docker port web

80/tcp -> 0.0.0.0:49167

查看容器中进程的运行情况

1
docker top web

查看容器的ip地址

1
2
3
docker inspect web
docker exec web nginx
docker top web

查看和删除镜像

1
2
3
docker info
sudo ls -l /var/lib/docker/aufs
sudo ls -l /var/lib/docker/aufs/mnt

docker images:

-a,–all=false

-f,–filter=[]

–no-trunc=false 指定不使用截断的形式

-q,–quiet=false 只显示镜像的唯一id

1
2
docker inspect container/image
docker rmi image:

-f,–force=false Force removal of the image

–no-prune=false Do not delete untagged parents

删除所有的镜像

1
docker rmi $(docker images -q)

构建镜像

保存对容器的修改,再次使用

自定义镜像的能力

以软件的形式打包并分发服务及其运行环境

docker commit 通过容器构建

docker build 通过dockefile文件构建镜像

docker commit [OPTIONS] containner[repository[:TAG]]

-a,–author=”” Author

eg “xxx@xxx.com

-m,–message=”” commit message

-p,–pause=true Pause container during commit

eg:

(1)docker run -it -p 80 –name commit_test ubuntu /bin/bash

(2)apt-get nginx

(3)docker commit commit_test -a “test” -m “test” dormancypress/commit_test1

(4)docker images

(5)docker run -d –name nginx_web1 -p 80 dormancypress/commit_test1 nginx -g “daemon off;”

创建dockerfile

##First Dockerfile

FROM ubuntu:14.04

MAINTAINER dormancypress “xxx@xxx.com

RUN apt-get update

RUN apt-get install -y nginx

EXPOSE 80

mkdir -p dockerfile/df_test1

cd dockerfile/df_test1

vim Dockerfile

docker build [OPTIONS] PATH | URL | -

–force-rm=false

–no-cache=false

–pull=false

-q,–quiet=false

–rm=true

-t,–tag=””

docker build -t=’dormancypress/df_test1’ .

获取和推送镜像

查找镜像

Docker Hub:

https://registry.hub.docker.com

docker search [OPTIONS] TERM

–automated=false Only show automated builds

–no-trunc=false Don’t truncate output

-s,–stars=0 Only displays with at least X stars

拉取鏡像

docker pull

使用–registry-mirror选项加速下载

(1)修改:/etc/default/docker

(2)添加:DOCKER_OPTS = “–registry-mirror=http://MIRROR_ADDR

https://www.daocloud.io

vim /etc/default/docker

DOCKER_OPTS = “–registry-mirror=http://MIRROR_ADDR

sudo service docker restart

ps -ef | grep docker

docker push dormancypress/nginx

Docker指令

指令格式

(1)# Comment 注释

(2)INSTRUCTION argument 指令

基础镜像,必须是dockerfile中第一条指令

FROM

FROM :

制定镜像的作者信息, 包含镜像的所有者和联系信息

MAINTAINER

指定当前镜像中运行的命令(构建时运行)

RUN (shell指令)

/bin/sh -c command

RUN echo hello

RUN [“executable”,”param1”,”param2”] (exec模式)

RUN[“/bin/bash”,”-c”,”echo hello”]

指定运行该镜像的容器使用的端口

EXPOSE […]

CMD(运行时运行)(会被docker run中指定的启动命令覆盖)

CMD“executable”,”param1”,”param2”

CMD command param1 param2 (shell模式)

CMD[“param1”,”param2”] (作为ENTRYPOINT指令的默认参数)

不会被docker run中指定的启动命令覆盖(可以使用docker run –entrypoint覆盖)

ENTRYPOINT“executable”,”param1”,”param2”

ENTRYPOINT command param1 param2(shell模式)

CMD和ENTRYPOINT组合使用

docker run -p 80 -d –name ep_test2 dormancypress/df_test5 -g “daemon off;”

ADD包含类似tar的解压功能

ADD

ADD “…”

如果单纯复制文件,Docker推荐使用COPY

COPY

COPY [““…”“] (适用于文件路径中有空格的情况)

———————-dockerfile——————————–

##first dockerfile for test

FROM ubuntu:14.04

MAINTAINER dormancypress “xxxx@xxxx.com

RUN apt-get update

RUN apt-get install -y nginx

COPY index.html /usr/share/nginx/html/

EXPOSE 80

ENTRYPOINT [“/usr/sbin/nginx”,”-g”,”daemon off;”]

添加卷

VOLUME [“/data”]

从镜像创建一个新容器时,在容器内部设置工作目录。也可以在构建中,为后续的工作指定工作目录

需要注意:通常使用绝对路径,如果使用相对路径,通常路径会传递下去

WORKDIR /path/to/workdir

用来设置环境变量

ENV

ENV =

指定镜像会以什么样的用户运行

USER daemon

USER user USER uid

USER user:group USER uid:gid

USER user:gid USER uid:group

为镜像添加触发器

当一个镜像被其他镜像作为基础镜像时执行

会在构建过程中插入指令

ONBUILD [INSTRUCTION]

—————-dockerfile—————–

#first dockerfile for test

FROM ubuntu:14.04

MAINTAINER dormancypress “xxx@xxx.com

RUN apt-get update

RUN apt-get install -y nginx

ONBUILD COPY index.html /usr/share/nginx/html/

EXPOSE 80

ENTRYPOINT [“/usr/sbin/nginx”,”-g”,”daemon off;”]

Dockerfile的构建过程

(1)从基础镜像运行一个容器

(2)执行一条指令,对容器做出修改

(3)执行类似docker commit的操作,提交一个新的镜像层

(4)再基于刚提交的镜像运行一个新容器

(5)执行dockerfile中的下一条指令,直至所有指令执行完毕

构建缓存

不使用构建缓存 docker build –no-cache

——————–dockerfile—————-

FROM ubuntu:14.04

MAINTAINER dormancypress “xxx@xxx.com

ENV REFRESH_DATE 2015-04-01

RUN apt-get update

RUN apt-get install -y nginx

EXPOSE 80

查看镜像的构建过程

docker history image

Docker容器的网络基础

ifconfig 查看网络配置

sudo apt-get install bridge-utils 网桥管理工具

sudo brctl show

修改docker0地址:

sudo ifconfig docker0 192.168.200.1 netmask 255.255.255.0

添加虚拟网桥

sudo brctl addbr br0

sudo ifconfig br0 192.168.100.1 netmask 255.255.255.0

更改docker守护进程的启动配置

/etc/default/docker中添加DOCKER_OPS值

-b=br0

容器的互联

用于测试的Docker镜像Dockefile

FROM ubuntu:14.04

RUN apt-get install -y ping

RUN apt-get update

RUN apt-get install -y nginx

RUN apt-get install -y curl

EXPOSE 80

CMD /bin/bash

默认允许所有容器互联

–icc=true 默认

docker run -it –name cct1 dormancypress/cct

nginx

ctrl+p ctrl+q

docker run -it –name cct2 dormancypress/cct

ifconfig

使用代号,避免其他容器访问该容器时,由于容器重新启动产生的ip地址变化的问题

docker run –link=[CONTAINER_NAME]:[ALIAS] [IMAGE] [COMMAND]

拒绝容器间互联

vim /etc/default/docker

DOCKER_OPTS = “–icc=true”

sudo service docker restart

允许特定容器间的连接

–icc=false –iptables=true

–link

sudo /etc/default/docker

DOCKER_OPTS =”–iptables=true,–icc=false”

sudo iptables -L -n

清空iptables的设置

sudo iptables -F

Docker容器与外部网络的连接

ip_forward

–ip-forward=true 决定系统是否会转发流量

sysctl net.ipv4.conf.all.forwarding

iptables

是与Linux内核集成的包过滤防火墙系统,几乎所有的linux发行版本都会包含Iptables的功能

(1)表(table)

(2)链(chain)

(3)规则(rule)

ACCEPT REJECT DROP

filter表中包含的链:

INPUT

FORWARD

OUTPUT

sudo iptables -t filter -L -n

允许端口映射访问

docker run -it -p 80 –name cct5 dormancypress/cct

docker port cct5

限制ip访问容器

数据卷

数据卷是经过特殊设计的目录,可以绕过联合文件系统(ufs),为一个或多个容器提供访问

数据卷的特点

(1)数据卷在容器启动时初始化,如果容器使用的镜像在挂载点包含了数据,这些数据会拷贝到新初始化的数据卷中、

(2)数据卷可以在容器之间共享和重用

(3)可以对数据卷里的内容直接进行修改

(4)数据卷的变化不会影响镜像的更新

(5)卷会一直存在,即使挂载数据卷的容器已经被删除

sudo docker run -v ~/container_data:/data -it ubuntu /bin/bash

指定访问权限

sudo docker run -it -v ~/datavolume:/data:ro –name dvt1 ubuntu /bin/bash

使用Dockerfile构建包含数据卷的镜像:

VOLUME[“/data”]

# For data volume Test

FROM ubuntu:14.04

VOLUME [“/data/test”,”/data/test01”]

CMD /bin/bash

docker run -it –name dvt5 –volumes-from dvt4 ubuntu /bin/bash

数据卷的备份和还原

备份:

docker run –volumes-from [container name] -v $(pwd):/backup ubuntu

tar cvf /backup/backup.tar [container data volume]

docker restart dvt5

docker attach dvt5

启动容器进行备份

docker run –volumes-from dvt5 -v ~/backup:/backup –name dvt10 ubuntu tar cvf /backup/dvt5.tar /datavolume

典型容器集群管理工具

(1)容器调度

Docker Swarm k8s Apache Mesos CoreOS Fleet Openstack Magnum

(2)配置管理(同步集群状态)

Etcd Zookeeper Consul

(3)服务发现

Etcd Haproxy Consul

(4)日志/监控/报警

ELK stack cAdvisor Prometheus

云集规模容器管理系统

(1)容器调度

(2)服务发现

(3)网络配置

(4)安全配置

(5)负载均衡

(6)数据持久化

(7)容错/高可用

(8)日志管理/容器监控

Docker Machine

一条命令,多环境部署

支持列表

VirtualBox Vmware Microsoft Hyper-V openstack Microsoft Azure RackSpace

Google Cloud Platform Amazon Web Services DigitalOcean

下载Docker machine

(1)curl -L https://github.com/docker/machine/releases/download/v0.4.0/dockder-machine_linux-amd64 > /user/local/bin/docker-machine

(2)chmod +x /user/local/bin/docker-machine

(3)docker-machine -V

(4)docker-machine create -d virtualbox test

(5)docker-machine ls

Docker machine命令集

start/stop/restart/kill

active/config/env/inspect/ip/status/url -获取Docker machine信息

ssh 远程登陆Docker Machine

scp 本机与Docker Machine或Docker Machine之间传输文件

(1)docker-machine env test

通过本机的Docker客户端连接远端的Docker Machine

(1)eval “$(docker-machine env test)”

(2)docker run -d -t index.alauda.cn/library/ubuntu bash

(3)docker ps

(4)docker-machine ssh test

Docker Compose

定义和运行多个Docker容器的工具

一个文件-docker-compose.yml

一条命令-docker-compose up

curl -L https://xxxx

docker-compose.yml

image:ubuntu:latest

build:/path/to/build/dir

dockerfile:使用指定的Dockerfile

command:覆盖默认命令

容器配置:

links:

-db:database

external_links:

-project_redis_1

ports:

-“3000”

-“8000:80”

expose:

- “3000”

volumes:

- /var/lib/mysql:/var/lib/mysql

environment:

- MYSQL_USER = mysql

docker-compose.yml

web:

build: .

ports:

​ - “5000:5000”

volumes:

​ - .:/code

links:

​ - redis

redis:

image:redis

Docker Compoase命令集

管理镜像 -build/pull

管理服务 -up/start/stop/kill/rm/scale

服务状态 -ps/logs/port

一次性命令 -run

Docker Swarm

容器管理技术

Kubernetes

(1)开源Docker容器编排系统

(2)轻量级、简单

(3)公有云、私有云以及混合云中部署

(4)模块化(modular),可插拔化,可挂接,可组合

(5)自动恢复,自动重启,自动复制

kubectl get nodes

kubectl get events

Pods

创建,调度以及管理的最小单元

共存的一组容器的集合

容器共享PID,网络,IPC及UTS命令空间

容器共享存储卷

短暂存在(pending running succeed fail)

kubectl create -f pod.yaml

kubectl get pods

kutectl delete pods nginx

kubectl get pods redis -o yaml

Labels

用以标示对象(如Pod)的key/value对

组织并选择对象子集

Replication Controllers

确保在任一时刻运行指定数目的Pod

Services

抽象了一系列Pod并定义其访问规则

固定IP地址和DNS域名

通过环境变量和DNS发现服务

负载均衡

外部服务 ClusterIP,NodePort,LoadBalancer

Docker常用命令:

https://www.jianshu.com/p/5caa68150661

常用命令

docker run -p 0.0.0.0:6000:6000 –name “test” -it centos

docker exec -it 4d34fbf944a5 /bin/bash

安装portainer管理平台

1
2
3
4
5
6
7
8
9
10
11
# 搜索镜像
docker search portainer
# 拉去镜像
docker pull portainer/portainer
# 运行镜像
# (1)本机模式
docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock --restart=always --name prtainer portainer/portainer
# (2)远程模式
docker run -d -p 9000:9000 --restart=always --name prtainer portainer/portainer
# 访问Portainer容器
http://ip:9000

CentOS8配置mysql

安装MySQL8.0

使用最新的包管理器安装MySQL

1
sudo dnf intall @mysql

开机启动

运行以下命令来启动MySQL服务并使用它在启动时自动启动

1
sudo systemctl enable --now mysqld

检查MySQL是否正在运行

1
sudo systemctl status mysqld

添加密码及安全设置

运行mysql_secure_installation脚本

1
sudo mysql_secure_installation

步骤如下:

1.要求你配置VALIDATE PASSWORD component(验证密码组件): 输入y ,回车进入该配置

  • 选择密码验证策略等级, 我这里选择0 (low),回车
  • 输入新密码两次
  • 确认是否继续使用提供的密码?输入y ,回车
  • 移除匿名用户? 输入y ,回车
  • 不允许root远程登陆? 我这里需要远程登陆,所以输入n ,回车

2.移除test数据库? 输入y ,回车

3.重新载入权限表? 输入y ,回车

配置远程登录

如果需要设置root账户远程登陆,上一步骤中,不允许root远程登陆?这一步需要设为n。
接下来本机登录MySQL,将root用户的host字段设为’%’,意为接受root所有IP地址的登录请求:
本机登录MySQL

1
mysql -uroot -p<上面步骤中设置的密码>

接着继续执行mysql语句,将将root用户的host字段设为’%’:

1
2
3
use mysql;
update user set host='%' where user='root';
flush privileges;

设置完成后输入exit退出mysql,回到终端shell界面,接着开启系统防火墙的3306端口:

1
2
sudo firewall-cmd --add-port=3306/tcp --permanent
sudo firewall-cmd --reload

关闭MySQL主机查询dns

MySQL会反向解析远程连接地址的dns记录,如果MySQL主机无法连接外网,则dns可能无法解析成功,导致第一次连接MySQL速度很慢,所以在配置中可以关闭该功能。

打开/etc/my.cnf文件,添加以下配置:

1
2
[mysqld]
skip-name-resolve

重启服务

1
sudo systemctl restart mysqld

Centos8编译安装FFMpeg

下载
1
wget http://www.ffmpeg.org/releases/ffmpeg-4.1.6.tar.gz
解压
1
tar -xvf ffmpeg-4.1.6.tar.gz
进入解压后的文件夹,编译安装
1
2
cd ffmpeg-4.1.6/`
`./configure && make && make install
查看ffmpeg版本号
1
ffmpeg -version
下载视频

不改变编码方式
ffmpeg -i 视频url -c copy video_name.mp4

Centos8编译安装Nginx

一,nginx的官网:

1
http://nginx.org/

二,下载与解压nginx

1,下载

1
[root@centos8 source]# wget http://nginx.org/download/nginx-1.18.0.tar.gz

2, 解压缩

1
[root@centos8 source]# tar -zxvf nginx-1.18.0.tar.gz 

三,编译与安装nginx

1,configure

#–prefix 指定安装路径

#–with-http_stub_status_module 允许查看nginx状态的模块

# –with-http_ssl_module 支持https的模块

1
[root@centos8 nginx-1.18.0]# ./configure --prefix=/usr/local/soft/nginx-1.18.0 --with-http_stub_status_module --with-http_ssl_module

2,编译并安装

1
[root@centos8 nginx-1.18.0]# make && make install

四, configure报错的解决

说明:如果相应的软件包已安装不会报错,写在这里供参考

1,问题1,configure提示:

1
2
3
4
./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.

解决:

1
[root@os3 nginx-1.18.0]# yum install pcre-devel

2,问题2,configure提示:

1
2
3
4
./configure: error: SSL modules require the OpenSSL library.
You can either do not enable the modules, or install the OpenSSL library
into the system, or build the OpenSSL library statically from the source
with nginx by using --with-openssl=<path> option.

解决:

1
[root@os3 nginx-1.18.0]# yum install openssl openssl-devel 

五,测试编译安装的效果:查看nginx的版本

1
2
[root@centos8 nginx-1.18.0]# /usr/local/soft/nginx-1.18.0/sbin/nginx -v
nginx version: nginx/1.18.0

六,如何查看nginx的配置编译参数?

复制代码

1
2
3
4
5
6
[root@centos8 nginx-1.18.0]# /usr/local/soft/nginx-1.18.0/sbin/nginx -V
nginx version: nginx/1.18.0
built by gcc 8.3.1 20190507 (Red Hat 8.3.1-4) (GCC)
built with OpenSSL 1.1.1c FIPS 28 May 2019
TLS SNI support enabled
configure arguments: --prefix=/usr/local/soft/nginx-1.18.0 --with-http_stub_status_module --with-http_ssl_module

复制代码

注意区分和上一条查看版本命令的区别: -v参数分别是小写和大写

七,使systemctl能管理运行nginx服务

1,运行的准备工作:配置日志目录

1
2
[root@centos8 conf]# mkdir /data/nginx
[root@centos8 conf]# mkdir /data/nginx/logs

2,运行的准备工作:创建nginx用户

1
[root@centos8 conf]# groupadd nginx

#-g:指定所属的group

#-s:指定shell,因为它不需要登录,所以用/sbin/nologin

#-M:不创建home目录,因为它不需要登录

1
[root@centos8 conf]# useradd -g nginx -s /sbin/nologin -M nginx 

3,简单配置nginx

1
[root@centos8 conf]# vi nginx.conf

内容:

指定运行nginx的用户和组是:nginx

1
user nginx nginx;

发生错误时要写入到错误日志(目录用上面创建好的)

1
error_log   /data/nginx/logs/error.log;

指定pid的路径

1
pid        logs/nginx.pid;

日志格式(取消注释即可)

1
2
3
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

指定访问日志的路径和格式(目录用上面创建好的)

1
access_log  /data/nginx/logs/access.log  main;

4,生成service文件:

1
[root@centos8 ~]# vi /usr/lib/systemd/system/nginx.service

内容:

复制代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[Unit]
Description=nginx-The High-performance HTTP Server
After=network.target

[Service]
Type=forking
PIDFile=/usr/local/soft/nginx-1.18.0/logs/nginx.pid
ExecStartPre=/usr/local/soft/nginx-1.18.0/sbin/nginx -t -c /usr/local/soft/nginx-1.18.0/conf/nginx.conf
ExecStart=/usr/local/soft/nginx-1.18.0/sbin/nginx -c /usr/local/soft/nginx-1.18.0/conf/nginx.conf
ExecReload=/usr/local/soft/nginx-1.18.0/sbin/nginx -s reload
ExecStop=/usr/local/soft/nginx-1.18.0/sbin/nginx -s stop
PrivateTmp=true

[Install]
WantedBy=multi-user.target

复制代码

5,启动服务

重新加载服务文件

1
[root@centos8 ~]# systemctl daemon-reload 

启动:

1
[root@centos8 ~]# systemctl start nginx

6,查看效果:

从浏览器访问安装机器的ip的80端口即可:

看例子截图:

img

7,查看日志目录

1
2
3
4
[root@centos8 conf]# ll /data/nginx/logs/
总用量 8
-rw-r--r-- 1 root root 1477 4月 22 18:49 access.log
-rw-r--r-- 1 root root 1195 4月 22 18:32 error.log

日志已成功写入

八,查看centos版本

1
2
[root@centos8 ~]# cat /etc/redhat-release 
CentOS Linux release 8.1.1911 (Core)

Ubuntu搭建匿名socks5代理

1.安装dante-server

1
apt-get install dante-server

2.创建日志文件夹

1
mkdir /var/log/sockd

3.修改配置文件

1
vi /etc/danted.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
logoutput: /var/log/sockd/sockd.log
internal: 服务器ip port = 1080
external: 服务器ip
method: username none
user.privileged: proxy
user.notprivileged: nobody
user.libwrap: nobody
client pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: connect disconnect
}
pass {
from: 0.0.0.0/0 to: 0.0.0.0/0 port gt 1023
command: bind
log: connect disconnect
}
pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
command: connect udpassociate
log: connect disconnect
}
block {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: connect error
}

4.启动

1
/etc/init.d/danted start

5.检测是否启动成功

1
netstat -anp | grep 1080

6.设置开启自启动

1
systemctl enable danted

7.浏览器插件下载

1
https://www.crxsoso.com/webstore/detail/padekgcemlokbadohgkifijomclgjgif

8.防火墙

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查看防火墙状态
sudo ufw status
# 开启防火墙
sudo ufw enable
# 关闭防火墙
sudo ufw disable
# 开放指定端口
sudo ufw allow 8888
# 关闭指定端口
sudo ufw delete allow 8888
# 不允许访问指定端口
sudo ufw deny 8888
# 重启防火墙
sudo ufw reload

9.参考链接

Ubuntu安装socks5代理服务器dante-server