Docker 入門

728 查看

什么是Docker?

简介:Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。 

Docker通常用于如下场景:

  • web应用的自动化打包和发布;

  • 自动化测试和持续集成、发布;

  • 在服务型环境中部署和调整数据库或其他的后台应用;

  • 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。

Docker 的安装

ubuntu环境下的安装

在Ubuntu中只需要运行一行命令即可实现Docker的安装:

sudo apt-get install docker.io

完成后输入(显示docker的信息):

sudo docker info

显示如下(即成功):

Mac OS X, Windows环境下安装

Mac OS X : https://docs.docker.com/installation/mac/

Windows :https://docs.docker.com/installation/windows/

运行容器(入门操作)

安装好之后,我们可以开始一些简单的入门级别的操作:

先理解两个概念:

镜像(image):跟平常使用的虚拟机的镜像文件一个意思,相当于一个模板
容器(container):container则是images运行时的的状态(可以理解乘,container引用image开启一个docker的应用)

我们可以通过官方提供给我们的镜像来进行学习。比如我们想在Docker中运行一个Ubuntu系统,很简单,Docker中得pull命令是用来获取镜像的,执行下面的命令,就会从官方仓库里获取Ubuntu 14.04版本的系统:

docker pull ubuntu:16.04

查看docker本地的image

docker images

显示如下图:

我们把刚刚的镜像运行起来,运行起来的镜像就叫做容器了,容器是可读写的,这样我们就可以在容器里做很多有意思的事情了。run 命令就是将镜像运行起来的,运行:

docker run -it ubuntu:14.04

会发现终端交互的用户名改变了,说明进入了容器的内部了,如下图:

现在在当前状态所有的操作都是对应容器,不会影响本身的系统,我们可以尝试在里面安装软件(nginx):

sudo apt-get install -y nginx

查看nginx的版本信息:

nginx -v

显示如下图(表示安装成功):

注意:如果不成功提示

Unable to locate package nginx

可以尝试先更新下源:

sudo apt-get update

最好我们可尝试退出容器,回到本机环境:

exit

好我们已经学会了如何去获取image和创建对应的container了,那么我么现在来说说,小伙伴在操作的过程中可能会遇到的问题吧:

nginx -v

我们可以看到容器里面有我们刚安装的nginx的信息,可是当我们退出容器后:

exit

在重写运行:

docker run -it ubuntu:14.04

然后再去查看nginx的版本信息

nginx -v

你会发下nginx 并不存在,也许你会觉得很神奇。。。明明安装了nginx,现在却发现他不见了。。。哈哈!如果你觉得神奇,那么,就说明你还不理解上面的image和container 的概念!(我们再来梳理下吧)
退出容器,回到原来的系统,输入:

sudo docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"

结果如图:

这个的意思与我们在在终端输入:

/bin/sh -c "while true; do echo hello world; sleep 1; done"

的作用并没有差异,只是将对应的执行命令的对象转换到容器中执行;

结果如图:

这是一个忠实的 hello world 进程:一个脚本会一直输出 "hello world"

为什么我们看不到的一大堆的 "hello world" ? 而是docker返回的一个很长的字符串:

这个长的字符串叫做容器ID(container ID)。它对于每一个容器来说都是唯一的,所以我们可以使用它。

注意:容器 ID 是有点长并且非常的笨拙,稍后我们会看到一个短点的 ID,某些方面来说它是容器 ID 的简化版。

首先,我们要确保容器正在运行。我们可以使用 docker ps 命令来查看。docker ps 命令可以查询 docker 进程的所有容器。

这里我们看到了以进程模式运行的容器。docker ps 命令会返回一些有用的信息,这里包括一个短的容器

我们也可以停止他:

sudo docker stop containerID

将容器转化为镜像

查看所有的容器

docker ps -a 

结果如图:

启动刚刚容器,并进入容器

docker start containerID

docker attach containerID

回到本地系统打包:

使用 commit 命令用来将容器转化为镜像,运行下面的命令,我们可以讲刚刚的容器转换为镜像:

sudo docker commit -m "Added nginx from ubuntu16.04" -a "xiaozhen" containerID xiaozhen/ubuntu-nginx:v1

其中,-m 参数用来来指定提交的说明信息;-a可以指定用户信息的;containerID 代表的时容器的id;xiaozhen/ubuntu-nginx:v1指定目标镜像的用户名、仓库名和 tag 信息。创建成功后会返回这个镜像的 ID 信息。注意的是,你一定要将 xiaozhen 改为你自己的用户名。因为下文还会用到此用户名。

辛苦了这么久,终于有了自己的镜像了,赶紧装上去爽一爽吧!

sudo docker run -it xiaozhen/ubuntu-nginx:v1

赶紧看看nginx在不在!

nginx -v

结果如图:

存储镜像

我们刚刚已经创建了自己的第一个镜像,尽管它很简单,但这已经非常棒了,现在,我们希望它能够被更多的人使用到,此时,我们就需要将这个镜像上传到镜像仓库,Docker的官方Docker Hub应该是目前最大的Docker镜像中心,所以,我们就将我们的镜像上传到Docker Hub。(请先自行注册)

我们登陆Docker Hub吧:

sudo docker login

输入对应的Username,Password,Email 后,提示Login Success 表示登陆成功

上传自己的镜像

docker push mexiaozhen/ubuntu-nginx:v1

等待上传完毕即可
。。。。