Docker 的核心理念是 Build, Ship, and Run Any App, Anywher
,即一次封装,处处运行。linux
从前,咱们在服务器配置一个应用的运行环境,要安装各类组件,就拿 JavaWeb 的环境来讲吧,要安装 Tomcat、MySQL 等。安装和配置这些东西有多麻烦就不说了,它还不能跨平台。假如咱们是在 Windows 上安装的这些环境,到了 Linux 又得从新装。何况就算不跨操做系统,换另外一台一样操做系统的服务器,要移植应用也是很是麻烦的。nginx
Linux 容器技术
的出现就解决了这样一个问题,而 Docker 就是在它的基础上发展过来的。将应用运行在 Docker 容器
上面,而 Docker 容器在任何操做系统上都是一致的,这就实现了跨平台、跨服务器。只须要一次配置好环境,换到别的机子上就能够一键部署好,大大简化了操做。web
这里我主要介绍一下 Docker 在 Ubuntu 和 Windows 中的安装。其余的操做系统可自行搜索安装教程。docker
因为 Docker 官网在国内的访问速度很差,因此这里推荐去 DaoCloud
下载镜像,速度很是快:segmentfault
https://get.daocloud.io/#inst...windows
先进入到 Docker 的下载页面:浏览器
https://get.daocloud.io/#inst...bash
若是是 win10 系统就直接下载 Docker for Windows
,若是是 win10 以前的系统就下载Docker Toolbox
。下载完成以后默认一直点下一步就安装完成了。服务器
注意:windows 运行 Docker 须要在 BIOS 中开启
Intel Virtual Technology
,若是打不开 Docker 并提示有该类错误请自行根据本身电脑型号搜索相关教程。
$ sudo apt-get update $ sudo apt-get install docker.io
$ curl -sSL https://get.daocloud.io/docker | sh
docker version
命令查看 docker 版本信息。
注意:正常状况下,应该显示出 Client 和 Server 的信息,若是没有 Server 的信息,则表明服务没有启动。此时须要用
service docker start
命令启动它。
若是装错版本了能够卸载了从新装curl
$ sudo apt-get remove --purge docker.io $ rm -rf /var/lib/docker
Docker 有三大核心概念:
Docker 利用仓库管理镜像的设计与 Git 很是类似。咱们要配置的应用运行环境就是镜像,如 nginx 镜像,当咱们本地没有该镜像的时候,就须要从远程仓库 pull 下来,当咱们启动这个镜像时,就会有一份镜像被复制并运行在容器中。若是咱们改动了容器里面的内容,也能够将其 commit 保存成新的镜像。
这里以 Nginx 为例来演示在 docker 中启动一个应用的过程。
启动 Nginx 分为 三步:
首先要 Docker 官方仓库 里搜索 nginx,找到带有 official
字样的,点进去把 pull 命令复制下来。
执行该条命令就把镜像 pull 到本地了。执行「docker images」便可查看本地镜像。
其实 docker pull nginx
这条命令是简写形式,完整命令应该是:
$ docker pull registry.hub.docker.com/library/nginx
完整的命令是在 nginx 前面加上了 注册服务器的地址
,因为 docker pull 的默认地址是这个,因此该地址是能够不加的。
为何要说这个呢,由于从官方仓库下载镜像实在是很是的慢,有时候还下载不了。若是咱们更改了这个注册服务器的地址,把它换成国内的,就能够实现加速。
国内有很是多的镜像仓库,本文介绍使用阿里云的,后文咱们也会介绍把本身的镜像上传到阿里云,而且该服务是免费的。
访问这个地址:
https://cr.console.aliyun.com...
若是没有阿里云帐号的就本身注册一个。在上面这个地址的页面就能够看到本身的专属加速地址了,而且有不一样系统的安装方法,根据给的教程安装便可。
pull 了镜像以后,执行如下命令就能够启动它了。
$ docker run -d nginx
这条命令是后台启动 nginx ,不加 -d
就是前台启动。启动了以后咱们暂时仍是没法访问带它的,咱们还须要将容器内的 nginx 端口映射到容器外面,才能够访问到。
$ docker run -d -p 8080:80 nginx
跟上条命令比起来只加了一个 -p
参数,后面跟上端口,这里我是把本机的 8080 端口映射到 容器内的 80 端口上,浏览器访问 localhost:8080
就能够看到 nginx 的欢迎页面了。
$ docker images
$ docker tag old-tag new-tag
新的标签跟原标签镜像的 ID 是彻底同样的,它们实际上都指向同一个镜像文件,只是别名不一样而已。
$ docker rmi image-id/image-tag
注意:删除镜像须要先删除使用了此镜像的容器,虽然能够强制删除,可是并不推荐这么作。另外删除镜像,能够用 tag 或 ID 删除,若是 ID 是同样的就用 tag 删除
$ docker ps
$ docker stop container-id
容器的 ID 不须要所有输完,只要能区分两个容器就能够了。
$ docker ps -a
$ docker rm container-id
删除容器以前须要先中止它
$ docker commit container-id image-tag
特别注意:若是更改了容器后不将它保存为新的镜像,在容器被删除后,全部的更改都不会被保存。下一文会介绍另 Docker 的数据存储能够解决这个问题。另外,此命令后面的 tag 能够不写只写名字,默认 latest。
$ docker exec -it container bash
Docker 容器也有一个类 Linux 的文件系统,还能够用一些 linux 命令。要退出容器可输入
exit
注意:有的镜像是没有带 bash 的,好比 docker pull daocloud.io/library/nginx:1.13.8-alpine-perl
,这条命令就会报错,这时就能够用 sh 创建链接:
$ docker exec -it container /bin/sh
$ docker cp file container-id:newfile
$ docker cp container-id:file newfile
复制容器内的文件到容器外命令是在容器外执行的
$ docker save -o name.tar image-tag
$ docker load --input name.tar
$ docker export -o name.tar container-id
容器导入实际上是导成了镜像。
先来了解一下 docker 是如何管理仓库和镜像的。
仓库是放在注册服务器上的,一个仓库只管理一个镜像,一个镜像能够有多个版本。
Create Repository
,在以下页面建立一个仓库。stormxing/web-server
stormxing-webserver
,若是版本不填写就默认是 latest。虽然 Docker Hub 能够 push 镜像,可是速度太慢了。最好仍是用国内的速度比较快,这里介绍阿里云的。
本篇文章主要介绍了Docker 的做用、Docker 三大核心
(仓库、镜像、容器)的基本操做,还介绍了如何 push 本身的镜像到远程仓库。
下一篇文章 将介绍 Docker 的数据管理和用更高级的方式 Dockerfile
来建立镜像以及 docker-compose 的简单使用。