服务器总体配置
弹性ECS,服务器位置买最近的,系统选Ubuntu18.04,数据库使用MySQL8.0,数据库展示界面使用Adminer
修改服务器ssh密码
- 转到控制台云服务器ECS
- 点击所购买的服务器
- 在基本信息处选择“更多”->重置实例密码
- 重置之后会提醒重启服务器,重启即可
什么是Docker
Docker 包括三个基本概念:
- 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。
- 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
容器与镜像的关系类似于面向对象编程中的对象与类。
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
搭建Docker环境
使用ssh工具连接服务器
这里以putty为例:
host_name:填写服务器公网IP,端口默认22
PS:可以在saved sessions
处填一个名字如aliyun,再点击save键保存这次的连接配置,下次再连接 就不需要再输入了。
输入用户名和密码即可进入服务器。
安装Docker CE
1
| sudo apt install apt-transport-https ca-certificates curl software-properties-common
|
1
| curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
|
1
| sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
|
1
| sudo apt-get -y install docker-ce
|
1
| sudo docker run hello-world
|
配置阿里云镜像仓库
使用体验平台提供的阿里云子账号登录 容器镜像服务控制台
[镜像中心] > [镜像加速器],可以看到一个专属的镜像加速地址
配置Docker镜像加速器(在界面下方可以看到这段代码,复制即可,注意镜像地址替换为自己的专属地址)
1
2
3
4
5
6
7
8
| sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://******.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
|
使用Docker安装其他服务
- 在ECS实例详情中,点击本实例安全组,配置安全组规则,在入方向添加需要开放的端口,如22,3306,8080,80,443,3389等。
Nginx
1
| docker pull nginx:latest
|
1
2
3
4
5
| docker run --name nginx-test -p 8080:80 -d nginx
参数说明:
--name nginx-test:容器名称。
-p 8080:80: 端口进行映射,将本地8080端口映射到容器内部的80端口。
-d nginx: 设置容器在后台一直运行。
|
- 在浏览器地址栏输入http://<ECS公网IP地址>:8080访问Nginx服务。
MySQL
1
| docker pull mysql:latest
|
1
2
3
4
5
| docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
参数说明:
--name mysql-test:容器名称。
-p 3306:3306 :端口进行映射,将本地3306端口映射到容器内部的3306端口。
MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码。
|
1
| docker exec -it mysql-test bash(mysql-test换成自己mysql容器名称)
|
1
| mysql -u root -p 123456
|
1
| select host,user,plugin,authentication_string from mysql.user;
|
其中,host为 % 表示不限制ip,localhost表示本机使用,如果plugin不是mysql_native_password 则需要修改密码;
1
2
3
4
| 修改mysql root用户不限制ip且修改密码
ALTER user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
刷新权限
FLUSH PRIVILEGES;
|
之后便可以用如navicat,datagrip等软件连接MySQL。
Adminer
1
| docker pull adminer:latest
|
1
2
3
4
5
6
| docker run --link mysql:mysql --name adminer -p 9999:8080 -d --restart=always adminer
参数说明:
-d:设置容器在后台一直运行。
-p 9999:8080:端口进行映射,将本地9999端口映射到容器内部的8080端口。
--restart=always:设置容器开机自启动。
--name adminer:容器名称。
|
安装Docker Compose
1
2
3
4
| #运行以下命令以下载Docker Compose的当前稳定版本:
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#将可执行权限应用于二进制文件:
sudo chmod +x /usr/local/bin/docker-compose
|
Docker 常用命令
- 启动docker
sudo service docker start
- 停止docker
sudo service docker stop
- 重启docker
sudo service docker restart
- 列出Docker CLI命令
docker
docker container –help
- 显示Docker版本和信息
docker –version
docker version
docker info
- Execute Docker image
docker run hello-world(hello-world可替换为任一已创建容器的名字)
- 列出镜像列表
docker image ls
- 列出docker容器 (running, all, all in quiet mode)
docker container ls
docker container ls –all
docker container ls -aq
python访问云数据库
安装pymysql
数据库常用操作(参考菜鸟教程)
1
2
3
4
5
6
| cmd管理员模式打开
mysql -u root -p 111111 --登录
show databases; --展示所有数据库
create database database_name; --创建数据库
use database_name; --选择数据库
show tables; --展示所有数据表
|
–创建数据表
1
2
3
4
5
6
| CREATE TABLE IF NOT EXISTS `table_name`(
`id` INT UNSIGNED AUTO_INCREMENT, --自增
`title` VARCHAR(100) NOT NULL,
`author` VARCHAR(40) NOT NULL,
PRIMARY KEY ( `id` ) --主键
)ENGINE=InnoDB DEFAULT CHARSET=utf8; --ENGINE 设置存储引擎,CHARSET 设置编码
|
–删除数据表
1
| DROP TABLE table_name ;
|
–插入数据
1
2
3
| INSERT INTO table_name ( field1, field2,...fieldN )
VALUES
( value1, value2,...valueN );
|
–查询数据
1
2
3
4
5
6
7
| SELECT column_name,column_name
FROM table_name
[WHERE Clause] --WHERE 语句来包含任何条件
[LIMIT N][ OFFSET M] --LIMIT 属性来设定返回的记录数,OFFSET指定SELECT语句开始查询的数据偏移量,为0
返回数据表 table_name 的所有记录
select * from table_name;
|
–修改数据
1
2
| UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause] --WHERE 语句来包含任何条件
|
–删除数据
1
| DELETE FROM table_name [WHERE Clause] --WHERE 语句来包含任何条件
|
–对匹配数据操作(like子句)
1
2
3
4
5
6
| SELECT field1, field2,...fieldN
FROM table_name
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'
LIKE 通常与 % 一同使用,它类似于UNIX或正则表达式中的星号 *。比如 WHERE source LIKE "%school",没有使用百分号 %, LIKE 子句与等号 = 的效果是一样的。
可以使用 AND 或者 OR 指定一个或多个条件。
可以在 DELETE 或 UPDATE 命令中使用 WHERE...LIKE 子句来指定条件。
|
实例
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
| import pymysql
class Mysql:
def __init__(self):
# 建立数据库连接
self.db = pymysql.connect(host='localhost', # 此处必须是是云端填公网ip,本地填localhost
port=3306, # 端口
user='root', # mysql的登录账号admin
password='111111', # mysql的登录密码pwd
db='test', # mysql中要访问的数据表
charset='utf8') # 表的字符集
# 获取游标对象
self.cursor = self.db.cursor()
def end(self):
self.cursor.close()
self.db.close()
def insert(self, sql, ls):
self.cursor = self.db.cursor()
self.cursor.executemany(sql, ls) # 一次插入多条方式
# self.cursor.execute(sql, ls) #一次插入一条方式
self.db.commit()
def delete(self, sql):
self.cursor = self.db.cursor()
self.cursor.execute(sql)
self.db.commit()
def query(self, sql):
self.cursor = self.db.cursor()
self.cursor.execute(sql)
for row in self.cursor.fetchall():
# print("'id':%s\t title:%s\t author:%s" % row)
print(row)
print(f"一共查找到:{self.cursor.rowcount}")
def modify(self, sql, ls):
self.cursor = self.db.cursor()
self.cursor.execute(sql, ls)
self.db.commit()
if __name__ == '__main__':
mysql = Mysql()
sql = "insert into test values(%s,%s,%s)"
# 添加过主键自增(PRINARY KEY AUTO_INCREMENT)第一列在增加数据的时候,
# 可以写为0或者null,这样添加数据可以自增,从而可以添加全部数据,
# 而不用特意规定哪几列添加数据。
# ls1和ls2可以是列表或者元组
#插入
# ls = [0, 'hhh', '李三']
ls1 = [0, 'hhh', '小明']
ls2 = (0, 'hey', '王五')
ls = [ls1, ls2]
mysql.insert(sql, ls)
sql = "select * from test"
# sql = "select title,author from test;" #选择部分列
mysql.query(sql)
#修改
ls = ['wow', '李四', 1]
sql = "update test set title=%s,author=%s where id=%s"
mysql.modify(sql, ls)
sql = "select * from test"
mysql.query(sql)
#删除
sql = "delete from test where author='李四'"
mysql.delete(sql)
sql = "select * from test"
mysql.query(sql)
mysql.end()
|