你将学会什么?这是一个最小的闭环,可以动手别BB, 做一遍你会明白很多
从哪里下手? 先有一个docker 环境,至于docker 怎么搭建环境,请参考:docker 官方文档
1.自己把测试环境装一遍? 这个时间成本太高,所以docker 镜像能让你快速的复制一个可用的测试环境;
我们以python 为例,构建一个flask 的镜像环境,并推送到自己的镜像仓库;
如果没有镜像仓库怎么办? 到这里注册一个:https://www.docker.com/
实在不想注册,那本地玩玩也行,就不用管本文档里面介绍的登录和推送镜像仓库相关的步骤;
docker login #默认登录的是 https://hub.docker.com , 如果你有自己搭建的仓库,后面可以跟自己仓库的地址
我们如果需要定制化一个自己的python 镜像,就需要先找一个合适的基础镜像;
docker search python #查找所有python 的镜像
docker search python:3.7.4 #查找指定版本的镜像
既然找到了,那就把镜像拉到你自己的机器上
docker pull python:3.7.4 #第一次获取会比较慢,毕竟要下很多东西,截图里我是已经下过的,所以就会先从本地查找
docker run -d python:3.7.4 #这时会返回一个容器ID, 只需要前面一部分字符串就可以了, -d 是后台运行的命令参数
docker exec -it 6bee4548e3e7aa0b6388d6a bash #当你试图进入容器的时候,报错了
PS: 这是因为你docker run 的时候,容器会默认的执行它设置好的命令执行完,容器就结束了
要想自己手动的交互式的执行命令,那么你就需要使用 下面的命令:
docker run -d -it python:3.7.4 #多了 -it 参数,用来指定是手动执行命令
docker exec -it 4be1f2f8779439a6bda /bin/bash #docker exec -it 容器ID /bin/bash 进入容器手动执行命令,并指定 shell 的版本
python -V #查看python 版本
pip -V #查看pip版本
已经进去了,接下来要做什么呢? 当然是安装你的flask 相关环境了;
那么假如你有一个依赖文件需要copy 到容器里面? 怎么搞
step1: 先退出容器,exit 命令就可以
step2: docker cp requirements.txt 4be1f2f8779439a6bda:/tmp #docker cp 文件名 容器ID前几位:容器里面的目录
step3: 进入容器,我们看下文件
docker exec -it 4be1f2f8779439a6bda /bin/bash
cd /tmp
ls
cat requirements.txt
step4: 开始安装 pip install -r requirements.txt
呦呦~~呦呦~
安装完了,接下来怎么搞? 简单写个flask页面吧
app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == "__main__":
app.run("0.0.0.0", 8080, True)
把它copy 到容器里面
docker cp app.py 4be1f2f8779439a6bda:/tmp
容器里面运行一下, 证明你的容器环境是OK 的
python /tmp/app.py
OK 没有问题,先退出容器:exit
我们来搞下一步,保存对容器的修改
docker commit -m “构建基础镜像” -a “安装flask环境” 4be1f2f8779439a6bda #把修改内容提交到容器里面,备注修改内容
docker images #查看新生成的副本
docker tag 51d96631de36 assless/you2b:python3.7.4 #docker tag 新副本容器ID 仓库地址:tag_name
推送到镜像仓库
docker push assless/you2b:python3.7.4 #assless/you2b 是镜像地址, python3.7.4 是tag名
镜像也提交了,接下来做什么?
dockerfile
FROM assless/you2b:python3.7.4
MAINTAINER Arvin.liu@wayz.ai
EXPOSE 8080
WORKDIR /tmp
CMD python app.py
运行之前需要先build一下,把运行命令加进去
把dockerfile 和 需要用到的文件放到同一个干净的目录下
docker build -t flask_text . #不要忘记最后的那个"." 点,命令需要和 dockerfile 在同一目录下执行
构建好了,那么我们来运行一下
docker run -d -p 8089:8080 flask_test
那么最后见证奇迹的时刻到了,本地访问下 127.0.0.1:8089
你就能访问到容器里面的程序了~
本地搞了一些测试的东西,需要删除掉
docker container ls #查看正在运行的容器
docker container stop 容器ID #停止容器, 停止的容器,可以用: docker container start 容器ID 重新启动
docker container rm 容器ID #删除的就无法重新启动了
docker stop $(docker ps -a -q) #停止所有容器
docker rm $(docker ps -aq) #批量删除所有容器
docker rm $(docker ps -f "status=exited" -q) #删除状态是退出的容器
docker images #查看本地的镜像
docker rmi 容器ID #注意如果有容器在使用这个镜像,那么你是删不掉的,需要先停止和删除容器(如果这个容器不再使用的话)