@[toc] 目录
本次任务概要
- 1、 编写dockerfile 然后创建镜像
- 2、运行容器测试
- 3、镜像打包及解包
- 4、docker 设置环境变量
任务流程具体操作说明
0、虚拟机环境及初始环境配置
初始方案
工作中需要将环境部署到麒麟操作系统上,需要在该操作系统部署相同的环境,以备后续程序可以迁移到新电脑上。
初始方案是,在新操作系统上配置一个和原电脑同名的用户名,相同的目录,进入相同的目录配置相同版本的python,及虚拟环境。
具体步骤如下
- 1、在可以上网的虚拟机中,安装好麒麟操作系统,联网安装好 pip、pip3、python3 等。
[https://www.cnblogs.com/pipci/p/16173352.html](https://www.cnblogs.com/pipci/p/16173352.html)
为了下载速度更快,换源
在pip 命令末尾加上 '-i 源地址'
[清华源](https://www.csdn.net/tags/Mtjagg0sOTc1MjgtYmxvZwO0O0OO0O0O.html)
- 2、新建用户 如:admin,切换到该用户登录操作系统
// 切换到用户 admin
su admin
//
- 3、在该操作系统下配置虚拟环境 并部署
// 安装虚拟环境工具 virtualenv
pip3 install virtualenv
// virtualenv 虚拟环境目录创建
virtualenv /home/admin/admin_env --python=python3
// 激活
source /home/admin/admin_jenv/scripts/activate
// 在该虚拟环境下安装相关库,如
pip3 install arrow -i 清华源地址
1、编写dockerfile 然后创建镜像
下面为dockerfile.core 的目录
from python:3.6
Add src/main/python /code
run pip install iso8601 -i https://pypi.douban.com/simple
run pip install pingpp -i https://pypi.douban.com/simple
run pip install flask -i https://pypi.douban.com/simple
run pip install pymongo -i https://pypi.douban.com/simple
run pip install mongoengine -i https://pypi.douban.com/simple
run pip install flask_restful -i https://pypi.douban.com/simple
run pip install passlib -i https://pypi.douban.com/simple
run pip install qiniu -i https://pypi.douban.com/simple
run pip install passlib -i https://pypi.douban.com/simple
run pip install pandas -i https://pypi.douban.com/simple
run pip install requests -i https://pypi.douban.com/simple
run pip install redis -i https://pypi.douban.com/simple
run pip install apscheduler -i https://pypi.douban.com/simple
run pip install websockets -i https://pypi.douban.com/simple
run pip install aiohttp -i https://pypi.douban.com/simple
run pip install jupyter -i https://pypi.douban.com/simple
run pip install aioredis -i https://pypi.douban.com/simple
EXPOSE 5000
workdir /code
CMD ["python", "jetcloud/jetcloudrest.py","core"]
上面程序中的 pip 可以依据安装的环境替换为 pip3
EXPOSE 为暴露的端口, 部署的demo程序后续可以通过命令行测试
//命令行使用docker创建镜像
docker build -t den -f Dockerfile.core .
在运行该命令的过程中遇到了如下问题:
1、网络连接不畅通,导致每一个安装包都Retry Retry 直至找不到对应包。
解决方法链接暂时找不到了,复制Ipv4 连接失败的错误码可找到解决办法,然后搜索相关错误码即可找到解决方法,主要是 修改一下ipv4的配置端口号 = 1 ,然后重启一下,再次执行docker build … 命令即可。
2、期间可能因为网络不畅通再次出现安装对应包失败的情况,重复执行几次 docker build ,直到最后执行完成时为 successfully 的报告即可。
3、安装好之后需要进入下一步容器测试,但可能因为demo程序中的一些引用的头文件依赖库太旧而找不到,需要将不再使用的依赖库头文件注释掉,然后重新执行 docker build 程序。
2、运行容器测试
docker 创建好镜像之后,运行容器会默认执行dockerfile.core 末尾的[CMD] 代码段之后的命令,如果该命令为demo程序的启动命令,则基于该镜像创建容器之后,会启动该demo程序。
这一部分可以参考的博客文章
//docker run 镜像名, 加入参数 -d 后台运行
docker run den
//后台运行启动容器
docker run -d den
//查看创建的容器列表,包括已经停止的
docker ps -a
//查看正在运行的容器列表
docker ps
//查看容器的日志 , 最后一个参数为容器的id
docker logs 4d3
//删除容器
docker stop 容器名/容器ID
//修改相关配置文件
vi 文件名, i 插入,x删除,r替换,:w!强制退出保存。Ctrl+C 退出文本编辑器。
//检查配置端口
[启动后暴露端口](https://www.csdn.net/tags/Ntzagg3sMTc4NS1ibG9n.html)
启动容器的时候通过参数指定
docker run -p 80:80
docker run -P
docker run -expose
wget http://localhost:端口号
想要测试一个接口
http://localhost:8785/testJob
//显示连接成功即可了。
3、镜像打包及解包
通过上面的demo程序的镜像程序已经测试通过了,说明各个数据包也安装好了,现在只需要配置一个没有demo程序,只有安装好的数据包的镜像,重新写一个dockerfile.core 文件,将与demo程序有关的部分删去,仅仅保留run pip3 install 的部分, 作为基础镜像,后面需要运行自己的业务程序,则以基础镜像为父镜像,写一个新的xxxfile.core文件,在该文件中引用父镜像的core文件,在头部添加"FROM dockerfile.core", 然后加入对应应用程序需要暴露的端口和,应用程序启动需要的命令,及应用程序需要的安装包即可。
镜像打包有多种方式,这次只需要用到比较简单的,直接将镜像打包即可。
使用 save 和 load
1,查看本机的容器
这两个命令是通过镜像来保存、加载镜像文件的。首先我们使用 docker images 命令查看本机所有的镜像。
2,保存镜像
(1)下面使用 docker save 命令根据 ID 将镜像保存成一个文件。
docker save 0fdf2b4c26d3 > hangge_server.tar
(2)我们还可以同时将多个 image 打包成一个文件,比如下面将镜像库中的 postgres 和 mongo 打包:
docker save -o images.tar postgres:9.6 mongo:3.4
3,载入镜像
使用 docker load 命令则可将这个镜像文件载入进来。
docker load < hangge_server.tar
4、Docker 设置环境变量
//ENV key value
//ENV key1=value1 key2=value
ENV CONFIG /usr/local.config
ENV PYTHON_VERSION 3.5.4
ENV VERSION=1.0 DEBUG=on \
NAME="Happy feet"
在dockerfile.core 中使用
$NODE_VERSION
$PYTHON_VERSION
在docker run 命令中 设置环境变量
- [ ] List item
//docker run --env <key>=<value> <IMAGE-ID>
docker run -e VAR1=value1 --env VAR2=value2 ubuntu
docker run --env VAR1=value1 --env VAR2=value2 ubuntu
使用文件作为环境变量:
docker run --env-file .env ubuntu
// 其中 .env 文件如下
//
VAR1=value1
VAR2=value2
USER
查看环境变量:
docker inspect <CONTAINER-NAME> OR <CONTAINER-ID>
参考资料
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)