Docker快速入门以及环境配置详解

前言

数据科学开发环境配置起来让人头疼,会碰到包版本不一致、错误信息不熟悉和编译时间漫长等问题。这很容易让人垂头丧气,也使得迈入数据科学的这第一步十分艰难。而且这也是一个完全不常见的准入门槛。

还好,过去几年中出现了能够通过搭建孤立的环境来解决这个问题的技术。本文中我们就要介绍的这种技术名叫Docker。Docker能让开发者简单、快速地搭建数据科学开发环境,并支持使用例如Jupyter notebooks等工具进行数据探索。

简介

Docker 最初 dotCloud 公司内部的一个业余项目

Docker 基于 Go 语言

Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案

Docker 的基础是 Linux 容器(LXC)等技术

Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多

Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器

下面的图片比较了 Docker 和传统虚拟化方式的不同之处,可见容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现。

容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而Docker 只需要启动 10 个隔离的应用即可。

主要优势为:

更快速的交付和部署 - 容器成为了最小单位

更高效的虚拟化 - 内核级虚拟化

更轻松的迁移和拓展

更简单的管理

基本概念

主要是三个:

镜像(Image)

一个只读的模板,镜像可以用来创建 Docker 容器

可以简单创建或更新现有镜像,或者直接下载使用其他人的

容器(Container)

容器是从镜像创建的运行实例,在启动的时候创建一层可写层作为最上层(因为镜像是只读的)

可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台

可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序

仓库(Repository)

集中存放镜像文件的场所

最大的公开仓库是 Docker Hub

国内的公开仓库包括 Docker Pool 等

当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了

Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务

安装

官方网站提供了 Mac, LinuxWindows 版本的安装教程。因为我打算使用虚拟机进行安装测试,所以这里主要走 Linux 的安装教程,不过其他的应该大同小异。我的 ubuntu 版本是 14.04 LTS, trusty

Docker 目前只能安装在 64 位平台上,并且要求内核版本不低于 3.10,实际上内核越新越好,过低的内核版本容易造成功能的不稳定。可以通过下面的命令来检查内核版本(两个方式,都可以):

parallels@ubuntu:~$ uname -a
Linux ubuntu 3.13.0-83-generic #127-Ubuntu SMP Fri Mar 11 00:25:37 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
parallels@ubuntu:~$ cat /proc/version
Linux version 3.13.0-83-generic (buildd@lgw01-55) (gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1) ) #127-Ubuntu SMP Fri Mar 11 00:25:37 UTC 2016

这里我们按照官网的教程,不使用 apt-get 而是使用 curl 来进行安装。

1、如果没有安装 curl,使用 sudo apt-get update; sudo apt-get install curl 来进行安装

2、下载最新的 Docker 包 curl -fsSL https://get.docker.com/ | sh

如果想要以 non-root 用户的角色来使用,请使用 sudo usermod -aG docker parallels(这里 parallels 是用户名),注意需要注销并重新登录以应用改动

3、验证安装

需要先启用 docker sudo service docker start

然后可以用 docker version 来查看版本

最后使用 docker run hello-world 来测试

版本信息

parallels@ubuntu:~$ docker version
Client:
 Version:  1.10.3
 API version: 1.22
 Go version: go1.5.3
 Git commit: 20f81dd
 Built:  Thu Mar 10 15:54:52 2016
 OS/Arch:  linux/amd64

Server:
 Version:  1.10.3
 API version: 1.22
 Go version: go1.5.3
 Git commit: 20f81dd
 Built:  Thu Mar 10 15:54:52 2016
 OS/Arch:  linux/amd64

成功运行 hello world 的结果

parallels@ubuntu:~$ docker run hello-world

Hello from Docker.
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the
 executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
 to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker Hub account:
 https://hub.docker.com

For more examples and ideas, visit:
 https://docs.docker.com/userguide/

这之后的部分是课程需求。

我们需要安装 docker machine virtual box,具体步骤为:

# 获取权限
$ sudo su
# 下载 Docker Machine 的二进制文件
$ curl -L https://github.com/docker/machine/releases/download/v0.6.0/docker-machine-`uname -s`-`uname -m` > /usr/local/bin/docker-machine && chmod +x /usr/local/bin/docker-machine
# 验证安装
$ docker-machine version
docker-machine version 0.6.0, build e27fb87

添加源

把这行添加到 /etc/apt/sources.list 文件中 deb http://download.virtualbox.org/virtualbox/debian trusty contrib

wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -

更新并安装 sudo apt-get update; sudo apt-get install virtualbox-5.0

配置

然后是一些配置,先重设默认的虚拟机

删除原来的默认(如果有的话)docker-machine rm default

创建新的默认虚拟机 docker-machine create --driver virtualbox default(这一步可能需要等一下,我用的是 Parallel Desktop 11,还需要在虚拟机设置中开启 CPU 虚拟化,主要是支持 vt-x)

然后如果直接在菜单中选择 Virtual Box 的话,就会发现什么都没有,技巧是要在刚才的命令行中输入 virtualbox,然后就可以看到下面的界面:

在 Settings - Network 中选择 Port Forwarding,然后按照如图所示添加记录

这里的 Host Port: 9234 记为 A,Guest Port: 9001 记为 B。然后就可以启动 docker 中老师提供的镜像了:

命令为 docker run -it -p 9001:9000 cmusvsc/apachecmda:1.1(需要下载一段时间,然后再解压一段时间),这里 9001 记为 C,9000 记为 D。

接着就会直接连接到 docker 中的虚拟机,从之后的图中可以看到命令行前面的内容也变化了。然后我们输入命令开启前端

cd /home/Spring2016/ApacheCMDA-Frontend
./activator run # 相当于在 9000 端口开启

不要关现在的终端,开启一个新的终端。用

docker exec -it `docker ps -q` /bin/bash

进入正在执行的 docker

等待一段时间后,继续走以下命令

# 开启 MySQL 服务器
service mysql start
cd /home/Spring2016/ApacheCMDA-Backend
./activator "run 9034"

然后可以见到

然后等待一段时间(第一运行需要编译),就可以见到主页面了:

也可以尝试直接 localhost:9001

还记得前面的端口转发吗?这里解释一下:

A,也就是 9234,是用户访问的端口号

B,也就是 9001,我们通过虚拟机的端口转发从 9234 转到了 9001

C,也就是 9001(这个命令中的 docker run -it -p 9001:9000 cmusvsc/apachecmda:1.1),是虚拟机继续转发的端口

D,也就是 9000(这个命令中的 docker run -it -p 9001:9000 cmusvsc/apachecmda:1.1),是 Docker 容器中接收请求的端口。

也就是说,B 和 C 一定要一样,A 和 D 可以在命令中设置。至于为什么后端需要运行在 9034 端口,是因为前端和后端通过这个端口通讯(应该是写死在代码里的)

挂载主机数据卷到容器内,可以通过如下命令进行文件夹映射

docker run -it -p 9999:9999 -p 9001:9000 -v ~/localFolder:/sharedFolder cmusvsc/apachecmda:1.1

从容器内拷贝文件到主机上

# 列出 container
docker ps
# 复制 这个不知道为啥不行
docker cp <containerId>:/file/path/within/container /host/path/target
# 挂载映射
docker run -it -v /home/parallels/Documents/code:/home/code cmusvsc/apachecmda:1.1
# 复制
cp -r Spring2016/* ./code/

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家能有所帮助,如果有疑问大家可以留言交流。

(0)

相关推荐

  • Docker安装和基础用法 Docker入门教程第二篇

    本系列文章将介绍Docker的有关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 (4)Docker 容器的隔离性 - 使用 cgroups 限制容器使用的资源 (5)Docker 网络 1. 安装 1.1 在 Ubuntu 14.04 上安装 Docker 前提要求: 内核版本必须是3.10或者以上 依次执行下面的步骤: sudo apt-get update sudo apt

  • Docker安装和简单使用入门教程

    安装 由于我本人使用的linux系统,原生支持docker,相对安装还是比较简单的 1:使用下面的官方脚本安装: wget -qO- https://get.docker.com/ | sh 2:输入下面的命令验证是否可以查看版本号,可以就是安装成功 sudo docker version 3:建议把当前使用的用户加到Docker用户组,就可以不用很次都sudo了 sudo usermod -aG docker your_username 4:重新登录,sudo权限才会成效 logout 至此,

  • 什么是docker Docker入门教程第一篇

    Docker是个新生的事物,概念类似虚拟化.网上关于Docker入门的东西已经很多了.不过本文探讨了Docker的特点.特性.原理,还介绍了具有中国特色的安装测试过程,另外还谈到了Docker的社区生态和Dockerfile,并使用Dockerfile构建一个nginx环境. 缘起 在几个月前听说Docker,但是一直没有时间去研究,前一段时间趁着azure免费试用,赶紧实验一下,但是卡在了ubuntu基础镜像的下载上(由于国内网络的特殊原因),所以也就搁浅了,这里把经验和体会分享一下. Doc

  • Docker学习笔记之docker入门

    学习的一些疑问 如何热更新镜像(images)?(你可以快速启动或者销毁容器.这种时间几乎是实时的) 如何热更新游戏服? 好处在于各个应用之间环境相互独立,即使某一个容器崩溃也不会影响到其它容器: 每个容器使用端口如何维护?(方法1写在Dockerfile里面,不灵活:方法2在run的时候-p指定): 那这样的话,会存在好多linux用户,相当于每一个容器就要维护一个物理机(虚拟): 需要一套工具来管理维护镜像.容器的操作和状态: 目前主流使用docker都是应用到哪些场景中? 1. docke

  • 使用IPython来操作Docker容器的入门指引

    现在Docker是地球上最炙手可热的项目之一,就意味着人民实际上不仅仅是因为这个才喜欢它. 话虽如此,我非常喜欢使用容器,服务发现以及所有被创造出的新趣的点子和领域来切换工作作为范例. 这个文章中我会简要介绍使用python中的docker-py模块来操作Docker 容器,这里会使用我喜爱的编程工具IPython. 安装docker-py 首先需要docker-py.注意这里的案例中我将会使用Ubuntu Trusty 14.04版本. $ pip install docker-py IPyh

  • docker快速入门教程

    10分钟教会大家如何玩转Docker,这是 1.前言 进入云计算的时代,各大云提供商AWS,阿里云纷纷推出针对Docker的服务,现在Docker是十分火爆,那么Docker到底是什麽,让我们来体验一下. 2.Docker是什麽 Docker是一个开源的应用容器引擎,可以把应用以及依赖包放到一个可移植的容器中,然后发布到任何流行的 Linux 系统上,通过这种方式实现虚拟化. 提到虚拟化,大家应该十分熟悉了,有VMware,Xen,KVM等等很多.那么,Docker和VM有什么不同呢,我们用官网

  • 什么是Docker? Docker入门教程

    概述 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的  Linux 机器上,也可以实现 虚拟化 . docker的配图很形象.一只鲸鱼(容器)上面装载着货物(应用). docker安装 debian/ubuntu等系统可以直接下载deb进行安装 docker repo sudo dpkg -i package-name.deb 其他平台参照 docker官网 docker hello world 安装好docker之后,执行

  • Docker快速入门以及环境配置详解

    前言 数据科学开发环境配置起来让人头疼,会碰到包版本不一致.错误信息不熟悉和编译时间漫长等问题.这很容易让人垂头丧气,也使得迈入数据科学的这第一步十分艰难.而且这也是一个完全不常见的准入门槛. 还好,过去几年中出现了能够通过搭建孤立的环境来解决这个问题的技术.本文中我们就要介绍的这种技术名叫Docker.Docker能让开发者简单.快速地搭建数据科学开发环境,并支持使用例如Jupyter notebooks等工具进行数据探索. 简介 Docker 最初 dotCloud 公司内部的一个业余项目

  • Mac M1 Java 开发环境配置详解

    JDK 配置 目前 Zulu JDK 支持 M1芯片,下载Zulu JDK 下载后点击安装,在控制台输入java -version ~ % java -version openjdk version "11.0.10" 2021-01-19 LTS OpenJDK Runtime Environment Zulu11.45+27-CA (build 11.0.10+9-LTS) OpenJDK 64-Bit Server VM Zulu11.45+27-CA (build 11.0.1

  • 微信小程序Server端环境配置详解(SSL, Nginx HTTPS,TLS 1.2 升级)

    微信小程序Server环境配置详解 主要内容: 1. SSL免费证书申请步骤 2. Nginx HTTPS 配置 3. TLS 1.2 升级过程 微信小程序要求使用 https 发送请求,那么Web服务器就要配置成支持 https,需要先申请SSL证书 小程序也要求 TLS(传输层安全协议)的版本至少为 1.2,在配置好 https之后,如果 TLS 的版本较低,就涉及到升级问题 所以 Server端环境配置的主要步骤: 申请 SSL 证书 配置web服务器支持https(我使用的是nginx)

  • centos 6.5 oracle开机自启动的环境配置详解

    centos 6.5 oracle开机自启动的环境配置详解 环境:centos 6.5 + Oracle 11g 自启动之前问题 虚拟机里的oracle环境,每次重启完系统,用plsql developer连接,先是报错: 无TNS监听程序 解决方法是切换到系统的oracle用户,执行lsnrctl start,但是执行之前,因为ORACLE_HOME环境变量没有生效,还要是环境变量文件生效,步骤如下: [oracle@localhost ~]$ source .bash_profile [or

  • win10+VS2017+Cuda10.0环境配置详解

    一.安装 1.1硬件支持 首先确定你的电脑显卡是支持Cuda安装的. 右键"我的电脑",然后点击"设备管理器".在显示适配器里可以查看显卡型号. 如果包含在官网列表 中,则可以点击对应的型号到下载界面下载Cuda安装包. 1.2 安装VS2017 官网下载VS2017,并安装. 1.3 安装Cuda 在安装过程中,会自动检测本机是否已经安装了配套的VS版本其中之一,如果VS版本和Cuda版本不匹配的话,安装无法进行. ( 另外,如果电脑安装了360杀毒的话,安装过程

  • openCV4.1.1+VS2019环境配置详解

    1.VS2019安装 官网下载地址https://visualstudio.microsoft.com/zh-hans/?rr=https%3A%2F%2Fwww.microsoft.com%2Fzh-cn%2F 本地下载(附安装教程+激活码):https://www.jb51.net/softs/679895.html 2.openCV4.1.1安装 官网下载地址https://opencv.org/opencv-4-1-1/ 3.环境配置 右键此电脑,点击属性,找到高级系统设置. 点击环境变

  • Android+OpenCV4.2.0环境配置详解(Android studio)

    仅是个人记录,希望能对有需要的给予一些小小的帮助 首先我们肯定是要去到OpenCV的官网下载对应的SDK,并解压得到文件夹(opencv-4.2.0-android-sdk) 其次是NDK环境搭建(双击shift,输入sdk,找到sdk manager,将下面红色框框勾选安装) 创建项目,我选用的是(并不是只有这一选择) 导入Module File->New->Import Module 路径选择**\opencv-4.2.0-android-sdk\OpenCV-android-sdk\sd

  • Springboot内外部logback多环境配置详解

    目录 一.概述 二.项目内外配置 三.使用自定义appender 四.logback查找配置源码 五.案例源码 一.概述 SpringBoot官方文档Springboot 默认读取的是项目内的 resources 中 logback 配置文件.如果 classpath(resources) 下有logback-test.xml会优先生效,并且会和其他logback文件同时生效.Springboot 默认日志级别是DEBUG,所以在logback初始化之前,会有DEBUG日志输出. 二.项目内外配

  • SpringBoot-application.yml多环境配置详解

    介绍 开发SpringBoot应用的时候,通常程序需要在测试环境测试成功后才会上线到生产环境.而测试环境和生产环境的数据库地址.服务器端口等配置都不同.在为不同环境打jar包时,需要频繁的修改application.yml配置文件,十分麻烦.可以采用创建多个配置文件的方法解决这一问题. 为了实现多环境配置,我们可以在本地开发的时候在Resource文件夹下新建不同环境的配置文件,如下图所示: 默认配置文件application.yml文件可根据自己需求使用,最后会合并其他的application

  • Spring boot工具类静态属性注入及多环境配置详解

    由于需要访问MongoDB,但是本地开发环境不能直接连接MongoDB,需要通过SecureCRT使用127.0.0.2本地IP代理.但是程序部署到线上生产环境后,是可以直接访问MongoDB的,因此开发好程序后,总是要修改一下MongoDB服务器的IP才能提交代码,这样很是不方便. private static final String PUBCHAT_HOST = "127.0.0.2"; // private static final String PUBCHAT_HOST =

随机推荐