|
@ -362,51 +362,62 @@ mkdir /var/html |
|
|
#### 1.从repo中下载[附件](/file/assignment2/demo.zip),通过`scp`命令上传到云服务器并解压 |
|
|
#### 1.从repo中下载[附件](/file/assignment2/demo.zip),通过`scp`命令上传到云服务器并解压 |
|
|
|
|
|
|
|
|
```bash |
|
|
```bash |
|
|
$ scp demo.zip root@113.31.112.166:~ |
|
|
|
|
|
|
|
|
$ scp demo.zip root@113.31.105.65:~ |
|
|
|
|
|
|
|
|
root@113.31.112.166's password: |
|
|
|
|
|
/etc/profile.d/lang.sh: line 19: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory |
|
|
|
|
|
demo.zip 0% 0 0.0KB/s --:-- ETAsFoodTrucks.zip 100% 1097KB 488.5KB/s 00:02 |
|
|
|
|
|
|
|
|
root@113.31.105.65's password: |
|
|
|
|
|
demo.zip 100% 1308 142.4KB/s 00:00 |
|
|
|
|
|
|
|
|
|
|
|
$ unzip demo.zip |
|
|
|
|
|
|
|
|
$ unzip FoodTrucks.zip |
|
|
|
|
|
|
|
|
|
|
|
Archive: FoodTrucks.zip |
|
|
|
|
|
creating: FoodTrucks/ |
|
|
|
|
|
inflating: __MACOSX/._FoodTrucks |
|
|
|
|
|
inflating: FoodTrucks/.DS_Store |
|
|
|
|
|
... |
|
|
|
|
|
|
|
|
Archive: demo.zip |
|
|
|
|
|
creating: demo/ |
|
|
|
|
|
inflating: __MACOSX/._demo |
|
|
|
|
|
inflating: demo/Dockerfile |
|
|
|
|
|
inflating: demo/app.py |
|
|
``` |
|
|
``` |
|
|
|
|
|
|
|
|
#### 2.查看Dockerfile |
|
|
#### 2.查看Dockerfile |
|
|
|
|
|
|
|
|
#### 这是一个`Flask App`,是一个用`python`写的网页应用,我们进入`FootTrucks`文件夹, 使用`cat Dockerfile`命令查看`Dockerfile的内容`,显示如下: |
|
|
|
|
|
|
|
|
#### 这是一个`Flask App`,是一个用`python`写的网页应用,我们进入`demo`文件夹,只有两个文件`app.py、Dockerfile` |
|
|
|
|
|
|
|
|
|
|
|
#### 首先我们使用`cat app.py`命令查看`app.py`的内容,显示如下: |
|
|
|
|
|
|
|
|
|
|
|
```python |
|
|
|
|
|
from flask import Flask |
|
|
|
|
|
|
|
|
|
|
|
app = Flask(__name__) |
|
|
|
|
|
|
|
|
|
|
|
@app.route('/') |
|
|
|
|
|
def hello(): |
|
|
|
|
|
return 'hello world!' |
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__': |
|
|
|
|
|
app.run(host='0.0.0.0') |
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
#### 看不懂没有关系,这就是一个很简单的flask应用,它定义了一个路由,当我们访问:`http://localhost:5000/`的时候,浏览器会给我们返回`hello world!` |
|
|
|
|
|
|
|
|
|
|
|
#### 接下来我们继续查看`Dockerfile`: |
|
|
|
|
|
|
|
|
```dockerfile |
|
|
```dockerfile |
|
|
# 基于ubuntu:18.04容器 |
|
|
|
|
|
FROM cloud_computing/ubuntu:18.04 |
|
|
|
|
|
|
|
|
# 拉取python镜像作为基本环境 |
|
|
|
|
|
FROM cloud_computing/python:latest |
|
|
|
|
|
|
|
|
# 安装相关依赖 |
|
|
|
|
|
RUN apt-get -yqq update |
|
|
|
|
|
RUN apt-get -yqq install python3-pip python3-dev curl gnupg |
|
|
|
|
|
RUN curl -sL https://deb.nodesource.com/setup_10.x | bash |
|
|
|
|
|
RUN apt-get install -yq nodejs |
|
|
|
|
|
|
|
|
# 设置额外信息 |
|
|
|
|
|
LABEL description="Dockerfile Demo for ECNU" |
|
|
|
|
|
|
|
|
# 将本地目录拷贝到container并且设置为工作目录 |
|
|
|
|
|
ADD flask-app /opt/flask-app |
|
|
|
|
|
WORKDIR /opt/flask-app |
|
|
|
|
|
|
|
|
# 在container中运行命令(这一步在container安装pip依赖) |
|
|
|
|
|
RUN pip install flask -i https://pypi.tuna.tsinghua.edu.cn/simple |
|
|
|
|
|
|
|
|
# 安装node和python的相关依赖 |
|
|
|
|
|
RUN npm install |
|
|
|
|
|
RUN npm run build |
|
|
|
|
|
RUN pip3 install -r requirements.txt |
|
|
|
|
|
|
|
|
# 将本地目录拷贝到container并且设置为工作目录 |
|
|
|
|
|
ADD ./app.py /opt |
|
|
|
|
|
WORKDIR /opt |
|
|
|
|
|
|
|
|
# 将5000端口暴露出来 |
|
|
# 将5000端口暴露出来 |
|
|
EXPOSE 5000 |
|
|
EXPOSE 5000 |
|
|
|
|
|
|
|
|
# 容器启动的执行命令 |
|
|
# 容器启动的执行命令 |
|
|
CMD [ "python3", "./app.py" ] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CMD python app.py |
|
|
``` |
|
|
``` |
|
|
|
|
|
|
|
|
#### 可以看出`Dockerfile`的书写非常简单易懂,涉及到几个命令 |
|
|
#### 可以看出`Dockerfile`的书写非常简单易懂,涉及到几个命令 |
|
@ -418,6 +429,7 @@ CMD [ "python3", "./app.py" ] |
|
|
| WORKDIR | 将容器中某个目录设置为工作目录(当前目录) | |
|
|
| WORKDIR | 将容器中某个目录设置为工作目录(当前目录) | |
|
|
| EXPOSE | 将容器中某个端口暴露出来(如上述flask工作在5000端口,将其暴露出来) | |
|
|
| EXPOSE | 将容器中某个端口暴露出来(如上述flask工作在5000端口,将其暴露出来) | |
|
|
| CMD | 容器启动自动执行的shell命令 | |
|
|
| CMD | 容器启动自动执行的shell命令 | |
|
|
|
|
|
| LABEL | 设置一些额外的信息 | |
|
|
|
|
|
|
|
|
#### 通过`dockerfile`的方式,我们就可以将各种各样的环境打包成镜像上传到`docker hub`上供他人使用 |
|
|
#### 通过`dockerfile`的方式,我们就可以将各种各样的环境打包成镜像上传到`docker hub`上供他人使用 |
|
|
|
|
|
|
|
@ -431,7 +443,7 @@ $ docker build -t user-name/image-name . |
|
|
|
|
|
|
|
|
#### 通过上面的命令,我们就在本地打包好了一个名叫`username/image-name`的镜像,我们可以通过之前学习的`docker run`命令去创建该镜像的`container` |
|
|
#### 通过上面的命令,我们就在本地打包好了一个名叫`username/image-name`的镜像,我们可以通过之前学习的`docker run`命令去创建该镜像的`container` |
|
|
|
|
|
|
|
|
**************作业4:利用dockerfile将当前环境打包为 `英文姓名/food` 的`image`,并通过`docker`命令将创建该镜像的`container`,将`5000`端口映射到本地的`8080`端口。将打包镜像的命令、创建容器的命令以及浏览器页面截图,并插入实验报告中*************** |
|
|
|
|
|
|
|
|
**************作业4:利用dockerfile将当前环境打包为 `英文姓名/demo` 的`image`,并通过`docker`命令将创建该镜像的`container`,将`5000`端口映射到本地的`8080`端口。将打包镜像的命令、创建容器的命令以及浏览器页面截图,并插入实验报告中*************** |
|
|
|
|
|
|
|
|
#### `build`过程可能耗时较长,请耐心等待。。。 |
|
|
#### `build`过程可能耗时较长,请耐心等待。。。 |
|
|
|
|
|
|