centos7下docker的常用方案

centos7下docker的常用方案

本地环境

1.安装

业务背景:宿主机为centos7的主机,未配置软件源

考虑到后续对其他组件的使用,如Pyyaml等的安装,此处建议直接配置阿里源或者其他源,配置之后直接yum进行安装即可;
只有一种情况推荐直接下载某个特定版本的rpm包,如docker-manage-2.0-123.noarch.rpm,即对docker的版本有着严格要求,轻易不会修改,也不需要新版本的功能。

2.使能服务配置及服务启动

配置一些使能服务,定时监控docker服务的运行

systemctl enable crond.service

systemctl enable docker.service

启动docker服务
service docker start

3.制作镜像

docker是go编写的,此处以go语言类比如下,

go: 源代码——“编译”——编译后的可执行的程序——“程序运行”——在cache中的进程
docker:dockerfile文件——“docker build”——构件好的机器可运行的一个镜像,即docker image——“docker run”——在cache中运行的一个容器,即docker container

故,在一个环境内运行一个docker容器,需要准备一个docker镜像,这个镜像可以在本地制作(docker build),也可以从其他地方移植(docker pull);同样的也可以将制作好的镜像推送到镜像仓库或某个指定的仓库(docker push),来方便他人获取。

3.1本地制作

在本地制作镜像,大致有三个关键点:

3.1.1 配置基础镜像源

在本场景中,最终容器内运行的是python的代码,此处配置的基础镜像源决定了最终的python代码运行的版本,以alpine为例,如果采用alpine3.13,则其对应的python版本为3.8.15;同时alpine3.13也限制了很多组件的版本,以常用的git为例,alpine3.13源中内置了git 2.30.6,如果该版本满足用户的需求,则在制作镜像时无需另外安装git。当这种情况的极限就是,除了alpine3.13,不需要再安装其他任何的组件包,这会大大缩减制作docker image的时间,并且减小最终成品镜像的大小。

3.1.2 制作基础镜像

如果最终容器中运行的程序需要发送http请求,但是alpine的源中又没有相关的组件包能完成这一功能,这时候就要在基础镜像源上加装相对应的组件包,如requests包,其他如深度学习必备的NumPy和pandas等,都是需要加装的;加装上程序运行需要的组件包之后的镜像,称之为基础镜像。

3.1.3制作业务镜像

万事俱备只欠“代码”,在基础镜像之外,包上一层自己的业务代码,已经指定业务代码运行的进程顺序等操作,将“一坨”整个打包成镜像,即为业务镜像,该镜像为本地环境下的最终产物,内部包含三部分,代码+代码运行所需要的环境+代码依照怎样的顺序执行,所以将该镜像完整移植到任何需要的环境上,不需要再另外配置除docker服务外的其他任何东西,就可以在容器内运行该业务

搞清楚上面三个关键点之后,剩下的就很简单了,按部就班即可,以下三点与上面三个关键点的内容相对应:

①配置基础镜像源
以alpine3.13为例:

https://mirrors.zte.com.cn/alpine/v3.13/main

https://mirrors.zte.com.cn/alpine/v3.13/community

②制作基础镜像

配置和自己业务运行所需要的dockerfile:
FROM alpine:3.13

配置repositories

ADD repositories /etc/apk

RUN echo “nameserver 10.40.8.8” >> /etc/resolv.conf && apk update

安装python相关

RUN echo “nameserver 10.40.8.8” >> /etc/resolv.conf &&
apk add python3-dev &&
apk add py3-pip &&
apk add bash

RUN ln -s /usr/bin/python3 /usr/bin/python

RUN ln -sf /usr/bin/pip3 /usr/bin/pip

配置pip

RUN mkdir -p /root/.pip

COPY pip.conf /root/.pip/

此处仅以pandas和numpy的安装为例

RUN echo “nameserver 10.40.8.8” >> /etc/resolv.conf &&
pip install pandas1.0.4 &&
pip install numpy
1.22.3

配置完成后执行docker build命令即可,该命令会选取同目录下的dockerfile来构建镜像

③制作业务镜像
与②类似,只是在制作时,将业务代码copy进去

3.2获取docker仓库内已有的镜像

这个比较简单,与git pull类似,执行docker pull + 镜像所在的仓库路径即可

异地环境

异地环境只考虑对象的使用,一些细节很难文字说明,这里只提供一些实用场景的命令,具体问题具体沟通。

1.对镜像的操作

docker images:查看当前环境已导入的镜像

docker load:若镜像包只copy到当前环境,则需要将其导入

docker rmi :删除镜像

docker pull:从仓库获取镜像

2.对容器的操作

docker ps:查看当前运行的容器

docker run:将某个image运行起来

docker exec -it sh:进入该container

docker stop:停止该container运行

docker rm -f:删除该container

3.容器

要注意设置python的主路径,不然在执行不同app的相同文件时会乱掉:

export PYTHONPATH=‘/home’ 一般默认为/home路径,可以根据代码的实际情况进行选择

4.容器内外透传操作

4.1 挂载目录

这是一个比较简单、常用的内外透传文件的操作,最大的好处就是容器只要起来,就可以实现文件的内外共用,不需要任何额外的进程等操作。

一般选择在一个脚本中集中配置,docker run --restart=always 命令可以后缀多个参数,该命令用来保证在容器每次重启时都会实现的操作,为docker内部的操作命令,常用的如:

–name:容器名称

–network:配置容器使用的网络

-v:外部目录:内部目录

-p:外部端口:内部端口

4.2 消息队列

这个方式适用于一些内外都对接有第三方消息处理的渠道的场景,比如外部的消息市容rabbitMQ获取,经过处理后要吐到kafka里,容器内的进程选取对应的topic从kafka里取数据。

这种情况要具体问题具体分析,只需要在容器run起来的时候配置好容器网络,保证内外网络相通,剩余的和正常消息队列的使用没有什么大的区别

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值