苦于python环境的迁移,开始尝试使用docker来实现不同linux平台的环境搬迁。(•̀⌄•́)
—— By Jihan
Docker官方
参考教程1 参考教程2
Docker Hub
创建基本镜像
我这儿的基础镜像是:centos7+python3.7
官方已经不支持centos7以下的版本了。
但是由于我想用这个基本镜像做开发,因此还根据我自己添加了其他的一些工具。
基本步骤如下参考:
脚本安装(懒人):
1 | $ curl -fsSL https://get.docker.com -o get-docker.sh |
安装包安装(离线):
-
下载安装包,这儿有三类安装包,保险都下:https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
-
安装:
1
$ sudo yum install /path/to/package.rpm
-
启动:
1
$ sudo systemctl start docker
-
验证:
1
$ sudo docker run hello-world
社区版安装:
-
卸载旧版本docker
1
2
3
4
5
6
7
8$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine -
由于linux是社区版本(开源),需要安装docker仓库,以便更新.
1
2
3$ sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2 -
设置仓库:
1
2
3$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo -
官网还有一些配置操作,我这儿做开发,基本用不到。跳过,直接安装。(如果网速慢,自行配置yum源)
1
$ sudo yum install docker-ce docker-ce-cli containerd.io
-
查看需要安装的版本:
1
2
3$ yum list docker-ce --showduplicates | sort -r
docker-ce.x86_64 3:19.03.5-3.el7 docker-ce-stable
... -
安装docker:
1
2$ sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
$ sudo yum install docker-ce-19.03.5 docker-ce-cli-19.03.5 containerd.io -
启动docker:
1
$ sudo systemctl start docker
-
检查安装是否成功:
1
$ sudo docker run hello-world
创建镜像
- 最保险的方式,就是创建
系统+平台
这种镜像,但是缺点是镜像占用空间大。 - 直接创建
平台
镜像,占用空间小,但是有可能在不同版本的系统上运行不畅。
那么我们两种都试试。
老规矩,给docker hub加速,参考:
Ubuntu 16.04+、Debian 8+、CentOS 7
对应/etc/docker/daemon.json
文件中添加:
1 | { |
重启服务:
1 | $ sudo systemctl daemon-reload |
-
系统+镜像
- 上docker hub,注册(docker2jihan)
- 找个系统,我喜欢centos7,找个7.5纯净版的。官方镜像
1
2
3
4$ docker pull centos:centos7.5.1804
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos centos7.5.1804 cf49811e3cdb 9 months ago 200MB- 进入到相应该镜像:
1
2docker run -t -i centos:centos7.5.1804 /bin/bash
<-i 参数后面跟镜像名:标签>- 安装各种你所需要的东西,我这儿安装了常用命令,python等。宿主机到docker拷贝
docker cp .vimrc <容器ID>:/root/
,反正也一样。 - 制作镜像:
1
docker commit -m="init and conda" -a="jihan" <容器ID> <name>:<tag>
- 上传镜像或者导出镜像:
上传:
创建tag:docker tag IMAGEID new_repository newTAG
登录验证:docker login
上传docker hub:docker push <hub-user>/<repo-name>:<tag>
导出:
docker save <repo-name>:<tag> -o <name>.tar
导入:
docker import <name>.tar - <repo-name>:<tag
docker应用调研
看了一些关于docker优缺点的调研,发现我们产品并不适合docker,或者说只能解决环境不一致的问题,但docker的引入肯定会带来其他新问题。
比较了一下docker的优势,以及和我们产品的应用场景
- docker在环境隔离上很强势,一台设备可以跑几千个相互隔离的容器。但我们的产品是主机/虚拟机 独占。
- docker在环境部署上的统一,这的确可以解决我们产品在不同平台适配的问题以及开发测试发布一条龙环境一致。这也是调研docker的主要原因。
- docker动态扩容很强。但我们产品不需要,独占主机嘛,不行就加设备。毕竟toB厂商
- docker有更快速的启动时间,以及资源消耗。emmm,这个对我们产品优点鸡肋,独占主机或者跑在主机的虚拟机上,没有必要需要这个特性。
总结:docker除了一致性环境能给我们带来好处,似乎没有其他明显好处了。
再说一下引入docker带来的问题:
- 我们产品是网络设备,加了一层docker,端口映射问题老大难。并且产品在使用过程中会新增监听接口,每加一个都去reload一下docker的映射配置,有点蠢
- docker的数据持久化问题,简单查阅资料显示,docker的数据持久化有需要注意的地方,有坑。但是具体未深究。
- 引入docker会增加发布版本包的大小,并且出现问题后的排查也是需要注意的。
- 其他未考量到的问题。
总结:引入docker明显有3-4个大点或者坑需要注意,并且容器的学习成本比较高,除了开发,测试和运维也需要学习和维护,代价较大。
最后决定不引入docker,不适合。(虽然我说了也不算)