docker从入门到实践

15 篇文章 1 订阅

  本文的主要目的是帮助零基础的读者快速上手docker,并掌握一些相关的常见命令。同时,本文也是作者对学习docker的一个笔记记录。本文主要是从实例出发,讲解一些docker的基本操作,若有不妥或错误之处,烦请指出,不胜感激!
  PS:关于docker的原理性的介绍不在本文范围内,只要记住一点:docker是一个独立的小型操作系统,可配置各种环境以满足你的代码需求。
  操作系统:Centos7.2
​​​​在这里插入图片描述

1.docker安装

  docker的安装比较简单,具体安装方式可参考https://blog.csdn.net/ywd1992/article/details/82897394

2.docker单文档实例

  网上介绍docker的操作都是从单个文档开始的,也即只有一个代码文件,本实例实现一个python的对外api接口。

2.1.新建目录

新建文件主要是为了将一个项目放到一起

mkdir docker_test

2.2.编写项目代码文件

新建app.py文件,主要功能是对外输出"hello world"

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
    return 'hello world.'

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=80)

2.3.编写python依赖包文件

新建requirements.txt文件

Flask

2.4.编写Dockerfile文件

FROM python:3.6.5

WORKDIR /app

ADD . /app

RUN python -m pip install --upgrade pip
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt

CMD ["python3", "app.py"]

下面分别简要介绍上三个文件(app.py、requirements.txt和Dockerfile)的作用:
app.py:python代码文件,用以对外提供api服务
requirements.txt:python代码文件所依赖的python包
Dockerfile:将项目编译成镜像(images)所需的文件

2.5.生成镜像

docker build -t hello .

PS:最后一个点(.)不要掉了,其中hello是编译后的镜像名,.表示当前目录(也即Dockerfile所在的目录)
Alt

2.6.运行镜像

运行刚才生成的镜像,创建容器,完成接口的运行与部署。

docker run -itd -p 4000:80 hello

Alt
-it 表示交互的方式运行,一般api接口都是这种方式,d表示后台运行,
-p 4000:80 表示将容器(container)中的80端口映射到本机的4000端口
hello 表示待运行的镜像
在这里插入图片描述
docker ps 表示列出已创建的容器

2.7.测试api服务

利用浏览器或者postman访问 ip:4000
浏览器测试结果
在这里插入图片描述
postman访问结果
在这里插入图片描述

2.8.导出/导入镜像

如果需要docker镜像打包放到另外的机器(已安装docker)上运行,则需要将镜像导出

docker save hello -o hello.tar

其中,hello为镜像名,hello.tar为保存的文件名
在这里插入图片描述
将hello.tar拷贝到目标机器上后,需要将其加载到docker镜像中

docker load -i hello.tar

在这里插入图片描述

3、docker多文档实例

多文档与单文档的区别就在于Dockerfile文件,下面就以一个时间识别的常规算法接口来说明多文档的Dockerfile文件。

3.1.新建目录

mkdir many_file

项目文件如下
在这里插入图片描述
其中,jieba分词通过源码安装

3.2.编写Dockerfiile文件

# 基于镜像基础
FROM python:3.6.5

# 设置代码文件夹工作目录 /app
WORKDIR /app/jieba

# 复制当前代码文件到容器中 /app
ADD ./jieba /app/jieba
ADD ./recognize_time /app/recognize_time

# 安装所需的包
RUN python3 setup.py install
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple Flask==1.0.2
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple Flask-Cors==3.0.7

# WORKDIR可以多次设置不同的值,主要是跳转到指定的目录下,但是此处不可以用RUN cd /app/recognize_time/demo_http,因为RUN只在当前一条语句起作用,后面的语句执行时的当前目录还是WORKDIR所指向的目录
WORKDIR /app/recognize_time/demo_http

# Run app.py when the container launches
CMD ["python3", "demo_http.py"]

3.3.生成镜像

将项目编译成docker镜像

docker build -t recognize_time:v1 

其中recognize_time是镜像名,v1指的是tag值,可以当作版本号。镜像名相同,但tag值不同,也是不同的镜像,相当于不同的版本。
在这里插入图片描述
编译完成后,生成镜像recognize_time
在这里插入图片描述

3.4.运行镜像

运行刚才生成的镜像,创建容器,完成接口的运行与部署。

docker run -itd -p 4001:4001 recognize_time:v1

在这里插入图片描述

3.5.测试api服务

利用postman测试结果
在这里插入图片描述

4、修改docker容器内的代码

有时候代码编译成docker镜像,并创建容器运行后发现测试结果有问题需要修改docker容器内的代码,此时需要将容器内的代码文件替换掉(容器内没有安装vim编辑器),然后重新编译成镜像,从而运行新镜像,即可达到预期效果。
下面通过修改api接口的输出来演示实际操作步骤:

4.1.文件修改

准备修改之后的文件demo_http2.py
在这里插入图片描述

4.2.拷贝文件到容器

将修改后的文件拷贝到运行中的容器

docker cp ./demo_http2.py 5aa17b21bb88:/app/recognize_time/demo_http

5aa17b21bb88 表示容器id,可通过docker ps 命令查看
在这里插入图片描述

4.3.替换文件

进入容器,替换文件

docker exec -it 5aa17b21bb88 /bin/bash

PS:也可以直接在步骤2中将源文件覆盖(文件名一样就行)。
在这里插入图片描述
可以看到容器内已经有demo_http2.py文件了,现在需要将demo_http2.py更名为demo_http.py
在这里插入图片描述
可通过Ctrl+c退出容器

4.4.重新生成镜像

提交修改后的信息,重新生成镜像

docker commit -m "update code in container" -a "tianyunzqs" 5aa17b21bb88 recognize_time:v2

-m 表示更新说明
-a 代表修改人信息
v2 表示第二版
在这里插入图片描述
可以看到,我们已成功生成了新的镜像

4.5.停止旧容器

在运行新镜像之前,需要将之前旧的接口服务停止,也即停止旧的容器。

docker stop 5aa17b21bb88

在这里插入图片描述

4.6.运行新镜像

运行新镜像,创建容器

docker run -itd -p 4001:4001 recognize_time:v2

此处一定要注意是v2,v1是修改之前的版本
在这里插入图片描述

4.7.测试api服务

利用postman测试结果可以看到,我们之前的修改已经起作用了
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值