python项目部署成docker

把python项目部署成docker

1.安装docker

从https://download.docker.com/linux/ubuntu/dists/, 选择合适的Ubuntu版本, 索引至 pool/stable/, 选择 amd64、armhf、 arm64、ppc64el或者s390x, 下载想要的Docker CE version对应的 .deb 文件。
此处下载了docker-ce_17.03.3_ce-0_ubuntu-xenial_amd64.deb

在linux放置.deb文件的目录下执行:
$sudo dpkg -i docker-ce_17.03.3_ce-0_ubuntu-xenial_amd64.deb

测试能否运行docker测试镜像:
$sudo docker run hello-world

执行docker,验证是否安装成功:
$docker
在这里插入图片描述

查看docker版本:
$docker --version
$docker version
在这里插入图片描述
在这里插入图片描述

2.Python项目结构

在这里插入图片描述
其中,hello_demo与requirements.txt与Dockerfile平级。
hello_demo是项目代码。
requirements.txt是项目所需的依赖包。
Dockerfile是用于构建docker镜像的文件。

平时启动python项目,只需要运行hello_demo下的app.py即可:
在这里插入图片描述
现在希望将该工程部署到docker里面,使用容器启动。可以采用基于Dockerfile的构建方式。

3.编写Dockerfile,构建docker镜像和容器

可以有两种方式编写Dockerfile。
(1)第一种方式:Dockerfile中指定项目路径及启动方式
Dockerfile内容:
在这里插入图片描述

基于Dockerfile构建镜像,在linux下执行命令
$sudo docker build -t docker_hello_demo_img .
在这里插入图片描述
运行镜像,生成并启动容器
$sudo docker run --restart=always -it -p 20001:20001 docker_hello_demo_img
在这里插入图片描述

(2)第二种方式:Dockerfile中不指定,生成并启动容器时再指定项目路径及启动方式
Dockerfile内容:
在这里插入图片描述

基于Dockerfile构建镜像,在linux下执行命令
$sudo docker build -t docker_hello_demo_img2 .
在这里插入图片描述

运行镜像,生成并启动容器
$sudo docker run --restart=always -it
-p 20002:20001
-v $PWD/hello_demo:/code/hello_demo
-w /code/hello_demo
docker_hello_demo_img2
python app.py
在这里插入图片描述
命令说明:
-v $PWD/hello_demo:/code/hello_demo :将主机中当前目录下的hello_demo挂载到容器的/code/hello_demo
-w /code/hello_demo :指定容器的/code/hello_demo目录为工作目录
python app.py :使用容器的python命令来执行工作目录中的app.py文件

还可以将挂载到容器的项目文件设为只读:
$sudo docker run --restart=always -it
-p 20003:20001
-v $PWD/hello_demo:/code/hello_demo:ro
-w /code/hello_demo
docker_hello_demo_img3
python app.py
在这里插入图片描述
命令说明:
:ro:将容器内的/code/hello_demo目录设置为只读

4.docker挂载共享多个本地文件目录

若存在多个文件目录需要共享,则使用多个-v分别指定。
如:hello_demo为整个项目代码,/code/data为项目运行过程中可能产生的数据,将其分别挂载到本机的不同目录中,在linux下执行命令:
$sudo docker run --restart=always -it
-p 20004:20001
-v $PWD/hello_demo:/code/hello_demo:ro
-v /home/dell2/nlp/guazai_data:/code/data
-w /code/hello_demo
docker_hello_demo_img4
python app.py
在这里插入图片描述
命令说明:
-v $PWD/hello_demo:/code/hello_demo:ro :将主机中当前目录下的hello_demo挂载到容器的/code/hello_demo(只读模式)
-v /home/dell2/nlp/guazai_data:/code/data :将主机中的/home/dell2/nlp/guazai_data挂载到容器的/code/data

5.上传镜像到仓库,方便内网使用

135服务器上:
下载镜像registry
docker pull registry

运行registry容器,构建私有仓库
sudo docker run -itd -v /data/registry:/var/lib/registry -p 5600:5000 --restart=always --name registry registry:latest

修改镜像源下载地址
sudo vim /etc/docker/daemon.json
{
“registry-mirrors”: [“https://registry.docker-cn.com”],
“insecure-registries”: [“192.168.3.135:5600”]
}

重启docker服务,使配置生效
systemctl restart docker

为想要推送的镜像打标签
sudo docker tag docker_hello_demo_img:latest 192.168.3.135:5600/docker_hello_demo_img:latest

推送到镜像服务器
sudo docker push 192.168.3.135:5600/docker_hello_demo_img:latest

列出仓库中的所有镜像
curl http://192.168.3.135:5600/v2/_catalog

129服务器上:
修改镜像源下载地址
{
“registry-mirrors”: [“http://hub-mirror.c.163.com”],
“insecure-registries”: [ “192.168.3.135:5600”]
}

重启docker服务,使配置生效
systemctl restart docker

拉镜像
sudo docker pull 192.168.3.135:5600/docker_hello_demo_img:latest

6.常用命令

查看镜像
docker images

删除指定镜像
docker image rm image_name

删除none镜像(构建镜像过程中因为脚本错误导致很多镜像构建终止,产生很多none标签的版本)
docker rmi $(docker images | grep “none” | awk ‘{print $3}’)

打包镜像(测试环境)
docker save -o package.tar image_name

导入镜像(生产环境)
docker load -i package.tar

运行镜像,生成并启动容器
sudo docker run -it -p 20001:20001 image_name

查看容器:
docker ps -a

删除指定容器
docker kill docker_name
docker rm docker_name

一次性删除所有容器
docker rm $(docker ps -a -q)

进入容器
sudo docker exec -it docker_name /bin/bash

退出容器
Crtl+P+Q

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值