简介
Docker是一种新兴的虚拟化技术,能够一定程度上的代替传统虚拟机。不过,Docker 跟传统的虚拟化方式相比具有众多的优势。我也将Docker类比于Python虚拟环境,可以有效的配置各个版本的开发环境,比如深度学习与Java环境。
docker:有两个版本:docker-ce(社区版)和docker-ee(企业版)
docker-compse:可运行和管理多个docker容器
优势
本人主要想用来配置开发环境,由于实验室机器系统环境版本等冲突的问题。
先用一张Docker — 从入门到实践里的图整体感受一下其独特的优势:
更高效的利用系统资源:由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。
更快速的启动时间:传统的虚拟机技术启动应用服务往往需要数分钟,而Docker 容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。
一致的运行环境:开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一
致,导致有些bug 并未在开发过程中被发现。而Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现「这段代码在我机器上没问题啊」这类问题。
持续交付和部署:Docker是build once,run everywhere. 使用Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过Dockerfile 来进行镜像构建,并结合持续集成(Continuous Integration) 系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合持续部署(Continuous Delivery/Deployment) 系统进行自动部署。
更轻松的迁移:Docker 使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。此外,Docker 团队同各个开源项目团队一起维护了一大批高质量的官方镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。使用Dockerfile 使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。
镜像(Image)
镜像,从认识上简单的来说,就是面向对象中的类,相当于一个模板。从本质上来说,镜像相当于一个文件系统。Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
容器(Container)
容器,从认识上来说,就是类创建的实例,就是依据镜像这个模板创建出来的实体。容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。因此容器可以拥有自己的root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。
仓库(Repository)
仓库,从认识上来说,就好像软件包上传下载站,有各种软件的不同版本被上传供用户下载。镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。
Win10安装Docker:
win7、win8 等需要利用 docker toolbox 来安装,国内可以使用阿里云的镜像来下载
下载地址:http://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/
docker toolbox 是一个工具集,它主要包含以下一些内容:
Docker CLI 客户端,用来运行docker引擎创建镜像和容器
Docker Machine. 可以让你在windows的命令行中运行docker引擎命令
Docker Compose. 用来运行docker-compose命令
Kitematic. 这是Docker的GUI版本
Docker QuickStart shell. 这是一个已经配置好Docker的命令行环境
Oracle VM Virtualbox. 虚拟机
下载完成之后直接点击安装,安装成功后,桌边会出现三个图标,入下图所示:
点击 Docker QuickStart 图标来启动 Docker Toolbox 终端。
如果系统显示 User Account Control 窗口来运行 VirtualBox 修改你的电脑,选择 Yes。
Docker支持64 位版本的Windows 10 Pro,且必须开启Hyper-V。开启方式为:打开“控制面板”->“程序”-> “启动或关闭Windows功能”,找到Hyper-V并勾选,确定重启电脑。
Win10下载:https://docs.docker.com/docker-for-windows/install/
Ubuntu16.04安装:
1、卸载旧版本的Docker
sudo apt-get remove docker docker-engine docker.io docker-ce
注:旧版本的Docker被称作docker或者docker-engine,Docker CE(社区版)包现在被叫做docker-ce,如果之前安装过了,需要先卸载。
2、更新apt安装包索引
sudo apt-get update
3、查看可安装docker版本
apt-cache madison docker-ce
4、安装docker18.03
sudo apt-get install docker-ce=<VERSION>
sudo apt-get install docker-ce=18.03.0~ce-0~ubuntu
或 sudo pip install docker
以下安装可选:
1、安装依赖包:sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ software-properties-common
2、添加官方密钥 执行该命令时,如遇到长时间没有响应说明网络连接不到docker网站,需要使用代-理进行。
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
显示OK,表示添加成功.
3、添加仓库:
sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"
Centos安装docker:
安装一些必要的系统工具:sudo yum install -y yum-utils device-mapper-persistent-data lvm2
添加软件源信息:sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新 yum 缓存:sudo yum makecache fast
安装 Docker-ce:sudo yum -y install docker-ce
启动 Docker 后台服务:sudo systemctl start docker
使用脚本安装 Docker
使用 sudo
或 root
权限登录 Centos。确保 yum 包更新到最新:sudo yum update
3、执行 Docker 安装脚本。
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
执行这个脚本会添加 docker.repo
源并安装 Docker。
4、启动 Docker 进程:sudo systemctl start docker
删除 Docker CE:
$ sudo yum remove docker-ce
$ sudo rm -rf /var/lib/dock
更新/卸载Docker
Docker更新:sudo apt upgrade
Docker卸载:sudo apt-get purge docker-ce sudo rm -rf /var/lib/docker
重新启动服务
sudo systemctl daemon-reload
sudo systemctl restart docker
建立docker 用户组(注销系统重新进入系统,就可以直接使用docker开头了(注意:一定要注销后再进系统))
默认情况下,docker 命令会使用Unix socket 与Docker 引擎通讯。而只有root 用户和docker 组的用户才可以访问Docker 引擎的Unix socket。出于安全考虑,一般Ubuntu系统上不会直接使用root 用户。因此,更好地做法是将需要使用docker 的用户加入docker用户组。
建立docker组:sudo groupadd docker
将当前用户加入docker组:sudo usermod -aG docker $USER
重新启动服务: sudo service docker restart
配置国内镜像加速:
新版的 Docker 使用 /etc/docker/daemon.json(Linux) 或者 %programdata%\docker\config\daemon.json(Windows) 来配置 Daemon。请在该配置文件中加入(没有该文件的话,请先建一个):
在/etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件){
"registry-mirrors": [
"https://registry.docker-cn.com"
]
}
下载image :
启动服务:sudo service docker start
下载镜像:sudo docker pull ubuntu:16.04
常用命令:
启动交互式容器:docker run -t -i --name=容器的名字 IMAGE_NAME /bin/bash -i是交互模式启动 -t是在命令行下启动
-i --interactive=true | false,默认是false -t --tty=true | false,默认是false
docker run -i -t --privileged=true -d -p 4489:4489/tcp --name 容器的名字 ubuntu:16.04 /bin/bash
docker run -i -t ubuntu /bin/bash
查看容器:docker ps [-a] [-l] 省略 列出正在运行的容器 -a all 列出所有容器 -l latest 列出最近的容器
查看指定容器:docker inspect name | id
name指代具体的容器名称,id则是容器的唯一id标识。inspect命令可以详细的展示出容器的具体信息。
docker run -d -p -v创建并启动一个容器,在run后面加上-d参数,则会创建一个守护式容器在后台运行。-P:将容器内部使用的网络端口映射到我们使用的主机上。-v:表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>宿机目录必须是绝对的
容器的端口映射
命令:run [-P] [-p]
-P,–publish-all=true | false,大写的P表示为容器暴露的所有端口进行映射;
-p,–publish=[],小写的p表示为容器指定的端口进行映射,有四种形式:
containerPort:只指定容器的端口,宿主机端口随机映射; docker run -p 80
hostPort:containerPort:同时指定容器与宿主机端口一一映射;docker run -p 8080:80
ip::containerPort:指定ip和容器的端口; docker run -p 0.0.0.0::80
ip:hostPort:containerPort:指定ip、宿主机端口以及容器端口。 docker run -p 0.0.0.0:8080:80
docker ps -a 查看已经创建的容器
docker ps -s 查看已经启动的容器
docker start con_name 启动容器名为con_name的容器
docker stop con_name 停止容器名为con_name的容器
docker logs con_name 获取容器名为con_name的容器日志
docker command --help 命令 查看相关参数意义
docker rm con_name 删除容器名为con_name的容器
docker rename old_name new_name 重命名一个容器
docker attach con_name 将终端附着到正在运行的容器名为con_name的容器的终端上面去,前提是创建该容器时指定了相应的sh执行这个命令后,按下回车键,会进入容器的命令行Shell中。
docker inspect 查看容器的详细信息
docker top con_name 查看容器名为con_name的容器内部的进程
docker exec 可以用来在容器中运行一个进程