一、CentOS准备
1、安装
2、yum源
CentOS7 已经安装好了yum工具,使用的官方镜像源
也可以安装阿里源
https://developer.aliyun.com/mirror/
查看yum的镜像源
cd /etc/yum.repos.d/ 进入这个目录 查看所有的repo文件
配置 清华大学镜像仓库(推荐)
https://mirrors.cnnic.cn/
https://mirrors.cnnic.cn/help/centos/
配置过程:
第一、先备份一下yum的默认Base镜像源
建议先备份 CentOS-Base.repo
sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
第二、编辑 /etc/yum.repos.d/CentOS-Base.repo 文件
在 mirrorlist=
开头行前面加 #
注释掉;并将 baseurl=
开头行取消注释(如果被注释的话),把该行内的域名(例如mirror.centos.org
)替换为 mirrors.tuna.tsinghua.edu.cn
。
[base]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
baseurl=http://mirror.tuna.tsinghua.edu.cn/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
第三步、退出文件保存
第四步、更新软件包缓存
sudo yum makecache
使用yum安装
yum install 包名
这样子安装 会有提示 问要不要安装
如果不想显示这个提示,直接安装 可以使用参数 -y
查看已经安装的软件包
yum list installed telnet
3、安装其他的源
我们用yum安装软件时,经常发现我们的yum源里面没有该软件,需要自己去wget,然后configure,make,make install,太折腾了。
其实,CentOS还有一个源叫做 EPEL (Extra Packages for Enterprise),里面有1万多个软件,比163的源还强,强烈建议安装。
查看目前所有的源
# 执行命令
yum repolist
# 查询结果
[root@bogon yum.repos.d]# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* extras: mirror.bit.edu.cn
* updates: mirror.bit.edu.cn
repo id repo name status
base/7/x86_64 CentOS-7 - Base 10,070
extras/7/x86_64 CentOS-7 - Extras 412
updates/7/x86_64 CentOS-7 - Updates 945
repolist: 11,427
当前一共有11427个软件
安装epel源
yum -y install epel-release
修改镜像源
修改/etc/yum.repos.d/epel.repo
,将mirrorlist
和metalink
开头的行注释掉。
接下来,取消注释这个文件里baseurl
开头的行,并将其中的http://download.fedoraproject.org/pub
替换成https://mirrors.tuna.tsinghua.edu.cn
。
安装IUS软件源
官方 网站 https://ius.io/setup
yum -y install \
https://repo.ius.io/ius-release-el7.rpm \
https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
二、常用操作
1、查看虚拟机的IP
CentOS7没有ifconfig命令,查看ip可以通过
ip addr命令
找到了 网卡ens33
默认 ens33网卡没有IP地址
接着来查看ens33网卡的配置:
/etc/sysconfig 存放的都是系统配置
vi /etc/sysconfig/network-scripts/ifcfg-ens33
然后 修改 ONBOOT=no 改为 yes
以后每次启动操作系统 会自动启动 网卡会有IP
接下来重启网卡服务
D
#如果在CentOS6 使用这个命令
service network restart
有的分支版本中,可能没有service命令操作服务,但是有一个共性的目录 /ect/init.d 这个目录中放着很多服务的快捷方式
此处重启网卡命令还可以使用如下:
/etc/init.d/network restart
在查看 ip add
找到IP地址
cd /etc/sysconfig/network-scripts/ 这个目录下看的了 网卡文件信息
测试:
linux 中 ping 外网 例如 ping www.baidu.com
给CentOS7安装 ifconfig命令
首先使用 yum工具搜索
yum search ifconfig
会搜索到
net-tools.x86_64 : Basic networking tools
在第一次安装的时候,有问题,在window的cmd下ping不通虚拟机的IP。后来重新安装了一次VM软件、重新创建虚拟机 才好使了。
这里需要说明一下:之前修改网卡文件,把ONBOOT=no不是必须要这样子做的,在开始安装CentOS7的时候,有一个设置界面,设置 分区,还可以设置网络network,在这里打开网络,出现分配的IP,就可以实现自动设置了。在设置 打开 网络的时候 可能没有IP出现 这个时候 要 去VM-编辑-虚拟网络设置 中 找到NAT连接网卡 一般是VM 8网卡,重新设置一下 IP就会激活出来。
2、ssh
ssh协议 : 实现远程连接、远程文件上传
协议使用端口号:默认是22
ssh配置可以被修改,/etc/ssh/ssh_config
服务器启动/停止/重启
service sshd start/stop/restart
ssh是服务必须开启的服务,不然就连接不上了。
CentOS7的 Min版本 默认页安装了ssh协议 并且启动了sshd服务
可以通过 ps -ef |grep ssh 查看
这个时候 就可以 使用 终端来连接Linux服务器了
这里使用Putty来连接。在Host Name里输入IP 在Port输入22
点击Open,这时候会报一共错误
这是因为 ssh是需要 公钥私钥 才能建立连接,这个是服务器把公钥发给我们,要不要缓存起来。
我们要点是 才行。 然后 输入 用户名 密码 等几秒钟连接 就可以
login as: root
root@192.168.87.128's password:
Last login: Sat Aug 1 06:44:17 2020
dd[root@bogon ~]#
[root@bogon ~]# dir
anaconda-ks.cfg
[root@bogon ~]#
3、使用xshell登录
在CentOS7_Min版本中 已经安装好了sshd服务,且在sshd_config文件中,已经配置了
PermitRootLogin yes
PasswordAuthentication yes
PermitEmptyPasswords no
我们这里只需要修改
PermitRootLogin no 不阻止root登录
4、安装vim
vim命令在最小安装时centos7系统没有自带,安装vim命令
yum install -y vim
5、安装tree树形
yum -y install tree
然后执行
tree
6、创建新用户
创建的新用户,可以ssh远程登录,默认是不能远程登录的,新创建的用户。
这里简单配置一下 让指定的用户可以ssh远程登录
cd /etc/ssh 目录
找到 sshd_config 配置文件
#PermitRootLogin yes
在下面编写运行哪些用户登录,
AllowUsers root chenpengfei yangtianjiao huiteng chenzhao lianxu yuboyang
三、安装python环境
1、安装python
# 安装Python3.6
yum -y install python36u
yum -y install python36u-devel
创建python3连接
ln -s /bin/python3.6 /bin/python3
2、安装pip3
yum install python36u-pip -y
创建pip3连接
ln -s /bin/pip3.6 /bin/pip3
给pip配置国内镜像:
首先:先升级pip版本
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple pip -U
然后进行配置:
pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
注意:
在安装成功python、pip以后 有时候会自动创建连接符,不需要在创建。
3、安装mysqlclient
安装之前 必须 先执行下面的安装,否则会报错
yum -y install mysql-devel gcc gcc-devel python-devel
四、安装数据库
1、安装mysql
去官网上查看 https://dev.mysql.com/downloads/repo/yum/ mysql的yum仓库
这里安装mysql 的源
yum install -y https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm
检查MySQL源是否安装成功
yum repolist enabled
部分结果:
mysql-connectors-community/x86_64 MySQL Connectors Community
mysql-tools-community/x86_64 MySQL Tools Community
mysql80-community/x86_64 MySQL 8.0 Community Server
源安装好以后,安装mysql服务
yum install mysql-community-server
Transaction test succeeded
Running transaction
Installing : mysql-community-common-8.0.21-1.el7.x86_64 1/7
Installing : mysql-community-libs-8.0.21-1.el7.x86_64 2/7
Installing : mysql-community-client-8.0.21-1.el7.x86_64 3/7
Installing : net-tools-2.0-0.25.20131004git.el7.x86_64 4/7
Installing : mysql-community-server-8.0.21-1.el7.x86_64 5/7
Installing : mysql-community-libs-compat-8.0.21-1.el7.x86_64 6/7
Erasing : 1:mariadb-libs-5.5.65-1.el7.x86_64 7/7
Verifying : mysql-community-server-8.0.21-1.el7.x86_64 1/7
Verifying : mysql-community-libs-8.0.21-1.el7.x86_64 2/7
Verifying : mysql-community-client-8.0.21-1.el7.x86_64 3/7
Verifying : mysql-community-libs-compat-8.0.21-1.el7.x86_64 4/7
Verifying : net-tools-2.0-0.25.20131004git.el7.x86_64 5/7
Verifying : mysql-community-common-8.0.21-1.el7.x86_64 6/7
Verifying : 1:mariadb-libs-5.5.65-1.el7.x86_64 7/7
Installed:
mysql-community-libs.x86_64 0:8.0.21-1.el7 mysql-community-libs-compat.x86_64 0:8.0.21-1.el7
mysql-community-server.x86_64 0:8.0.21-1.el7
Dependency Installed:
mysql-community-client.x86_64 0:8.0.21-1.el7 mysql-community-common.x86_64 0:8.0.21-1.el7
net-tools.x86_64 0:2.0-0.25.20131004git.el7
Replaced:
mariadb-libs.x86_64 1:5.5.65-1.el7
需要安装 Total download size: 553 M
MySQL服务操作
# 启动服务
systemctl start mysqld
# 查看服务
systemctl status mysqld
mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2020-08-01 16:06:52 EDT; 12s ago
修改 MySQL 中 root 本地登录密码
先在日志中查找 生成的密码
grep 'temporary password' /var/log/mysqld.log
[root@bogon ~]# grep 'temporary password' /var/log/mysqld.log
2020-08-01T20:06:49.105603Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: J<wGLsguq9?n
使用密码root登录
mysql -u root -p
不过进行其他操作的时候,会发现 提示你用alert 语句去修改密码,这个密码只是临时密码。
mysql> use mysql
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
修改root用户密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'JiYun_123456';
密码组成:
mysql> show global variables like '%validate_password%';
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password.check_user_name | ON |
| validate_password.dictionary_file | |
| validate_password.length | 8 |
| validate_password.mixed_case_count | 1 |
| validate_password.number_count | 1 |
| validate_password.policy | MEDIUM |
| validate_password.special_char_count | 1 |
+--------------------------------------+--------+
# 解释
validate_password_dictionary_file :验证密码的字典文件,与之相同的不可使用
validate_password_length :密码最少长度
validate_password_number_count :最少数字字符数
validate_password_mixed_case_count :最少大写和小写字符数(同时有大写和小写)
validate_password_special_char_count :最少特殊字符数
validate_password_policy :密码安全策略
LOW: 只限制长度
MEDIUM: 限制长度、数字、字母、特殊字符
STRONG: 限制长度、数字、字母、特殊字符、字典
#默认是中等,密码必须由 大写字母、小写字母、数字、特殊字符组成 且长度为8位
退出mysql
Ctrl+Z
修改密码策略
在/etc/my.cnf文件添加validate_password_policy配置,指定密码策略
选择0(LOW),1(MEDIUM),2(STRONG)其中一种,选择2需要提供密码字典文件
validate_password_policy=0
如果不需要密码策略,添加my.cnf文件中添加如下配置禁用即可:
validate_password = off
重新启动mysql服务使配置生效:
systemctl restart mysqld
允许远程登录
MySQL默认只允许root帐户在本地登录,想要远程连接MySQL,必须开启root用户允许远程连接,或者添加一个允许远程连接的帐户。
首先查看mysql的 user表
select * from user \G
*************************** 4. row ***************************
Host: localhost
User: root
Select_priv: Y
Insert_priv: Y
Update_priv: Y
Delete_priv: Y
Create_priv: Y
Drop_priv: Y
Reload_priv: Y
Shutdown_priv: Y
Process_priv: Y
File_priv: Y
Grant_priv: Y
References_priv: Y
Index_priv: Y
Alter_priv: Y
Show_db_priv: Y
Super_priv: Y
Create_tmp_table_priv: Y
Lock_tables_priv: Y
Execute_priv: Y
Repl_slave_priv: Y
Repl_client_priv: Y
Create_view_priv: Y
Show_view_priv: Y
Create_routine_priv: Y
Alter_routine_priv: Y
Create_user_priv: Y
Event_priv: Y
Trigger_priv: Y
Create_tablespace_priv: Y
ssl_type:
ssl_cipher: 0x
x509_issuer: 0x
x509_subject: 0x
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 0
plugin: caching_sha2_password
authentication_string: $A$005$QVf`
hi@? _:w.FDDatpHPPpgl.7j830gDg9X.HbKF05PzcdmXptHuD
password_expired: N
password_last_changed: 2020-08-03 20:01:07
password_lifetime: NULL
account_locked: N
Create_role_priv: Y
Drop_role_priv: Y
Password_reuse_history: NULL
Password_reuse_time: NULL
Password_require_current: NULL
User_attributes: NULL
4 rows in set (0.01 sec)
可以看到 root用户默认只能访问localhost 也就是只能本地登录,不能远程登录。
查询mysql具体版本
SELECT @@VERSION
mysql> select @@VERSION;
+-----------+
| @@VERSION |
+-----------+
| 8.0.21 |
+-----------+
此版的的mysql版本把将创建账户和赋予权限分开了
早期可以合二为一
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'JiYun_123456' WITH GRANT OPTION;
创建可以远程访问的root用户
create user 'root'@'%' identified by 'JiYun_123';
给远程root用户赋予权限
grant all privileges on *.* to 'root'@'%' with grant option;
操作后要执行刷新,远程用户才能有效
flush privileges;
查看数据库使用的字符集
show variables like '%character%%'
+--------------------------+--------------------------------+
| Variable_name | Value |
+--------------------------+--------------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+
MySQL忘记root用户密码,解决方案
在 /etc/my.cnf文件[mysqld]下面加如下命令
[mysqld]
skip-grant-tables #设置为跳过授权认证 不验证密码
mysql -u root
#update mysql.user set authentication_string=password('newPass') where user='root' and #Host = 'localhost';
flush privileges
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Jiyun_123';
flush privileges
2、安装redis
yum安装 ,不是最新的,可以去下载源 下载最新的
yum install redis
启动redis服务
systemctl start redis
[root@bogon etc]# ps -ef | grep redis
root 8460 8342 0 23:21 pts/0 00:00:00 grep --color=auto redis
[root@bogon etc]# systemctl start redis
[root@bogon etc]# ps -ef | grep redis
redis 8467 1 0 23:22 ? 00:00:00 /usr/bin/redis-server 127.0.0.1:6379
root 8471 8342 0 23:22 pts/0 00:00:00 grep --color=auto redis
查看版本:
[root@bogon etc]# redis-cli --version
redis-cli 3.2.12
设置为开机自动启动
systemctl enable redis.service
[root@bogon etc]# systemctl enable redis.service
Created symlink from /etc/systemd/system/multi-user.target.wants/redis.service to /usr/lib/systemd/system/redis.service.
redis默认只能访问localhost,开启远程访问
在redis配置文件 /etc/redis.conf 中配置:
bind 127.0.0.1 192.168.87.129
重启redis服务
systemctl restart redis
代进一步认证:
redis 3.2后新增protected-mode配置,默认是yes,即开启。解决方法分为两种:
1、设置 protected-mode 为 no
2、配置bind或者设置密码
在redis的配置文件/etc/redis.conf中:
1.bind 127.0.0.1改为 #bind 127.0.0.1
2.protected-mode yes 改为 protected-mode no
3、防火墙操作
在防火墙上给 6379端口 放行
# 开端口命令:
firewall-cmd --zone=public --add-port=6379/tcp --permanent
# 重启防火墙:
systemctl restart firewalld.service
命令含义:
--zone #作用域
--add-port=80/tcp #添加端口,格式为:端口/通讯协议
--permanent #永久生效,没有此参数重启后失效
其他防火墙命令:
# 设置开机自启
systemctl enable firewalld.service
#检查防火墙状态是否打开
firewall-cmd --state
# 查看开启的所有的端口的方法:
firewall-cmd --list-all
远程登录redis
在cmd命令行上输入命令:
C:\Users\fan>redis-cli -h 192.168.87.129 -p 6379
192.168.87.129:6379>
进入到了redis中
五、安装nginx
1、安装源
官方提供的 源的配置 http://nginx.org/en/linux_packages.html#RHEL-CentOS
步骤1: 安装先决条件
yum install yum-utils
步骤2:创建源文件
vi /etc/yum.repos.d/nginx.repo
步骤3:写入源文件内容
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
2、安装
步骤4:安装
yum install nginx
步骤5: 启动 nginx服务
systemctl start nginx
# 查看状态
systemctl status nginx
步骤6:临时关闭防火墙 或者把80端口 添加到防火墙
# 临时关闭防火墙
systemctl stop firewalld.service
3、测试
通过本地浏览器访问 虚拟机IP地址 会发现 Nginx
如果不关闭,默认80端口是不放开的,window主机浏览器 是无法访问到虚拟机上的nginx服务的。
4、其他问题
# 永久关闭防火墙命令
systemctl disable firewalld
# 关闭selinux
vim /etc/selinux/config
修改
SELINUX=enforcing
为
SELINUX=disabled
5、卸载
1:停止Nginx软件
service nginx stop
2:删除Nginx的自动启动
chkconfig nginx off
3:从源头删除Nginx
rm -rf /usr/sbin/nginx
rm -rf /etc/nginx
rm -rf /etc/init.d/nginx
4:再使用yum清理
yum remove nginx
6、配置
- 让nginx的 用户所有者为root
默认nginx的用户所有者为 nginx,那只能访问nginx对应的目录文件,不能访问非nginx用户所有文件,修改给其他用户,例如,修改为root用户,则可以访问到任何位置的目录与文件。
否则会报错:open() "/home/jiyun/index.html" failed (13: Permission denied)
- 配置静态目录-alias
nginx处理静态资源,我们的静态资源在 /home/jiyun目录下
则配置为
location /static/ {
alias /home/jiyun/;
}
jiyun目录下有index.html文件,访问地址为
# 访问地址
http://192.168.87.151/static/index.html
alias 就是别名的意思,意思是 /home/jiyun/ 目录的别名就是/static/, 则访问index.html文件就是
/static/index.html
-
配置静态目录-root
也可以使用root配置静态目录
location /static/ {
#alias /home/jiyun/;
root /home/jiyun/;
}
那jiyun目录下必须有staitc目录,index.html在static目录中
访问地址为: /home/jiyun/static/index.html
六、安装uwsgi
uWSGI是一个Web应用服务器,它实现了WSGI协议、uwsgi、http等协议
要注意 WSGI / uwsgi / uWSGI 这三个概念的区分。
- WSGI是一种通信协议。
- uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。
- 而uWSGI是实现了uwsgi和WSGI两种协议的Web应用服务器。
我们这里要安装的就是 uWSGI服务器
1、安装
注意:一定要先安装 python-devel 经过测试 否则 安装uwsgi会报错
# 安装编译工具
yum install -y gcc* pcre-devel openssl-devel
# 安装开发包
yum install python3-devel -y
# 安装 uwsgi 就是服务器
pip3 install uwsgi
2、配置
3、与nginx进行配置
七、Docker操作
1、准备工作
docker官方网站 介绍如何在 CentOS上安装
https://docs.docker.com/engine/install/centos/
步骤1:前提条件
前提条件:要安装Docker Engine,需要一个CentOS7的版本。
该centos-extras库必须启用。默认情况下,此存储库是启用的
步骤2:卸载旧版本
旧的Docker版本称为docker
或docker-engine
。如果已安装这些程序,请卸载它们以及相关的依赖项。Docker Engine软件包现在称为docker-ce
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2、开始安装
首先 添加docker源 到yum源中
# 安装yum 的工具包
yum install -y yum-uitls
# 添加docker的源到yum
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
安装Docker Engine
# 安装最新版本的docker引擎 docker客户端 docker容器
yum install docker-ce docker-ce-cli containerd.io
启动Docker服务
systemctl start docker
# 把docker设置为 开机自启动
systemctl enable docker
通过运行hello-world 映像来验证是否正确安装了Docker Engine
docker run hello-world
# 显示结果
Hello from Docker!
This message shows that your installation appears to be working correctly
这个命令会去 下载 hello-world 镜像 并在容器中运行。
升级Docker Engine
yum -y upgrade
卸载docker引擎
yum remove docker-ce docker-ce-cli containerd.io
镜像、容器、数据卷或自定义的配置文件不会自动删除,需要手动删除
rm -rf /var/lib/docker
3、配置阿里镜像加速器
之所以要配置镜像加速,是因为默认访问官方的镜像太慢,导致TimeOut
例如:
Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: TLS handshaketimeout
通过配置文件/etc/docker/daemon.json来使用加速器
vi daemon.json
添加内容:
{
"registry-mirrors": ["阿里提供的加速器地址"]
}
执行重启
systemctl daemon-reload
systemctl restart docker
八、安装其他常用软件
1、安装Git
# 安装
yum install git -y
# 查看版本
git --version
继续 跟着docker官方文档 学习docker
https://docs.docker.com/get-started/part2/
九、运用Docker部署-基础篇
1、给docker配置国内源
这里介绍使用阿里的镜像源
具体可以参考阿里文档。
2、docker运行mysql的数据库
因为在一台电脑上进行部署,因此需要一个桥接网络
docker network create hello_network
首先 下载mysql
docker pull mysql:5.6
注意用 5. 7 5.8 还需要进入到mysql容器里 进行密码修改
初始化root密码
docker run -d --network hello_network --name fmysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6
并且进入到docker容器里,可以操作容器
也可以单独进入
docker exec -it fmysql /bin/bash
root@bfb96fd28ed3:/# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.21 MySQL Community Server - GPL
........................
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
创建 应用需要的数据库
create database hello_pro
3、项目拷贝到CentOS服务器
这里使用scp 命令,scp是linux系统基于ssh登录进行安全的远程文件拷贝命令。
基本格式:
scp [可选参数] 拷贝的文件 目标目录
也可以使用可视化工具 FileZilla 通过ssh连接 来实现登录
windows平台上的django项目就上传到了CentOS7的服务器上
这个时候 CentOS7上没有安装python环境,因此不能运行。
如果要运行可以安装python环境,然后pip安装各种需要的包
4、把应用构建成镜像
1、首先需要保证应用的环境是一致的,这里使用python:3.6镜像开始构建
docker pull python:3.6
2、准备好应用需要安装哪些包,在window上通过运行
pip freeze > requirements.txt
名字不是必须叫requirements.txt 约定成俗 这么叫
或者也可以直接安装
5、编写Dockerfile文件
FROM python:3.6
WORKDIR /home/work
RUN pip install django==2.0.4 mysqlclient djangorestframework
COPY . .
EXPOSE 8000
CMD ["python","manage.py","runserver"]
运行
docker run -d --name hello --network hello_network -p 8080:8000 hello
运行如果不成功,则进入 容器 启动一下 python manage.py runserver
看看是不是成功了。
发现运行不成功,进入到了 应用容器里 执行 python manage.py runserver 报错:
(2002, "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)")
连接不到数据库
这是因为不在一个网络中,设置了 --network 就不会有这个错误了
6、容器连接
Plugin caching_sha2_password could not be loaded: /usr/lib/x86_64-linux-gnu/mariadb19/plugin/caching_sha2_password.so:
#修改加密规则
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
#更新用户的密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
#刷新权限
FLUSH PRIVILEGES;
#重置密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
十、运用Docker部署-中级篇
上面在运行的时候,需要允许的参数太多了,而且 容器有先后顺序,需要在启动mysql容器在启动应用容器
如果有三四个 甚至更多,启动过程太麻烦,不容易记住。
可以使用Docker提供的Compose来管理容器。
可以通过yum下载
yum install docker-compose
这个版本是1.18的,如果需要最新版本,可以去GitHub上下载
https://github.com/docker/compose/releases
附录--错误
1、负载均衡 连接拒绝-没有权限
在使用nginx与uwsgi 配置负载均衡的报错
*8 connect() to 127.0.0.1:8800 failed (13: Permission denied) while connecting to upstream
没有权限 连接 upstream负载均衡的 uwsgi,这个解决方案:
-
1、首先 把nginx的 user nobody 改成 user root
-
2、如果还不好的话,应该是安全问题
2.1 关闭SeLinux
查看SELinux状态: 1、/usr/sbin/sestatus -v ##如果SELinux status参数为enabled即为开启状态 SELinux status: enabled 2、getenforce ##也可以用这个命令检查 关闭SELinux: 1、临时关闭(不用重启机器): setenforce 0 ##设置SELinux 成为permissive模式 ##setenforce 1 设置SELinux 成为enforcing模式 2、修改配置文件需要重启机器: 修改/etc/selinux/config 文件 将SELINUX=enforcing改为SELINUX=disabled 重启机器即可
2.2执行下面的命令
setsebool -P httpd_can_network_connect 1
2、负载均衡-连接关闭
错误:*12 upstream prematurely closed connection while reading response header from upstream
upstream prematurely closed connection while reading response header from upstream,
翻译:从上游读取响应头时,上游过早关闭连接。