一:学习使用docker,并完成以下任务

  1. 完成这个任务前现在自己机器上创建一个http服务,感受下这个服务的含义。
  1. 利用docker在单机上创建两个httpd服务,能够提供web服务。分别是8081端口和8082端口。在8081服务的根目录上放置readme.html文件。在8082服务的根目录上放置readme.html文件,这两个html文件要有区别。 里面内容可以随便写(比如8081这个写abc,8082这个写123)。
gauss@gauss-XPS-15-9570:~$ docker pull httpd
Using default tag: latest
latest: Pulling from library/httpd
Image docker.io/library/httpd:latest uses outdated schema1 manifest format. Please upgrade to a schema2 image for better future compatibility. More information at https://docs.docker.com/registry/spec/deprecated-schema-v1/
c499e6d256d6: Downloading
76155f771be0: Downloading
48b718b71719: Downloading
d65ae7a4c211: Downloading
8d17dee838ad: Downloading
latest: Pulling from library/httpd
c499e6d256d6: Pull complete
76155f771be0: Pull complete
48b718b71719: Pull complete
d65ae7a4c211: Pull complete
8d17dee838ad: Pull complete
Digest: sha256:13aa010584cb3d79d66adf52444494ae5db67faa28d65a1a25e6ddc57f7c0e2a
Status: Downloaded newer image for httpd:latest
docker.io/library/httpd:latest

gauss@gauss-XPS-15-9570:~$ docker run -it -d -p 8081:80 --name http1 -v /data1:/usr/local/apache2/htdocs/ httpd
549b8abefc55a3d78453a40764e162a8571edf6c93cff01f5127b1911bf1656d
gauss@gauss-XPS-15-9570:~$ docker run -it -d -p 8082:80 --name http2 -v /data2:/usr/local/apache2/htdocs/ httpd
4d4467094dc3835213a2ca89cf8d9f3cb1283523976d1a22f84721b7ad613044
gauss@gauss-XPS-15-9570:~$ docker ps
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS                  NAMES
4d4467094dc3        httpd               "httpd-foreground"   2 seconds ago       Up 2 seconds        0.0.0.0:8082->80/tcp   http2
549b8abefc55        httpd               "httpd-foreground"   3 minutes ago       Up 3 minutes        0.0.0.0:8081->80/tcp   http1
gauss@gauss-XPS-15-9570:~$ curl localhost:8081/readme.html
abc-1
gauss@gauss-XPS-15-9570:~$ curl localhost:8082/readme.html
123-2

并在http://127.0.0.1:8081/readme.htmlhttp://127.0.0.1:8081/readme.html能够看到之前创建和写入一些内容的html文件。

  1. iptables封掉8081端口。使得http://127.0.0.1:8081/readme.html 无法访问而http://127.0.0.1:8082/readme.html 可以访问。

    gauss@gauss-XPS-15-9570:~$ sudo iptables -A INPUT -p tcp --dport 8081 -j DROP
    gauss@gauss-XPS-15-9570:~$ curl localhost:8082/readme.html
    123-2
    gauss@gauss-XPS-15-9570:~$ curl localhost:8081/readme.html
    # 无返回,说明端口被禁止访问
    
  2. iptables 做流量均衡(nat),将所有80端口导入的流量50%分配给8081端口,50%的流量分配给8082端口。配置后,刷10次http://127.0.0.1:80/readme.html 次。如果4~5次结果是abc,另外的显示123。说明配置正确。
    ```shell

    -A OUTPUT 是针对本地访问的,如果是外部访问,应使用 -A PREROUTING

    gauss@gauss-XPS-15-9570:~$ sudo iptables -A OUTPUT -t nat -p tcp -d 127.0.0.1 —dport 80 -j REDIRECT -m statistic —mode random —probability 0.5 —to-ports 8081

    这里可以省掉概率,因为规格是按照顺序执行的

    gauss@gauss-XPS-15-9570:~$ sudo iptables -A OUTPUT -t nat -p tcp -d 127.0.0.1 —dport 80 -j REDIRECT —to-ports 8082

gauss@gauss-XPS-15-9570:~$ curl 127.0.0.1/readme.html abc-1 gauss@gauss-XPS-15-9570:~$ curl 127.0.0.1/readme.html abc-1 gauss@gauss-XPS-15-9570:~$ curl 127.0.0.1/readme.html abc-1 gauss@gauss-XPS-15-9570:~$ curl 127.0.0.1/readme.html abc-1 gauss@gauss-XPS-15-9570:~$ curl 127.0.0.1/readme.html abc-1 gauss@gauss-XPS-15-9570:~$ curl 127.0.0.1/readme.html abc-1 gauss@gauss-XPS-15-9570:~$ curl 127.0.0.1/readme.html 123-2 gauss@gauss-XPS-15-9570:~$ curl 127.0.0.1/readme.html 123-2 gauss@gauss-XPS-15-9570:~$ curl 127.0.0.1/readme.html abc-1 gauss@gauss-XPS-15-9570:~$ curl 127.0.0.1/readme.html 123-2 gauss@gauss-XPS-15-9570:~$ curl 127.0.0.1/readme.html 123-2 gauss@gauss-XPS-15-9570:~$ curl 127.0.0.1/readme.html 123-2 gauss@gauss-XPS-15-9570:~$ curl 127.0.0.1/readme.html 123-2 gauss@gauss-XPS-15-9570:~$ curl 127.0.0.1/readme.html abc-1


二:安装mysql数据库,并完成以下任务

1.     安装好后,创建自己的数据库test,然后创建一个表,字段是id(整形),name(255个字符长度的字符串型),ts(时间戳型,默认为当前时间戳),并手动写入三行记录,并删除其中的一条记录,查询是否正确删除,然后利用mysqldump
    命令将剩余两条记录的数据库表dump出来,dump的文件叫test.sql,
    然后vim test.sql
    看看这个文件长什么样子。写出相应的命令。

```shell
gauss@gauss-XPS-15-9570:~$ mysql -h 127.0.0.1 -P 3306 -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.19 MySQL Community Server - GPL

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.19    |
+-----------+
1 row in set (0.00 sec)

mysql> create database test;
Query OK, 1 row affected (0.01 sec)

mysql> use test;
Database changed
mysql> create table t(id int, name varchar(255), ts timestamp DEFAULT CURRENT_TIMESTAMP);
Query OK, 0 rows affected (0.09 sec)

mysql> desc t;
+-------+--------------+------+-----+-------------------+-------------------+
| Field | Type         | Null | Key | Default           | Extra             |
+-------+--------------+------+-----+-------------------+-------------------+
| id    | int          | YES  |     | NULL              |                   |
| name  | varchar(255) | YES  |     | NULL              |                   |
| ts    | timestamp    | YES  |     | CURRENT_TIMESTAMP | DEFAULT_GENERATED |
+-------+--------------+------+-----+-------------------+-------------------+
3 rows in set (0.01 sec)

mysql> insert into t (id, name) values (1,"aa"),(2,"bb"),(3,"cc");
Query OK, 3 rows affected (0.03 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select id, name, ts from t;
+------+------+---------------------+
| id   | name | ts                  |
+------+------+---------------------+
|    1 | aa   | 2020-04-10 09:56:44 |
|    2 | bb   | 2020-04-10 09:56:44 |
|    3 | cc   | 2020-04-10 09:56:44 |
+------+------+---------------------+
3 rows in set (0.00 sec)

mysql> delete from t where id=2;
Query OK, 1 row affected (0.02 sec)

mysql> select id, name, ts from t;
+------+------+---------------------+
| id   | name | ts                  |
+------+------+---------------------+
|    1 | aa   | 2020-04-10 09:56:44 |
|    3 | cc   | 2020-04-10 09:56:44 |
+------+------+---------------------+
2 rows in set (0.01 sec)

gauss@gauss-XPS-15-9570:~$ mysqldump -uroot -proot --databases test > test.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.
gauss@gauss-XPS-15-9570:~$ vim test.sql

image.png

  1. 将下面mysqldump出来的数据库表weibo.sql还原到数据库中,http://117.50.100.6:12345/linux/weibo.sql。并写出语句查询这个表的记录数。写出相应的过程。
    ```shell

    导入数据 mysql -uroot -proot test < weibo.sql 或者在mysql命令里 source weibo.sql

    mysql> show tables; +————————+ | Tables_in_test | +————————+ | fresh_data | | t | +————————+ 2 rows in set (0.00 sec)

mysql> select count() from fresh_data; +—————+ | count() | +—————+ | 500 | +—————+ 1 row in set (0.04 sec)


3. 这个数据库表中有一个字段叫user_type表明微博用户的类型,找到其中是黄V的用户,并用mysqldump语句将记录中的user_type是黄V的记录导出来。(带条件的mysqldump),导出后vim
    这个dump文件看看是否正确。<br />
```shell
mysql> select distinct user_type from fresh_data;
+--------------+
| user_type    |
+--------------+
| 普通用户     |
| 达人         |
| 黄V          |
| 微博女郎     |
| 金V          |
| 蓝V          |
+--------------+
6 rows in set (0.00 sec)

# 按照条件导出数据
gauss@gauss-XPS-15-9570:~/workspace/eightFriends$ mysqldump -uroot -proot test fresh_data --where="user_type='黄V'" > 黄V.sql
# vim 黄V.sql

image.png
三:NFS实现mount一块远程机器上的硬盘到本地,测试本地硬盘和远程硬盘的速度差异。远程硬盘可以用虚拟机上的硬盘(比如做两台虚拟机,将一台虚拟机的硬盘mount到另一台虚拟机上),也可以找助教申请一台云主机供大家用(这个作业选作,感兴趣的同学做)

# 在云主机上运行
jll@VM-0-5-ubuntu:~$ sudo apt install nfs-kernel-server
jll@VM-0-5-ubuntu:~$ sudo mkdir -p /var/nfs/sharedir
jll@VM-0-5-ubuntu:~$ sudo chown nobody:nogroup /var/nfs/sharedir
jll@VM-0-5-ubuntu:~$ sudo vim /etc/exports
jll@VM-0-5-ubuntu:~$ sudo cat /etc/exports 
# /etc/exports: the access control list for filesystems which may be exported
#               to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
#
/var/nfs/sharedir   *(rw,sync,no_subtree_check)
jll@VM-0-5-ubuntu:~$ sudo systemctl restart nfs-kernel-server
jll@VM-0-5-ubuntu:~$ showmount -e
Export list for VM-0-5-ubuntu:
/var/nfs/sharedir *
# 在本地机器上运行
gauss@gauss-XPS-15-9570:~$ sudo apt install nfs-common
gauss@gauss-XPS-15-9570:~$ sudo mkdir -p /nfs/sharedir
# 腾讯云主机IP,但是貌似云主机不允许被挂载为nfs,设置了防火墙和主机端口放开也不行,故放弃。
gauss@gauss-XPS-15-9570:~$ sudo mount 94.xxx.xxx.248:/var/nfs/sharedir /nfs/sharedir