docker简介
Docker是由PaaS提供商dotCloud在2013年创建的一款开源应用引擎,Docker可以自动将任何应用打包成轻量、可移植、自包涵的容器引擎。开发者构建的应用可以一次构建全平台运行,包括本地开发机器、生产环境、虚拟机和云等。
Docker一个基于LinuX Container(LXC)技术之上构建的Container容器引擎,源代码托管在GitHub上,基于Go语言并遵从Apache2.0协议开源。它提供了一种在安全、可重复的环境中自动部署软件的方式。
Docker在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。
docker优势
对比传统虚拟机总结
特性 | 容器 | 虚拟机 |
---|---|---|
启动 | 秒级 | 分钟级 |
硬盘使用 一般为 | MB | 一般为 GB |
性能 | 接近原生 | 弱于 |
系统支持量 | 单机支持上千个容器 | 一般几十个 |
基本概念
三个基本组件:镜像、容器、仓库
1.镜像
Docker镜像(Image)就是一个只读的模版。镜像可以用来创建Docker容器
2.容器
Docker利用容器(Container)来运行应用
容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台
可以把容器看做是一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
3.仓库
仓库(Repository)是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。
实际上,仓库注册服务器上往往存放着多个仓库,每个仓库又包含了多个镜像,每个镜像有不同的标签(tag)
仓库分为公有(Public)/私有仓库(Private)两种形式
搭建docker
安装docker
ubuntu安装docker
wget -qO- https://get.docker.com/ | sh 或者 curl -sSL https://get.docker.com/ | sh
centos安装docker
yum install docker -y
mac下安装docker: 可以下载安装包安装
启用/停止/重启docker
service docker start/stop/reload
或者
systemctl start/stop/reload docker.service
镜像
docker search [IMAGE NAME]
查询镜像
下载镜像(以安装centos7为例)
docker pull centos:latest
下载完毕,利用docker images查看:
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/centos latest 2d194b392dd1 2 hours ago 195.4 MB
备注:镜像版本下载来源, 可以查看支持的镜像,例如:
修改镜像REPOSITORY/TAG
docker tag 原REPOSITORY:TAG 自义定名:自定义TAG名 #实际上是新建了镜像
docker tag IMAGE ID(镜像id) REPOSITORY:TAG #实际上是新建了镜像
删除镜像
docker rmi REPOSITORY #删除的即:REPOSITORY名称:latest(lastest是默认TAG)
docker rmi REPOSITORY:TAG
docker rmi [IMAGE ID]
#清理所有悬挂(<none>)镜像:
docker image prune #docker image prune -a 清理所有无用镜(慎用)
docker rmi $(docker images -qf "dangling=true")
例如:当存在IMAGE ID相同的多个镜像,删除某一个时:
REPOSITORY TAG IMAGE ID CREATED SIZE
centos/lnmp v1.0.0 1b5426efccfe 35 minutes ago 536 MB
jasonhzy/lnmp v1.0.0 1b5426efccfe 35 minutes ago 536 MB
删除其中一个即:
docker rmi centos/lnmp:v1.0.0
容器
查看运行的容器
docker ps
例如:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
86d91c2b5295 2d194b392dd1 "/bin/bash" 2 minutes ago Up 2 minutes goofy_jennings
查看所有容器(包括停止的)
docker ps -a
例如:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b2273f60a8ff 2d194b392dd1 "/bin/bash" 4 seconds ago Up 4 seconds gigantic_wilson
86d91c2b5295 2d194b392dd1 "/bin/bash" 2 minutes ago Exited (0) 10 seconds ago goofy_jennings
进入容器(前提是容器必须是启动状态)
docker exec -it 86d91c2b5295 /bin/bash #其中字符串为容器ID
#退出命令行,exit或者ctrl + p、ctrl + q来退出容器。
启用容器
docker start [NAME]/[CONTAINER ID]
停用运行中的容器:
docker stop [NAME]/[CONTAINER ID] #停用某一个容器
docker stop $(docker ps -q) #停用全部运行中的容器
删除容器:
docker rm [NAME]/[CONTAINER ID] #不能删除一个正在运行的容器,会报错。需要先停止容器。
docker rm $(docker ps -aq) #删除全部容器, 或者docker container prune
一条命令实现停用并删除容器:
docker stop $(docker ps -q) & docker rm $(docker ps -aq)
其他
# Docker提供了docker system prune,可以用于清理dangling镜像(参考What are Docker <none>:<none> images?)和容器,以及失效的数据卷和网络。
docker system prune
# 这个命令将清理整个系统,并且只会保留真正在使用的镜像,容器,数据卷以及网络
docker system prune -a
清理所有无用数据卷
docker volume prune #docker volume ls查看数据卷
提交镜像 【将容器提交成镜像】
docker commit [选项] <容器ID或容器名> [<仓库名>[:<标签>]]
例如:
# docker commit -a "jasonhzy" -m "centos php nginx" b2273f60a8ff centos/lnmp:v1.0.0
sha256:1b5426efccfe07977227edbe13e48c68e2beefbe4dd8a89ae6081d7c2a0cc40d
各个参数说明:
-m 提交的描述信息
-a 指定镜像作者
b2273f60a8ff 容器ID
centos/lnmp:v1.0.0 指定要创建的目标镜像名
获取完整的容器ID
docker inspect -f '{{.Id}}' [ID/NAME]
例如:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
de07f0a1f26a jasonhzy/php5.6-fpm "php-fpm" 11 hours ago Up 4 minutes 22/tcp, 80/tcp, 0.0.0.0:9100->9000/tcp phpfpm
docker inspect -f '{{.Id}}' de07f0a1f26a(或者phpfpm)
de07f0a1f26af3d3a2bae5546f8b05106fec20bb6293a2e1893a54dd443697b1 #完整的容器ID
容器与主机之间的数据拷贝
1.从主机往容器中拷贝
docker cp <主机文件/文件夹路径> <CONTAINER ID>:<容器内文件/文件夹路径>
例如:复制主机/var/www/html目录下的文件夹test到容器的根目录文件夹tmp下
docker cp /var/www/html/test de07f0a1f26a:/tmp/
docker cp /var/www/html/test de07f0a1f26a:/tmp/xxx #文件夹test复制并重命名为xxx
2.将容器中文件拷往主机
docker cp <CONTAINER ID>:<容器内文件/文件夹路径> <主机文件/文件夹路径>
例如:复制容器/var/www/html下的文件夹test到主机根目录文件夹tmp下
docker cp de07f0a1f26a:/var/www/html/test /tmp/
资源限制与监控
可用于查询镜像(Images)、容器(Containers)和本地卷(Local Volumes)等空间占用情况
docker system df #可以进一步通过-v参数查看空间占用细节
设置CPU、内存之后,动态修改
docker update -m 100m [容器ID/NAME]
查看docker容器使用的资源
docker stats
可实时地显示容器的资源使用(内存, CPU, 网络等),默认情况下,stats 命令会每隔 1 秒钟刷新一次输出的内容直到你按下 ctrl + c
Docker on MacOS
macOS中docker架构与在其它Linux系统中略有不同,在Linux系统中,操作系统本身即是docker容器的宿主机,docker镜像都是直接存储在宿主机本身的文件系统中,
比如我们通过docker info命令可以看到docker的根目录是:
$ docker info | grep "Root Dir"
Docker Root Dir: /var/lib/docker
但是在macOS下,我们直接查看这个目录,其实是根本不存在的。在macOS中安装docker并启动,其实就是启动了一个虚拟机,这个虚拟机的整个内容全部都在一个文件里即:
/Users/Kamus/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
macOS下的screen命令可以进入该台虚拟机:
screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty
备注:1、断开当前会话,会话在后台运行:ctrl+a, d(先按control+a,再按d)
2、重新打开窗口:screen r
3、查看所有后台运行会话:screen ls
4、关闭当前会话,并退出:ctrl+a, k(先按control+a,再按k)
参考资料