diff --git a/Assignment2.md b/Assignment2.md index eada2af..e0caa43 100644 --- a/Assignment2.md +++ b/Assignment2.md @@ -362,51 +362,62 @@ mkdir /var/html #### 1.从repo中下载[附件](/file/assignment2/demo.zip),通过`scp`命令上传到云服务器并解压 ```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 -#### 这是一个`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 -# 基于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端口暴露出来 EXPOSE 5000 # 容器启动的执行命令 -CMD [ "python3", "./app.py" ] - +CMD python app.py ``` #### 可以看出`Dockerfile`的书写非常简单易懂,涉及到几个命令 @@ -418,6 +429,7 @@ CMD [ "python3", "./app.py" ] | WORKDIR | 将容器中某个目录设置为工作目录(当前目录) | | EXPOSE | 将容器中某个端口暴露出来(如上述flask工作在5000端口,将其暴露出来) | | CMD | 容器启动自动执行的shell命令 | +| LABEL | 设置一些额外的信息 | #### 通过`dockerfile`的方式,我们就可以将各种各样的环境打包成镜像上传到`docker hub`上供他人使用 @@ -431,7 +443,7 @@ $ docker build -t user-name/image-name . #### 通过上面的命令,我们就在本地打包好了一个名叫`username/image-name`的镜像,我们可以通过之前学习的`docker run`命令去创建该镜像的`container` -**************作业4:利用dockerfile将当前环境打包为 `英文姓名/food` 的`image`,并通过`docker`命令将创建该镜像的`container`,将`5000`端口映射到本地的`8080`端口。将打包镜像的命令、创建容器的命令以及浏览器页面截图,并插入实验报告中*************** +**************作业4:利用dockerfile将当前环境打包为 `英文姓名/demo` 的`image`,并通过`docker`命令将创建该镜像的`container`,将`5000`端口映射到本地的`8080`端口。将打包镜像的命令、创建容器的命令以及浏览器页面截图,并插入实验报告中*************** #### `build`过程可能耗时较长,请耐心等待。。。