今天来介绍一下 Docker 的指令与操作。当我们在执行 Docker Image 时,会将所有的相关元件和应用程序都放在一起,然後在布署时随着应用程序一同放进执行程序中。而建立 imag 的方法就是透过 Dockerfile:
Container 内部的各种系统资源都是写在 Dockerfile 这个 Container 设定档中,以下示范如何使用 Dockerfile 建立一个 Image 。
首先建一个资料夹,然後再写一个简单的 hello.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return "<p>Hello, World!</p>"
if __name__ == "__main__":
app.run(debug=True, host='0.0.0.0', port=8888)
然後将环境 requirements.txt 给列出来,当然你也可以将详细的版本写上去,我这里没写就是了。
Click
Flask
itsdangerous
Jinja2
MarkupSafe
Werkzeug
再来就是建立 Dockerfile
# 设定执行环境,这里用官方的 Python 执行环境作为基本的 Docker 影像
FROM python:3.7.3-stretch
# 设定工作目录为 /app
WORKDIR /app
# 复制本机档案到 Image 里
COPY requirements.txt ./
COPY hello.py ./
# 安装 requirements.txt 中所列的必要套件
RUN pip install -r requirements.txt
# 让 88 连接埠可以从 Container 外部存取
EXPOSE 88
# 当 Container 启动时,执行 hello.py
CMD python hello.py
之後下指令建立 image
--no-cache 是不使用cache,避免 build 到未修改前的 Dockerfile。
-t 是 tag 的意思,预设是latest, . 则是当前目录
docker image build -t dockerfile_test . --no-cache
我们可以在image name 後方自行加上自己想要的 tag 来注明版本差异,例如:
docker image build -t dockerfile_test:v1 . --no-cache
显示 image 清单,察看 image 是否有被成功建立:
docker image ls
执行 image ,建立 container :
-d 是让 Container 进入背景执行,-p 是为了将主机的 Port 绑定到 Container 的 Port 上。
docker run -d -p 88:8888 dockerfile_test
如果成功的话,就能看到0.0.0.0:88 或 127.0.0.1:88 看到hello world了!
查看所有 Container 清单
-a 其实就是all的意思。
docker container ls -a
查看 Container log
docker container logs <Container id>
进入 Container 内操作
docker exec -it <Container-id> /bin/bash
删除 image:
docker rmi <image-id>
如果你想删除的 image 内的 Container 还在运作的话,Docker 会告入你无法删除,并提醒你该 image 内的运作 Container 的 id
先删掉 Container 就能顺利移除该 image 了。
删除 Container:
docker container stop <Container-id>
docker container rm <Container-id>
如果你在建立 image 时都没有加 tagname 的话,新建的 image 的 tag 都会是 latest ,而旧的 image tag 会由 latest 变成 none。
docker强制批量删除none的image(慎用)
docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker stop
docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker rm
docker images|grep none|awk '{print $3 }'|xargs docker rmi
今天就介绍到这里,明天来介绍另一种将环境分开的套件管理系统 ── Anaconda。
>>: 初学者跪着学JavaScript Day14 : 创建Array 四种方式
这次我是要使用node.js来学习爬虫。为什麽会用node.js呢?一开始我看许多人是用python...
说到百花齐放的网路影片平台中,若有批次下载离线观看在 Youtube, Facebook, vime...
本章开始研究实际案例 由於省略掉了一些细节,无法进行实际测试。 不过经由范例程序码的演示,可以清楚了...
要不要自己加赛到 42 天?还是乖乖完赛就好? 记得以前还是跑者的时候,练跑距离大概都维持在 8 公...
AWS Academy 登录画面 https://www.awsacademy.com/SiteLo...