目录

阿里云服务器搭建指南

服务器总体配置

弹性ECS,服务器位置买最近的,系统选Ubuntu18.04,数据库使用MySQL8.0,数据库展示界面使用Adminer

修改服务器ssh密码

  1. 转到控制台云服务器ECS
  2. 点击所购买的服务器
  3. 在基本信息处选择“更多”->重置实例密码
  4. 重置之后会提醒重启服务器,重启即可

什么是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

  • 更新apt库
1
sudo apt update
  • 允许apt通过HTTPS使用存储库
1
sudo apt install apt-transport-https ca-certificates curl software-properties-common
  • 添加阿里GPG秘钥
1
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
  • 添加阿里docker源
1
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
  • 更新apt源
1
sudo apt-get -y update
  • 安装
1
sudo apt-get -y install docker-ce
  • 查看Docker版本
1
docker --version 
  • 启动Docker服务
1
systemctl start docker
  • 测试
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安装其他服务

  • 查看本地镜像
1
docker images
  • 在ECS实例详情中,点击本实例安全组,配置安全组规则,在入方向添加需要开放的端口,如22,3306,8080,80,443,3389等。

Nginx

  • 拉取最新版的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

  • 拉取最新版的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 用户的密码。
  • 进入MySQL
1
docker exec -it mysql-test bash(mysql-test换成自己mysql容器名称)
  • 登录MySQL
1
mysql -u root -p 123456
  • 查看下MySQL中用户的信息
1
select host,user,plugin,authentication_string from mysql.user;

其中,host为 % 表示不限制ip,localhost表示本机使用,如果plugin不是mysql_native_password 则需要修改密码;

  • 修改MySQL密码
1
2
3
4
修改mysql root用户不限制ip且修改密码
ALTER user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
刷新权限
FLUSH PRIVILEGES; 

之后便可以用如navicat,datagrip等软件连接MySQL。

Adminer

  • 拉取最新版的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:容器名称。
  • 访问数据库

    浏览器打开网页http://<ECS公网IP地址>:9999。

    服务器填写公网IP,用户名和密码填写MySQL预设的用户名和密码。

安装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
  • 检查安装
1
docker-compose -v

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
pip3 install 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()