Docker快速入门以及环境配置详解_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, Linux 和 Windows 版本的安装教程。因为我打算使用虚拟机进行安装测试,所以这里主要走 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/

总结

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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索docker
, docker快速入门
, 配置开发环境
docker入门实战
docker快速入门、docker 配置文件详解、redis快速入门详解ppt、k线图详解快速入门、redis快速入门详解,以便于您获取更多的相关知识。

时间: 2024-08-03 08:58:30

Docker快速入门以及环境配置详解_docker的相关文章

利用docker搭建LAMP运行环境教程详解_docker

LAMP介绍 LAMP 指的 Linux(操作系统).ApacheHTTP 服务器,MySQL(有时也指MariaDB,数据库软件) 和 PHP(有时也是指 Perl 或 Python) 的第一个字母,一般用来建立 web 服务器. 虽然这些开放源代码程序本身并不是专门设计成同另几个程序一起工作的,但由于它们的免费和开源,这个组合开始流行(大多数Linux发行版本***了这些软件).当一起使用的时候,它们表现的像一个具有活力的解决方案包. 下面介绍如何使用docker来搭建一个包含lamp组件的

Centos6.5搭建java开发环境配置详解_Linux

一.安装jdk 1.查看Linux自带的JDK是否已安装 java –version 如果出现openjdk,最好还是先卸载掉openjdk,在安装sun公司的jdk. 2.查看jdk信息 rpm -qa|grep java 3.卸载OpenJDK,执行以下操作: rpm -e --nodeps tzdata-java-2012c-1.el6.noarch rpm -e --nodeps java-1.7.0-openjdk-1.7.0.45-1.45.1.11.1.el6.x86_64 4.新

Docker创建镜像两种方法详解_docker

 Docker创建镜像             最近学习Docker 的知识,偶然在网上看到关于Docker 创建对象的两种方法很好,这里记录下,也许可以帮助到你.  我们都知道Docker中我们是基于镜像来运行的容器,那如何创建镜像呢?创建镜像有两种方法,一是使用docker commit命令,二是使用docker build命令和Dockerfile文件.这里我们说的创建镜像是指基于一个已有的基础镜像比如ubuntu等,而不是从零创建一个全新的镜像.         下面分别简单介绍一下两种

Docker 实现在线集成开发环境实例详解_docker

Docker 实现在线集成开发环境 由于,学校有流量限制,每月10G,超流量后限速为50KB/s,作为一个正常人类,这点流量肯定是不够用的,所以我 需要一个几乎没有流量.网速限制的开发环境. 虽然ssh连接服务器,在服务器终端下开发几乎不限速.不限流,但是开发全靠vim显然有些"不亲民",大部分人对命令行界面并不熟悉. 终端下的开发环境搭建起来也是颇为麻烦,所以本文将用 三步 教你打造一个界面美观.功能强大的.菜鸟都可以轻松搭建的 在线集成开发环境 . 目标: 一键部署,一句命令完成在

docker容器如何优雅的终止详解_docker

前言 在Docker大行其道的今天,我们能够非常方便的使用容器打包我们的应用程序,并且将它在我们的服务器上部署并运行起来.但是,谈论到如何停掉运行中的docker容器并正确的终止其中的程序,这就成为一个非常值得讨论的话题了. 事实上,在我们日常的项目当中,这是我们经常需要面对和处理的问题:      场景A:假如我们打包在容器中的程序,提供HTTP方式的服务,负责处理各种HTTP requests并返回结果,我们必然希望在容器被停掉的时候,能够让程序有时间把已经在处理中的请求继续处理完毕,并返回

Java Web开发环境配置详解_java

这是进行Java Web开发必备的一个过程,仅供新手参考,高手可以忽略! 先看看要安装的东西: jdk下载地址:http://www.jb51.net/softs/214120.html eclipse下载:http://www.jb51.net/softs/143046.html MySQL下载:http://www.jb51.net/softs/40589.html tomcat下载:http://www.jb51.net/softs/417569.html 各位也可以去官网上下载,版本不一

Nginx+Tomcat的服务器端环境配置详解_nginx

Nginx+tomcat是目前主流的java web架构,如何让nginx+tomcat同时工作呢,也可以说如何使用nginx来反向代理tomcat后端均衡呢?直接安装配置如下: 1.JAVA JDK安装: #下载相应的jdk软件包,然后解压安装,我这里包名称为:jdk-7u25-linux-x64.tar.gz         tar -xzf jdk-7u25-linux-x64.tar.gz ;mkdir -p /usr/java/ ;mv jdk1.7.0_25/ /usr/java/

LNMP服务器环境配置详解

  服务器配置 1.购买好vps后登录服务器首先修改密码passwd root 2.修改ssh的超时时间  代码如下   vi /etc/ssh/sshd_config ClientAliveInterval 60 ClientAliveCountMax 30 3.安装setup  代码如下   #安装setuptool yum install setuptool #可以发现执行setup后不全,再安装一个用于系统服务管理 yum install ntsysv #再安装个防火墙,以及setup中

阿里云ubuntu 12.04 64位系统java环境配置详解

系统版本:ubuntu 12.04 64位 ssh链接服务器(使用终端远程链接):     ssh -l username IP地址 如果出现类似如下错误:         @    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @ 表示host文件中记录的上次登陆信息和当前信息不匹配.在客户端执行:         mv ~/.ssh/known_hosts /tmp 再次登陆,提示是否继续链接时输入yes即可. 添加用户 1:使用a