Docker
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
Docker特点
(1)上手快。
用户只需要几分钟,就可以把自己的程序“Docker化”。Docker依赖于“写时复制”(copy-on-write)模型,使修改应用程序也非常迅速,可以说达到“随心所致,代码即改”的境界。
随后,就可以创建容器来运行应用程序了。大多数Docker容器只需要不到1秒中即可启动。由于去除了管理程序的开销,Docker容器拥有很高的性能,同时同一台宿主机中也可以运行更多的容器,使用户尽可能的充分利用系统资源。
(2)职责的逻辑分类
使用Docker,开发人员只需要关心容器中运行的应用程序,而运维人员只需要关心如何管理容器。Docker设计的目的就是要加强开发人员写代码的开发环境与应用程序要部署的生产环境一致性。从而降低那种“开发时一切正常,肯定是运维的问题(测试环境都是正常的,上线后出了问题就归结为肯定是运维的问题)”
(3)快速高效的开发生命周期
Docker的目标之一就是缩短代码从开发、测试到部署、上线运行的周期,让你的应用程序具备可移植性,易于构建,并易于协作。(通俗一点说,Docker就像一个盒子,里面可以装很多物件,如果需要这些物件的可以直接将该大盒子拿走,而不需要从该盒子中一件件的取。
(4)鼓励使用面向服务的架构
Docker还鼓励面向服务的体系结构和微服务架构。Docker推荐单个容器只运行一个应用程序或进程,这样就形成了一个分布式的应用程序模型,在这种模型下,应用程序或者服务都可以表示为一系列内部互联的容器,从而使分布式部署应用程序,扩展或调试应用程序都变得非常简单,同时也提高了程序的内省性。(当然,可以在一个容器中运行多个应用程序)
Registry(注册中心)
Docker用Registry来保存用户构建的镜像。Registry分为公共和私有两种。Docker公司运营公共的Registry叫做Docker Hub。用户可以在
Docker Hub注册账号,分享并保存自己的镜像(说明:在Docker Hub下载镜像巨慢,可以自己构建私有的Registry)。
Docker镜像
Docker镜像是由文件系统叠加而成(是一种文件的存储形式)。最底端是一个文件引导系统,即bootfs,这很像典型的Linux/Unix的引导文件
系统。Docker用户几乎永远不会和引导系统有什么交互。实际上,当一个容器启动后,它将会被移动到内存中,而引导文件系统则会被卸载,以留
出更多的内存供磁盘镜像使用。Docker容器启动是需要的一些文件,而这些文件就可以称为Docker镜像。
CentOS7操作Docker常用命令
安装Docker yum install docker
启动docker systemctl start docker
查看状态 systemctl status docker
开机启动 systemctl enable docker
容器操作
列出正在运行容器: docker ps
查看已停止的容器: docker ps -f status=exited
列出所有运行过的容器:docker ps -a
查看最后一次运行的容器 docker ps –l
容器保存为镜像: docker commit -m="描述信息" -a="作者信息" [ID或者名字] 新镜像名称
创建和启动容器:
创建容器常用的参数说明:
-
创建容器命令:docker run
-
-i:表示运行容器
-
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
-
–name :为创建的容器命名。
-
-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
-
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
命令行模式容器示例:docker run -it --name=mycentos centos:7 /bin/bash
退出容器终端: exit
守护进程容器示例: docker run -id --name=mycentos1 centos:7
登录守护式容器: docker exec -it [ID或者名字] /bin/bash
停止正在运行的容器: docker stop [ID或者名字]
启动之前启动过的容器: docker start [ID或者名字]
删除已经停止的容器: docker rm [ID或者名字]
强制删除正在运行的容器: docker rm -f [ID或者名字]
删除所有容器: docker rmdocker ps -a -q
查看容器内日志输出: docker logs [ID或者名字]
查看容器信息,ip : docker inspect [ID或者名字]
文件操作复制文件到容器中: docker cp 文件 容器名称:目标目录
复制容器中的文件到宿主: docker cp 容器名称:文件 宿主系统目标目录
目录挂载
在创建容器的时候将宿主机的某个目录和容器中的某个目录进行映射,这样在修改修改宿主机目录的同时也能修改容器内的目录
docker run -di -v 宿主机目录:容器目录 --name=容器名称 镜像名称:tag --privileged=true
加上 --privileged=true 是因为挂载多级目录的时候操作内部文件会出现权限不足的情况
端口映射
在创建容器的时候将宿主机的端口与容器的端口进行映射,外部通过访问宿主机的端口来访问容器
docker run -di -p 宿主机端口 :容器端口 --name=容器名称 镜像名称:tag
镜像操作
列出所有Docker镜像 docker images
REPOSITORY | TAG | IMAGE ID | CREATED | SIZE
centos | 6.7 | 860c279d2fec | 5 hours ago | 190.6 MB
- REPOSITORY:镜像所在的仓库名称
- TAG:镜像标签
- IMAGE ID:镜像ID
- CREATED:镜像的创建日期(不是获取该镜像的日期)
- SIZE:镜像大小
- 这些镜像都是存储在Docker宿主机的/var/lib/docker目录下
为了区分同一个仓库下的不同镜像,Docker提供了一种称为标签(Tag)的功能。每个镜像在列出来时都带有一个标签,例如12.10、12.04等等。每个标签对组成特定镜像的一些镜像层进行标记(比如,标签12.04就是对所有Ubuntu12.04镜像层的标记)。这种机制使得同一个仓库中可以存储多个镜像。— 版本号
我们在运行同一个仓库中的不同镜像时,可以通过在仓库名后面加上一个冒号和标签名来指定该仓库中的某一具体的镜像,例如docker run --name custom_container_name –i –t docker.io/ubunto:12.04 /bin/bash,表明从镜像Ubuntu:12.04启动一个容器,而这个镜像的操作系统就是Ubuntu:12.04。在构建容器时指定仓库的标签也是一个好习惯。
搜索docker镜像 docker search 镜像名称
拉取docker镜像 docker pull 镜像名称(centos:7)
删除docker镜像 docker rmi 镜像名称+TAG / 镜像Id
删除所有镜像 docker rmi `docker images -q`
创建镜像方式
1.从已经创建的容器中更新镜像,并且提交这个镜像
2.使用 Dockerfile 指令来创建一个新的镜像
拉取镜像: docker pull 镜像名称
设置镜像标签: docker tag 镜像ID 镜像名称:新标签
镜像备份: docker save -o 保存的镜像名称.tar 备份镜像
示例: docker save -o test_mysql.tar test_mysql -o :输入的备份镜像
加载备份镜像: docker load -i 保存的备份镜像 示例: docker load -i teste_mysql.tar -i 输入的文件