|
@ -33,6 +33,16 @@ |
|
|
|
|
|
|
|
|
#### 请根据Assignment1的要求[创建云主机](Assignment1.md),并使用ssh远程登录(可以直接使用root用户进行后续操作) |
|
|
#### 请根据Assignment1的要求[创建云主机](Assignment1.md),并使用ssh远程登录(可以直接使用root用户进行后续操作) |
|
|
|
|
|
|
|
|
|
|
|
#### `Hint:` 本实验需要访问host的端口,请使用`-L `命令将`host`的`32768、32769、8000、8080`四个端口映射到本地,具体命令可以参考如下: |
|
|
|
|
|
|
|
|
|
|
|
```bash |
|
|
|
|
|
$ ssh root@113.31.104.108 -L 32769:0.0.0.0:32769 -L 32768:0.0.0.0:32768 -L 8080:0.0.0.0:8080 -L 8000:0.0.0.0:8000 |
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 一)安装Docker并测试 |
|
|
### 一)安装Docker并测试 |
|
|
|
|
|
|
|
|
#### 1. Docker是什么? |
|
|
#### 1. Docker是什么? |
|
@ -81,13 +91,28 @@ $ service docker status |
|
|
└─1954 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock |
|
|
└─1954 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock |
|
|
``` |
|
|
``` |
|
|
|
|
|
|
|
|
## **强烈推荐使用阿里云和三方源加速image下载,不然接下来的实验会进行的异常痛苦** |
|
|
|
|
|
|
|
|
## **为保证试验正常进行,请根据以下步骤修改docker镜像源为ucloud** |
|
|
|
|
|
|
|
|
|
|
|
#### 1.登录`ucloud docker hub` |
|
|
|
|
|
|
|
|
|
|
|
```bash |
|
|
|
|
|
$ docker login uhub-edu.service.ucloud.cn -u username/email |
|
|
|
|
|
|
|
|
#### 讲如下内容写入`/etc/docker/daemon.json`中(没有则创建) |
|
|
|
|
|
|
|
|
Password: |
|
|
|
|
|
WARNING! Your password will be stored unencrypted in /root/.docker/config.json. |
|
|
|
|
|
Configure a credential helper to remove this warning. See |
|
|
|
|
|
https://docs.docker.com/engine/reference/commandline/login/#credentials-store |
|
|
|
|
|
|
|
|
|
|
|
Login Succeeded |
|
|
``` |
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
#### 出现`login succeeded`表示登陆成功 |
|
|
|
|
|
|
|
|
|
|
|
#### 2.将如下内容写入`/etc/docker/daemon.json`中(没有则创建. ps: 需保证`docker`已经运行过,否则会出现`/etc/docker`文件夹不存在) |
|
|
|
|
|
|
|
|
|
|
|
```json |
|
|
{ |
|
|
{ |
|
|
"registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com"] |
|
|
|
|
|
|
|
|
"registry-mirrors": ["https://uhub-edu.service.ucloud.cn","https://uhub.service.ucloud.cn","https://registry.docker-cn.com","http://hub-mirror.c.163.com"] |
|
|
} |
|
|
} |
|
|
``` |
|
|
``` |
|
|
|
|
|
|
|
@ -214,7 +239,7 @@ ff0a5c3750b9 |
|
|
|
|
|
|
|
|
#### 现在使用`ps`命令检查一下是否删除成功吧! |
|
|
#### 现在使用`ps`命令检查一下是否删除成功吧! |
|
|
|
|
|
|
|
|
`**************作业2:请手动创建ubuntu:18.04 image的container并将cpu信息截图,并插入实验报告中***************`
|
|
|
|
|
|
|
|
|
`**************作业2:请手动创建centos image的container,将终端命令和`container cpu`信息截图,并插入实验报告中***************` |
|
|
|
|
|
|
|
|
> Hint: 可以使用**lscpu**命令查看linux的硬件信息,显示界面大致如下 |
|
|
> Hint: 可以使用**lscpu**命令查看linux的硬件信息,显示界面大致如下 |
|
|
|
|
|
|
|
@ -252,7 +277,7 @@ L3 cache: 6144K |
|
|
#### `docker hub`上有许多开发者们上传的`image`,我们可以自由下载并且使用,这里我们使用到的`image`是`prakhar1989/staticsite`,这是一个搭载了简单的静态单页面的Nginx镜像,让我们来试者运行它: |
|
|
#### `docker hub`上有许多开发者们上传的`image`,我们可以自由下载并且使用,这里我们使用到的`image`是`prakhar1989/staticsite`,这是一个搭载了简单的静态单页面的Nginx镜像,让我们来试者运行它: |
|
|
|
|
|
|
|
|
```bash |
|
|
```bash |
|
|
$ docker run --rm prakhar1989/static-site |
|
|
|
|
|
|
|
|
$ docker run --rm cloud_computing/static_site |
|
|
|
|
|
|
|
|
Nginx is running... |
|
|
Nginx is running... |
|
|
``` |
|
|
``` |
|
@ -273,10 +298,10 @@ Nginx is running... |
|
|
| -P | 将container所有正在监听的端口全部映射到本地的随机端口 | |
|
|
| -P | 将container所有正在监听的端口全部映射到本地的随机端口 | |
|
|
| -v local_path:contatiner_path | 将container的某个文件路径映射到本地 | |
|
|
| -v local_path:contatiner_path | 将container的某个文件路径映射到本地 | |
|
|
|
|
|
|
|
|
#### `static-site`默认监听的`80`和`443`端口,我们使用上述参数尝试将它映射到本机 |
|
|
|
|
|
|
|
|
#### `static-site`默认监听的`80`和`443`端口我们使用上述参数尝试将它映射到本机 |
|
|
|
|
|
|
|
|
```bash |
|
|
```bash |
|
|
$ docker run -d -P --name static-site prakhar1989/static-site |
|
|
|
|
|
|
|
|
$ docker run -d -P --name static_site cloud_computing/static_site |
|
|
|
|
|
|
|
|
e61d12292d69556eabe2a44c16cbd54486b2527e2ce4f95438e504afb7b02810 |
|
|
e61d12292d69556eabe2a44c16cbd54486b2527e2ce4f95438e504afb7b02810 |
|
|
``` |
|
|
``` |
|
@ -284,7 +309,7 @@ e61d12292d69556eabe2a44c16cbd54486b2527e2ce4f95438e504afb7b02810 |
|
|
#### 查看docker给我们映射的端口 |
|
|
#### 查看docker给我们映射的端口 |
|
|
|
|
|
|
|
|
``` |
|
|
``` |
|
|
$ docker port static-site |
|
|
|
|
|
|
|
|
$ docker port static_site |
|
|
|
|
|
|
|
|
80/tcp -> 0.0.0.0:32769 |
|
|
80/tcp -> 0.0.0.0:32769 |
|
|
443/tcp -> 0.0.0.0:32768 |
|
|
443/tcp -> 0.0.0.0:32768 |
|
@ -292,17 +317,43 @@ $ docker port static-site |
|
|
|
|
|
|
|
|
#### 可以看到`docker`将`container`的`80`和`443`分别映射到了本机的`32769`和`32768`两个端口上 |
|
|
#### 可以看到`docker`将`container`的`80`和`443`分别映射到了本机的`32769`和`32768`两个端口上 |
|
|
|
|
|
|
|
|
####.打开浏览器,访问`http://localhost:32769`,得到如下页面: |
|
|
|
|
|
|
|
|
#### 3.打开浏览器,访问`http://localhost:32769`,得到如下页面:(若`docker`随机映射端口不是`32768/32769`可以无需验证此步骤) |
|
|
|
|
|
|
|
|
![static-web](img/assignment2/static-web.png) |
|
|
![static-web](img/assignment2/static-web.png) |
|
|
|
|
|
|
|
|
`**************作业3:尝试使用-v、--rm和-p等参数,创建static-site容器,并以自己的学号命名,将container的/usr/share/nginx/html文件夹映射到当前目录的html文件夹,并修改index.html文件,加入自己的姓名和学号,并将上述步骤和本地目录接口截图插入实验报告中***************` |
|
|
|
|
|
|
|
|
`**************作业3:尝试使用-v、--rm和-p (请将container的80端口映射到host的8000端口)等参数,创建cloud_computing/static_site容器***************` |
|
|
|
|
|
|
|
|
|
|
|
#### 具体步骤如下: |
|
|
|
|
|
|
|
|
> Hint: |
|
|
|
|
|
> |
|
|
|
|
|
> 1.若提示continer正在运行中,可以使用`docker stop static-site && docker rm static-site`删除正在使用的容器并重新创建. |
|
|
|
|
|
> |
|
|
|
|
|
> 2.-v local_path请使用绝对路径 |
|
|
|
|
|
|
|
|
#### 1.若提示continer正在运行中,可以使用`docker stop static-site && docker rm static-site`删除正在使用的容器并重新创建. |
|
|
|
|
|
|
|
|
|
|
|
#### 2. 创建`/var/html`文件夹 |
|
|
|
|
|
|
|
|
|
|
|
```bash |
|
|
|
|
|
mkdir /var/html |
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
#### 3.下载[index.html文件](file/assignment2/index.html),使用`scp`命令传输到`host`的`/var/html`文件夹中,并修改一下部分为自己的信息 |
|
|
|
|
|
|
|
|
|
|
|
```html |
|
|
|
|
|
<div class="container"> |
|
|
|
|
|
<div class="row"> |
|
|
|
|
|
<div class="one-half column" style="margin-top: 25%"> |
|
|
|
|
|
<h4>Hello Docker!</h4> |
|
|
|
|
|
<p>This is being served from a <strong>docker</strong> container running Nginx.</p> |
|
|
|
|
|
<p>my id is xxxx,my name is xxx</p> |
|
|
|
|
|
</div> |
|
|
|
|
|
</div> |
|
|
|
|
|
</div> |
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
#### 4. 尝试使用`-p、-v、--rm、--name`参数创建`cloud_computing/static_site`的`container`,具体要求为:映射`container`的`80`端口到`host`的`8000`端口,映射`container`的`/usr/share/nginx/html/mypage`路径到`/var/html`文件夹,`container`名称以自己的学号命名 |
|
|
|
|
|
|
|
|
|
|
|
#### 6.访问本地浏览器:`http://localhost:8000/mypage` |
|
|
|
|
|
|
|
|
|
|
|
#### 7.将浏览器界面包括url截图,将创建container的终端界面截图,并插入到实验报告中 (浏览器界面类似下面图片所示) |
|
|
|
|
|
|
|
|
|
|
|
![浏览器界面](img/assignment2/static-web-2.png) |
|
|
|
|
|
|
|
|
### 四) 熟悉Dockerfile的简单使用 |
|
|
### 四) 熟悉Dockerfile的简单使用 |
|
|
|
|
|
|
|
@ -332,7 +383,7 @@ Archive: FoodTrucks.zip |
|
|
|
|
|
|
|
|
```dockerfile |
|
|
```dockerfile |
|
|
# 基于ubuntu:18.04容器 |
|
|
# 基于ubuntu:18.04容器 |
|
|
FROM ubuntu:18.04 |
|
|
|
|
|
|
|
|
FROM cloud_computing/ubuntu:18.04 |
|
|
|
|
|
|
|
|
# 安装相关依赖 |
|
|
# 安装相关依赖 |
|
|
RUN apt-get -yqq update |
|
|
RUN apt-get -yqq update |
|
@ -371,12 +422,13 @@ CMD [ "python3", "./app.py" ] |
|
|
|
|
|
|
|
|
#### 3.打包镜像 |
|
|
#### 3.打包镜像 |
|
|
|
|
|
|
|
|
#### 在当前目录(`Dockerfile`同级目录),执行如下命令,`docker`会自动将当前环境部署打包为一个`image` |
|
|
|
|
|
|
|
|
#### 在当前目录(`Dockerfile`同级目录),执行如下命令,`docker`会自动将当前环境部署打包为一个`image`(**请勿执行此步骤,学习命令如何使用即可**) |
|
|
|
|
|
|
|
|
```bash |
|
|
```bash |
|
|
$ docker build -t user-name/image-name |
|
|
|
|
|
|
|
|
$ docker build -t user-name/image-name . |
|
|
``` |
|
|
``` |
|
|
|
|
|
|
|
|
#### 这一步可能耗时较长,请耐心等待。。。 |
|
|
|
|
|
|
|
|
**************作业4:利用dockerfile将当前环境打包为 `英文姓名/food` 的`image`,并通过`docker`命令将创建该镜像的`container`,将`5000`端口映射到本地的`8080`端口。将打包命令和浏览器页面截图,并插入实验报告中*************** |
|
|
|
|
|
|
|
|
|
|
|
#### `build`过程可能耗时较长,请耐心等待。。。 |
|
|
|
|
|
|
|
|
**************作业4:利用dockerfile将当前环境打包为 `英文姓名/food` 的`image`,并通过`docker`命令将创建该镜像的`container`,将`5000`端口映射到本地的`8080`端口。将打包命令和浏览器页面截图,并插入实验报告中*************** |
|
|
|