Docker简介和命令

docker

docker是一个轻量级的虚拟化解决方案。Docker 为各种应用程序提供了 Linux 容器。通常情况下,一个 LAMP 应用汇包含以下三个容器:一个 Web 服务器,一个 PHP-FPM 线程和 MySQL。可以为项目构建一个 docker-compose.yml 文件来配置生成容器的规则和容器的通讯规则,或者在Vagrant 的共享文件夹中,不需要改变应用文件路径,只需要告诉 Docker 到哪里可以找到MySQL等容器即可。

Docker 在多网站要求不同运行环境的情况下尤其趁手,你可以在一台机器上运行多个 Docker 虚拟主机,他们将会运行在完全不同的环境中,使用不同的 Web 服务,并且不管在内存共享、硬盘空间、或者是 CPU 资源上,都能做到高效利用。这些虚拟机同时也指出秒寄重启。

安装 Docker

Docker 用户手册

官方的仓库:非官方的镜像有时候并没有最新安全更新,如果你对镜像有疑问,优先选择 官方的仓库

Docker Website

Docker Hub提供了数以千计的已经构建好的镜像

PHPDocker.io是一个很棒的 PHP 相关的 Docker 资源站点。支持自动生成一个全栈的 LAMP/LEMP 服务器,包含你自定义的 PHP 版本和扩展。

Vagrant

Vagrant 可以让你使用单一的配置信息来部署一套虚拟环境, 最后打包为一个所谓的 box (就是已经部署好环境的虚拟机器). 你可以手动来安装和配置 box, 也可以使用自动部署工具, 如 Puppet 或者 Chef .

自动部署工具可以让你快速部署一套一模一样的环境, 避免了一大堆的手动的命令输入, 并且允许你随时删除和重建一个全新的 box, 虚拟机的管理变得更加简单.

Vagrant 还可以在虚拟机和主机上分享文件夹, 意味着你可以在主机里面编辑代码, 然后在虚拟机里面运行.

下面是一些其他的软件, 可以帮助你更好的使用 Vagrant:

  • Rove: 使用 Chef 自动化安装一些常用的软件, PHP 包含在内.
  • Puphpet: 简单的 Web 图形界面用来生成部署 PHP 环境的 Puppet 脚本, 此项目不仅可以用在开发上, 也可以在生产环境中使用.
  • Protobox: 是一个基于 vagrant 的一个层, 还有 Web 图形界面, 允许你使用一个 YAML 文件来安装和配置虚拟机里面的软件.
  • Phansible: 提供了一个简单的 Web 图形界面, 用来创建 Ansible 自动化部署脚本, 专门为 PHP 项目定制.

docker基本命令

dockerfile: 从无到有的构建镜像;

docker run: 启动容器;

docker-compose: 启动服务,用于编排容器的;

镜像构建:即创建一个镜像,它包含安装运行所需的环境、程序代码等。这个创建过程就是使用 dockerfile 来完成的。

容器启动:容器最终运行起来是通过拉取构建好的镜像,通过一系列运行指令(如端口映射、外部数据挂载、环境变量等)来启动服务的。针对单个容器,这可以通过 docker run 来运行。

如果涉及多个容器的运行(如服务编排)就可以通过 docker-compose 来实现,它可以轻松的将多个容器作为 service 来运行(当然也可仅运行其中的某个),并且提供了 scale (服务扩容) 的功能,把一些命令一次性写在docker-composer.yml文件中,之后每次启动这一整个环境(含3个容器)的时候,你只要敲一个docker-composer up命令就ok了。

docker的基本操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
docker pull ubuntu(镜像名)下载最新版本的ubuntu
docker run -t -i ubuntu /bin/bash 使用下载的镜像创建一个容器,在其中运行bash应用
docker start/stop/restart imageName 启动/停止/重启 指定容器
比如配置nginx后重启nginx docker restart docker_nginx_1

docker ps 检查进程或环境的开启
docker exec -it 容器名(id/name) php -v 查看版本号
docker images 查看本地主机已有的镜像
docker tag oldImageName:oldTagName newImageName:newTagName 给已有镜像添加新镜像标签
docker inspect (image id) 查看镜像信息
docker -v 查看docker版本
docker search imageName 搜索镜像
docker rmi imageName/image id 删除镜像(用镜像名或镜像id)
先删除最下层,后删除顶层,用镜像id会先尝试删除所有指向该镜像的标签,后删除镜像本身
docker rm imageName/image id 删除指定容器,前提:停止容器,保证在非运行状态
docker save -o:fileName imageName/imageId 导出镜像所有历史并归档为指定文件
-o后为归档文件名(.zip/tar都可以)
docker export imageName/imageId 导出镜像,但不会保留历史记录
docker load<ubuntu.tar 载入镜像包ubuntu.tar,import用来载入容器包,两者都会恢复为镜像,docker load不能对载入的镜像重命名,而docker import可以为镜像指定新名称。