Docker 是一个开源的应用容器引擎,基于 Go 语言 并听从Apache2.0协议开源。html
Docker 可让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,而后发布到任何流行的 Linux 机器上,也能够实现虚拟化。linux
容器是彻底使用沙箱机制,相互之间不会有任何接口(相似 iPhone 的 app),更重要的是容器性能开销极低。web
- 一、简化程序:
Docker 让开发者能够打包他们的应用以及依赖包到一个可移植的容器中,而后发布到任何流行的 Linux 机器上,即可以实现虚拟化。Docker改变了虚拟化的方式,使开发者能够直接将本身的成果放入Docker中进行管理。方便快捷已是 Docker的最大优点,过去须要用数天乃至数周的 任务,在Docker容器的处理下,只须要数秒就能完成。redis
- 二、避免选择恐惧症:
若是你有选择恐惧症,仍是资深患者。Docker 帮你 打包你的纠结!好比 Docker 镜像;Docker 镜像中包含了运行环境和配置,因此 Docker 能够简化部署多种应用实例工做。好比 Web 应用、后台应用、数据库应用、大数据应用好比 Hadoop 集群、消息队列等等均可以打包成一个镜像部署。docker
- 三、节省开支:
一方面,云计算时代到来,使开发者没必要为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思惟定势。Docker 与云的结合,让云空间获得更充分的利用。不只解决了硬件管理的问题,也改变了虚拟化的方式。shell
Docker 是一个客户端-服务器(C/S)架构程序。Docker 客户端只须要向 Docker 服务器 或者守护进程发出请求,服务器或者守护进程将完成全部工做并返回结果。Docker 提供了 一个命令行工具 Docker 以及一整套 RESTful API。你能够在同一台宿主机上运行 Docker 守护 进程和客户端,也能够从本地的 Docker 客户端链接到运行在另外一台宿主机上的远程 Docker 守护进程。数据库
Docker 镜像是由文件系统叠加而成(是一种文件的存储形式)。最底端是一个文件引 导系统,即 bootfs,这很像典型的 Linux/Unix 的引导文件系统。Docker 用户几乎永远不会和 引导系统有什么交互。实际上,当一个容器启动后,它将会被移动到内存中,而引导文件系 统则会被卸载,以留出更多的内存供磁盘镜像使用。Docker 容器启动是须要一些文件的, 而这些文件就能够称为 Docker 镜像。ubuntu
Docker 把应用程序及其依赖,打包在 image 文件里面。只有经过这个文件,才能生成 Docker 容器。image 文件能够看做是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,能够生成多个同时运行的容器实例。bash
image 是二进制文件。实际开发中,一个 image 文件每每经过继承另外一个 image 文件,加上一些个性化设置而生成。举例来讲,你能够在 Ubuntu 的 image 基础上,往里面加入 Apache 服务器,造成你的 image。服务器
image 文件是通用的,一台机器的 image 文件拷贝到另外一台机器,照样可使用。通常来讲,为了节省时间,咱们应该尽可能使用别人制做好的 image 文件,而不是本身制做。即便要定制,也应该基于别人的 image 文件进行加工,而不是从零开始制做。
Docker 用 Registry 来保存用户构建的镜像。Registry 分为公共和私有两种。Docker 公司 运营公共的 Registry 叫作 Docker Hub。用户能够在 Docker Hub 注册帐号,分享并保存本身的 镜像(说明:在 Docker Hub 下载镜像巨慢,能够本身构建私有的 Registry)。
Docker 能够帮助你构建和部署容器,你只须要把本身的应用程序或者服务打包放进容 器便可。容器是基于镜像启动起来的,容器中能够运行一个或多个进程。咱们能够认为,镜 像是Docker生命周期中的构建或者打包阶段,而容器则是启动或者执行阶段。 容器基于 镜像启动,一旦容器启动完成后,咱们就能够登陆到容器中安装本身须要的软件或者服务。
1)安装(基于Ubuntu16.04)
sudo apt-key add gpg sudo dpkg -i docker-ce_17.03.2~ce-0~ubuntu-xenial_amd64.deb
2)Docker服务端的启动与中止
docker是一个客户端-服务端(C/S)架构程序,相似redis。
- 客户端: docker命令行工具
- 服务器: Docker守护进程(docker引擎)
只有在服务端运行时,输入docker的命令才能运行。咱们平时用的终端界面就是docker的客户端。
# 启动docker sudo service docker start # 中止docker sudo service docker stop # 重启docker sudo service docker restart
注意:安装完成Docker后,默认已经启动了docker服务
1)搜索可用的docker镜像
sudo docker search [镜像名字]
示例:sudo docker search ubuntu
2)下载docker镜像
sudo docker pull [镜像名字]
注意:要写完整的名字
示例:sudo docker pull ubuntu
3)加载本地镜像
若是有已经下载好的镜像,能够直接加载
sudo docker load -i [包的位置]
-i, –input string Read from tar archive file, instead of STDIN
从tar归档文件读取镜像,而不是标准输入流示例:sudo docker load -i ./ubuntu.tar
4) 删除镜像
sudo docker image rm [镜像名字或镜像id]
示例:sudo docker image rm ubuntu
5)镜像的备份与迁移
咱们能够经过save命令将镜像打包成文件,拷贝给别人使用
sudo docker save -o 保存的文件名 镜像名
示例:
sudo docker save -o ./装载了web应用的镜像.tar ubuntu
而后能够拷贝给别人,别人拿到以后,用3)的方法就能够运行了。
6)列出镜像
sudo docker image ls
1)列出本机正在运行的容器
sudo docker container ls
- REPOSITORY:镜像所在的仓库名称
- TAG:镜像标签
- IMAGEID:镜像ID
- CREATED:镜像的建立日期(不是获取该镜像的日期)
- SIZE:镜像大小
2)列出本机全部容器,包括已经终止运行的
sudo docker container ls --all
3)建立容器
sudo docker run [option] 镜像名 [向启动容器中传入的命令]经常使用可选参数说明:
- -i 表示以“交互模式”运行容器
- -t 表示容器启动后会进入其命令行。加入这-it两个参数后,容器建立就能登陆进去。即分配一个伪终端。
- --name 为建立的容器命名
- -v 表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录,即 宿主机目录:容器中目录),可使 用多个-v 作多个目录或文件映射。注意:最好作目录映射,在宿主机上作修改,而后 共享到容器上。
- -d 在run后面加上-d参数,则会建立一个守护式容器在后台运行(这样建立容器后不 会自动登陆容器,若是只加-i -t 两个参数,建立后就会自动进去容器)。
- -p 表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可使用多个-p 作多个端口映射
- -e 为容器设置环境变量
- --network=host 表示将主机的网络环境映射到容器中,容器的网络与主机相同
示例1:
若是是建立一个交互式的容器。
sudo docker run -it --name=myubuntu ubuntu /bin/bash
在容器中能够随意执行linux命令,就是一个ubuntu的环境,当执行exit命令退出时,该容器也随之中止。注意是中止,不是没了。用sudo docker container ls --all列出全部容器(包括已终止的),能够看到容器还在的。
示例2:
若是是建立一个守护式的容器。
对于一个须要长期运行的容器来讲,咱们能够建立一个守护式容器。在容器内部exit退出时,容器也不会中止。
sudo docker run -dit --name=damonubuntu ubuntu [命令(可选)]
(为何不用-d而用-dit呢?缘由就是:Docker容器后台运行,就必须有一个前台进程。主线程结束,容器会退出。)
4)进入已运行的容器
例如,我想进入刚刚建立的守护式容器damonubuntu。
sudo docker exec -it
容器名或容器id 进入后执行的第一个命令
示例:sudo docker exec -it damonubuntu /bin/ls
5)中止与启动容器
# 中止一个已经在运行的容器 sudo docker container stop 容器名或容器id # 启动一个已经中止的容器 sudo docker container start 容器名或容器id # kill掉一个已经在运行的容器 sudo docker container kill 容器名或容器id
6)删除容器
sudo docker container rm 容器名或容器id
7)将容器保存为镜像
sudo docker commit 容器名 镜像名