赞
踩
由于本文主要用于入门,更加复杂和深入的功能难免遗漏,读者可以根据需求再自行研究,同时也欢迎留言交流。
前言
作为数据挖掘的基础,环境搭建至关重要,但是传统的环境搭建会花费大量的时间,甚至还需要掌握诸如Linux等其他技能,十分花费时间。同时,我们训练好的模型往往因为服务器环境不同导致无法正确的进行预测。Docker的出现能够很好的解决上述两个问题,同时还可以对你日常工作其他的方面有更多的帮助。所以作为数据挖掘系列教程的第一篇,就是介绍Docker的入门。
Docker其实就是个贼迷你的虚拟机,内核是精简的不能再精简的linux,这样保证他安装和运行需要的资源贼低。同时,由于是linux内核,基本上常用的开源软件都可以十分友好的进行支持。
对于我们日常使用的场景来说,各位在学习或者应用各种工具时,在安装环节难免一番手忙脚乱,各种不同工具需要不同依赖,安来安去导致系统和各种工具游走在崩溃的边缘。如果需要重新安装系统或者把写好的代码提交服务器或者别人的环境运行时,那更是世界末日般的痛苦。
而Docker的出现,对于上述的问题来说,则是迎刃而解。
Docker基于贼精简的Linux内核,可以自行安装配置各种环境和服务(python、java、php等等等等),并打包成“镜像”文件,后续将“镜像”部署到其他任何的电脑和服务器的Docker中运行。
由于大家都是用同一个Docker“镜像”,所以系统内核和各种环境全部一致。这样的话,不管我是mac,你是windows,他是Linux,只要我们都有docker,就再也不会有依赖和环境问题。
由于Docker的“镜像”是运行在一个又一个“容器”中,可以做到与当前系统环境隔离,我们还可以保证现有系统的“纯净”。
除了上述两个特点,各种语言、工具如python、mysql等,还支持直接Docker安装,区别于传统安装流程的配置各种源、安装各种依赖再安装目标工具,Docker仅需从远程“仓库”拉取“镜像”到本地,再将本地“镜像”在“容器”中运行,仅仅两行代码就可以完美的运行目标工具。
Docker由三个元素组成,即:镜像(Image)、仓库(Repository)和容器(Container)。镜像就是我们封装好环境、服务的整体系统包;仓库分为远程仓库和本地仓库,用于存放我们的镜像了;容器则是运行镜像的地方。
对于镜像、仓库和容器,我们常用的操作如图:
对于docker的使用,常见的工作流如下:
自行准备环境&服务,打包成镜像文件后部署到服务器或拷贝给别人使用 工作流:拉取ubuntu/centos纯净系统镜像文件——>配置自己的环境&服务——>打包成镜像文件压缩包——>拷贝到其他环境运行
通过docker安装/使用软件 工作流:拉取mysql/python/nginx等软件镜像文件——>设置本地文件夹映射&端口映射,运行镜像文件——>备份容器外文件
本文旨在关注docker的原理及使用,争取一文帮助读者上手docker。所以,关于docker的安装本文不再重复。可以自行搜索你的系统+docker安装,如“mac docker安装”即可~
其中请注意安装好docker后务必配置国内源加速,不然获取各种镜像的速度堪比拨号时代。。。。。。。。
配置步骤1 登陆阿里云,搜索“容器镜像服务”
配置步骤2 Ubuntu系统按如下方法配置 Mac系统拷贝上述红框3中的代码按如下步骤添加
Talk is cheap,show me the code~
下面将会对照着上文的Docker常用操作图,分为仓库相关、容器相关和保存成镜像文件三部分梳理对应的代码
docker search ubuntu
可以看到会搜索到很多版本,通常我们会选择官方版本使用。
参数说明:
NAME: 镜像仓库源的名称 DESCRIPTION: 镜像的描述 OFFICIAL: 是否 docker 官方发布 stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。AUTOMATED: 自动构建。
其中冒号后面的18.04是版本号,如果不特殊标注会默认是latest,也就是最新版
docker pull ubuntu:18.04
通过下面的命令,可以看到本地的所有镜像
docker images
通过下面的命令,可以删除本地镜像,请注意标注版本号
docker rmi ubuntu:18.04
通过将本地镜像推送到阿里云,可以方便的将镜像进行分享和部署 步骤1.创建命名空间 步骤2.创建镜像仓库 步骤3.设置仓库位置 步骤4.查看创建好的仓库 步骤5.按照说明登陆并推送本地镜像至阿里云
docker tag 54a9f21b20af myubuntu:v5
docker ps -a
参数含义:
-a :显示所有的容器,包括未运行的。
-f :根据条件过滤显示的内容。
–format :指定返回值的模板文件。
-l :显示最近创建的容器。
-n :列出最近创建的n个容器。
–no-trunc :不截断输出。
-q :静默模式,只显示容器编号。
-s :显示总的文件大小。
状态(STATUS)有7种:
created(已创建)
restarting(重启中)
running(运行中)
removing(迁移中)
paused(暂停)
exited(停止)
dead(死亡)
下面为最常用的镜像启动代码
docker run -it --name ubuntu-python -p 16688:8888 -v /Users:/shared_data ubuntu:18.04 env LANG=C.UTF-8 /bin/bash
上述代码中docker run为固定格式,后面的全部是参数。具体参数含义:
-it和/bin/bash通常成对出现,代表交互模式运行容器,通过这对参数我们可以直接进到容器中,在容器内进行各种操作
–name ubuntu-python代表将容器命名为ubuntu-python
-p 16688:8888代表将容器外端口16688和容器内端口8888进行映射,即通过容器外的16688端口就能访问容器内8888端口的服务
-v /Users:/shared_data代表将容器外文件夹/Users映射为容器内的/shared_data文件夹
ubuntu:18.04代表我们要启动的“镜像名称:版本”
env.UTF-8是将环境设为utf8格式,主要解决映射文件夹带中文显示乱码的问题
注意1:
端口映射及文件夹映射十分重要,可以用于容器内外的服务、文件共享以及服务持久化。
同一段代码可以进行多个文件夹或端口映射,只需要添加多个-p或-v即可
除了-it 比较常用的还有-d,意思是后台运行
直接按键盘的control+d(ctrl+d)或control+p+q(ctrl+p+q)
两者的主要区别:使用attach命令进入容器使用control+d退出容器会使容器暂停。
推荐直接记住control+d(ctrl+d)可以退出镜像即可。
docker exec -it fcca62e69d5e /bin/bash
fcca62e69d5e为container id,需要自行修改。
如果容器已经暂停,会导致无法进入容器,可以用后面的启动容器代码先将容器启动再运行上述代码进入容器
docker stop fcca62e69d5e
其中fcca62e69d5e为container id,需要自行修改。
下面代码可以停止所有容器,十分实用
docker stop $(docker ps -aq)
容器被暂停后并不会被删除,如果需要删除需要执行下面语句
docker rm fcca62e69d5e
其中fcca62e69d5e为container id,需要自行修改。
下面代码可以删除所有的容器,通常配合停止所有容器使用
docker rm $(docker ps -aq)
如果容器被暂停,需要重新开启,可以执行以下代码
docker start fcca62e69d5e
可以看到,通过执行上述语句,容器的状态由exited变为了up
当我们配置好环境或者封装好服务,可以通过把容器打包成镜像方便后续的使用或者分享。下述代码可以将现有的容器保存成镜像。
docker commit -a "yxy" -m "ubuntu test" fcca62e69d5e ubuntu:v1
yxy:作者
-m后面一串:镜像说明
fcca62e69d5e:容器id
ubuntu:v1:镜像名&版本
docker save -o ~/ubuntu_2.tar ubuntu:v1
docker load
不管是windows、mac还是liunx,安装mysql都需要下载合适的版本进行安装和配置才可以正常使用mysql。但是随着Docker的出现,我们只需要两行代码就可以完美的在本地环境启动mysql。具体步骤如下:1.拉取mysql
docker pull mysql
2.启动mysql
docker run -d --privileged=true -v ~/mysql:/var/lib/mysql -p 3306:3306 --name mysql8.0 -e MYSQL_ROOT_PASSWORD=123456 mysql:latest
通过上述代码,成功的启动了mysql,其中有几点注意:
本地的~/mysql将保存数据库的所有数据及配置,方便后续关闭容器后数据保存或迁移
将本地3306及容器内3306进行映射,我们通过连接本地3306端口即可连接mysql
-e MYSQL_ROOT_PASSWORD=123456 表示我们设置root用户的密码为123456
本次docker启动mysql仅仅作为示例,更多参数可以访问:https://hub.docker.com/_/mysql
如果你旨在数据挖掘进行更深入的学习核研究,熟悉Docker的使用可以大幅提高你的生产力。虽然本文仅仅是入门文章,但是介绍的功能和代码基本可以帮助你应付日常95%的工作。当然,如果你想对docker更加深入的功能进行了解,可以自行参考详细的教程进行了解~
参考资料: runoob Docker教程
欢迎扫码关注我们的公众号~后续还会有更多数据挖掘相关内容分享~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。