在探讨微服务的路上,docker的概念也是经常出现,自己只是粗略的了解docker是个啥,现在是时候认真学习一下docker了,亲自操作一下才能更加深入的理解。
00. docker介绍
docker是开源的一个基于轻量级虚拟化技术的容器引擎项目。它通过分层镜像标准化和内核虚拟化技术,使得应用开发者和运维工程师可以以统一的方式跨平台发布应用,并且以几乎没有额外开销的情况下提供资源隔离的应用运行环境。
docker有三个核心概念:
- 镜像
docker镜像,是一个只读的镜像,位于第1层,它不能被修改或不能保存状态。
一个docker镜像可以构建于另一个docker镜像之上,这种层叠关系可以是多层的。第1层的镜像层我们称之为基础镜像(Base Image),其他层的镜像(除了最顶层)我们称之为父层镜像(Parent Image)。这些镜像继承了他们的父层镜像的所有属性和设置,并在Dockerfile中添加了自己的配置。
镜像是用来创建Docker容器的。一个镜像可以包含一个完整的操作系统环境和用户需要的其它应用程序。在docker hub 里面有大量现成的镜像提供下载。一个镜像可以创建多个容器。 - 容器
容器是使用docker镜像创建的。
它会在所有的镜像层之上增加一个可写层。这个可写层有运行在CPU上的进程,而且有两个不同的状态:运行态(Running)和退出态(Exited)。这就是Docker容器。当我们使用docker run启动容器,Docker容器就进入运行态,当我们停止Docker容器时,它就进入退出态。
当我们有一个正在运行的Docker容器时,从运行态到停止态,我们对它所做的一切变更都会永久地写到容器的文件系统中。要切记,对容器的变更是写入到容器的文件系统的,而不是写入到Docker镜像中的。
我们可以用同一个镜像启动多个Docker容器,这些容器启动后都是活动的,彼此还是相互隔离的。我们对其中一个容器所做的变更只会局限于那个容器本身。 - 仓库
仓库是集中存放镜像文件的地方。
每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。
最大的公开仓库是DockerHub,存放了数量庞大的镜像供用户下载。国内的公开仓库包括DockerPool等,可以提供大陆用户更稳定快速的访问。当然,用户也可以在本地网络内创建一个私有仓库。
01. docker准备
准备一个能够连接互联网的Ubuntu操作系统,Ubuntu是安装docker最好的环境。docker是在ubuntu的环境下开发的,测试也是最充分的环境。
安装docker
这里的安装docker指的是安装docker的后台守护进程,安装docker的方式有两种,在线安装和离线安装。我使用的是在线安装的方式,命令如下:
sudo apt install docker.io
。免sudo使用docker命令
安装完成docker的守护进程之后,默认服务是启动。但是此时我们在使用各种docker命令的时候都需要使用sudo权限,这样显然是有些麻烦的,下面一系列命令帮你免sudo使用docker命令:
sudo groupadd docker
sudo gpasswd -a ${USER} docker
sudo service docker restart
newgrp - docker
配置docker加速器
由于国内用户访问docker hub缓慢的问题,下载镜像速度很慢,需要配置一下加速器,国内很多docker平台都提供了加速器服务,这些服务一般都是免费的。我这里使用的是DaoCloud的加速器服务,配置方法很简单:
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://475d9f5e.m.daocloud.io
使用cat /etc/docker/daemon.json
查看是否配置成功,输出如下为成功:
{"registry-mirrors": ["http://475d9f5e.m.daocloud.io"]}
更详细的配置方法见链接。
02. docker体验
- 查看docker的版本:
docker --version
- 从仓库种搜索一个镜像:
docker search tomcat
- 挑选一个镜像下载:
docker pull tomcat
,这里选的是镜像名为tomcat的镜像。 - 查看拥有的镜像:
docker images
- 删除一个镜像:
docker rmi <image id>
- 创建一个tomcat的docker容器:
docker run -p 8080:8080 tomcat
,这里的-p
参数是映射主机端口和容器端口。 - 查看正在运行的容器:
docker ps
- 查看所有的容器:
docker ps -a
- 停止一个正在运行的容器:
docker stop 容器名(容器id前四位)
- 启动一个已创建的容器:
docker start 容器名(容器id前四位)
- 重启一个正在运行的容器:
docker restart 容器名(容器id前四位)
- 删除一个已创建的容器:
docker rm 容器名(容器id前四位)
- 一个复杂点的命令:
docker run -i -t --name hello_tomcat -p 8081:8080 tomcat /bin/bash
,其中-i -t
是进入到容器的交互式的窗口,--name
为容器指定一个名字。
到这里为止,就简单体验了一把docker容器的基本操作。