一、Linux上安装docker
##首先选择安装docker的版本。当前有两个版本可供选择:社区版(Communtiy Edition,CE)和企业版(Enerprise Edition,EE)。
Docker CE是免费的,并且是接下来实例中将要使用的版本。Docker EE包含Docker CE中的全部功能,还包括了商业支持以及与其他Docker产品的集成,比如Docker可信镜像库和通用控制面板。
下面的例子使用wget命令来运行一个Shell脚本,完成Docker CE的安装。更多其他再Linux上安装Docker的方式,可以打开Docker主页面,单击页面中Get Started 按钮来获取。
注:在开始下面步骤之前,要确认系统升级到最新的包,并且打了相应的安全补丁。
(1)在Linux机器上打开一个新的Shell
(2)使用wget从https://get.docker.com获取并运行Docker安装脚本,然后采用Shell中管道(pipe)的方式来执行脚本。
wget -q https://get.docker.com/ | sh
(3)最好通过非root用户来使用Docker。这是需要添加非root用户到本地Docker Unix组当中。下面的命令展示了如何创建用户并添加到用户组docker中,以及如何确认操作时否执行成功。
useradd npoulton
groupadd docker
usermon -aG docker npoulton
cat /etc/group |grep docker #查看是否成功
(4) 启动docker并查看版本信息等
systemctl start docker #启动docker
docker --version #查看docker版本信息
docker image ls #查看docker镜像
二、docker自动设置direct-lvm 和存储驱动的选择
下面的步骤会将docker配置存储驱动为Device Mapper , 并使用direct-lvm模式。
(1)将下面的存储驱动配置添加到/etc/docker/daemon.json当中
{
"storage-driver": "devicemapper",
"storage-opts":[
"dm.directlvm_device=/dev/vda", # 设置了块设备的位置。为了存储的最佳性能以及可用性,块设备应当位于高性能存储设备(如本地SSD)或者外部RAID存储阵列之上。
"dm.thinp_percent=95", # 设置了镜像和容器允许使用的最大存储空间占比,默认是95%。
"dm.thinp_metapercent=1", # 设置了元数据存储(MetaData Storage)允许使用的存储空间大小,默认是1%.
"dm.thinp_autoextend_threshold=80", # 设置了LVM自动扩展精简池的阈值,默认是80%。
"dm.thinp_autoextend_percent=20", # 表示当触发精简池(thin pool)自动扩容机制的时候,扩容的大小应当占现有空间的比例。
"dm.directlvm_device_force=false" # 允许用户决定是否将快设备格式化为新的文件系统
]
}
(2)重启docker
systemctl restart docker
三、Docker镜像
将Docker镜像理解为一个包含了OS文件系统和应用的对象会很有帮助。如果实际操作过,就会认为与虚拟机模板类似。虚拟机模板 本质上是处于关机状态的虚拟机。在Docker世界中,镜像实际上等价于未运行的容器。如果是一位开发者,可以将镜像比作类(Class)。
在docker主机上运行docker image ls命令可以查看本机上docker的所有镜像
如果是刚完成Docker安装的主机,或者Play With Docker,那么Docker主机中应当没有镜像,命令输出内荣显示都是空白的。
在Docker主机上获取镜像的操作被称为拉取(pulling)。如果使用Linux,那么会拉取ubuntu:latest镜像;如果使用windows,则会拉取microsoft/powershell:nanoserver镜像。
再次运行docker image ls命令来查看刚刚拉取的镜像
刚才拉取的ubuntu镜像有一个精简版Ubuntu Linux文件系统,其中包含了带有PowerShellde的Windows Nano Server操作系统。如果拉取了如nginx或者microsoft/IIs这样的应用容器,会得到一个包含操作系统的镜像,并且再镜像中还包括运行Nginx或iis所需的代码。重要的是,Docker的每个镜像都有自己的唯一ID。 用户可以通过引用镜像的ID或名称来使用镜像。如果用户选择使用镜像ID,通常只需要输入ID开头的几个字符即可——因为ID是唯一的,Docker知道用户想引用的具体镜像是那个。
四、Docker容器
到目前为止拉取镜像就已经完成了,可以使用docker container run 命令从镜像来启动容器。在linux中启动容器的命令如下。
docker container run 告诉Docker daemon启动新的容器。其中-it 参数告诉Docker开启容器的交互模式并当前的Shell连接到容器终端。接下来,命令告诉Docker,用户想基于ubuntu:latest镜像启动容器(如果用户使用Windows,则是基于microsoft/powershell:nanoserver镜像)。最后,命令告诉Docker,用户想要再容器内部运行那个进程。对于Linux示例来说运行Bash shell,对于Windows示例来说则是运行PowerShell。
在容器内部运行ps命令查看当前正在运行的全不进程。
Linux示例如下。
Linux容器中仅包含两个进程。
PID 1:代表/bin/bash进程,该进程是通过docker container run命令来通知容器运行的。
PID 9:代表ps -elf进程,查看当前运行中进程所使用的命令/程序。
命令输出展示的ps -elf 进程存在一定的误导,因为这个程序再ps命令退出后就结束了。这意味着容器内长期运行的进程其实只有/bin/bash。可以通过docker container ls 命令查看系统内全部处于运行状态的容器。
五、连接到运行中的容器
执行docker container exec命令可以将shell连接到一个运行中的容器终端。因为之前示例中的容器扔再运行,所以可以创建到该容器的新连接。
docker container exec -it nostalgic_yalow bash
通过docker container stop 和docker container rm 命令来停止并杀死容器。切记需要将示例中的名称/ID替换为自及对应的名称和ID。
最后通过docker container ls 命令,并指定-a参数来确认容器已经被成功删除。添加-a的作用是让docker列出所有的容器,甚至包括那些停止状态的。