Docker 安装
Docker 中的三个概念:镜像,容器,仓库
- 镜像(image):Docker 镜像就是一个只读的模板,镜像可以用来创建 Docker 容器。Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。
镜像是一种文件结构。Dockerfile中的每条命令都会在文件系统中创建一个新的层次结构,文件系统在这些层次上构建起来,镜像就构建于这些联合的文件系统之上。Docker官方网站专门有一个页面来存储所有可用的镜像,网址是:index.docker.io。 - 容器( Container):容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简易版的 Linux 环境,Docker 利用容器来运行应用。镜像是只读的,容器在启动的时候创建一层可写层作为最上层。
- 仓库:仓库是集中存放镜像文件的场所,仓库注册服务器(Registry)上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。目前,最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。
Docker仓库用来保存我们的images,当我们创建了自己的image之后我们就可以使用push命令将它上传到公有或者私有仓库,这样下次要在另外一台机器上使用这个image时候,只需要从仓库上pull下来就可以了。Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务。
一.安装 Docker
本次实验环境:腾讯云服务器 CentOS 6.7 x86_64
前提条件:
Docker运行对内核要求比较高,因此一般建议直接在Ubuntu这样的平台运行。但作为一个容器标准,Docker也是支持其他如CentOS, Mac OS X, Windows等平台。目前Docker支持以下版本CentOS:
- CentOS 7(64位)
- CentOS 6.5(64位)及以后
- 在运行CentOS 6.5及以后版本时,需要内核版本>=2.6.32-431,因为这些内核包含了运行Docker的一些特定修改。
Docker默认使用AUFS作为存储驱动,但是AUFS并没有被包括在Linux的主线内核中。CentOS中可以使用Device Mapper作为存储驱动,这是在2.6.9内核版本引入的新功能。我们需要先确认是否启用该功能:
CentOS 7
Docker RPM包已经包含在CentOS-Extra仓库中,所以我们可以直接使用Yum安装:
# yum install docker
CentOS 6.6
需要注意的是,CentOS6.6中,已经有一个同名docker的可执行系统程序包。所以Docker RPM包命名为docker-io,我们先卸掉docker。
# yum -y remove docker
第三步 Install Docker-IO
# yum -y install docker-io
这样完成了Docker的安装。
# /etc/init.d/docker start #启动docker
# docker info #查看 docker 基本信息
二. Docker 基本操作
# docker run -d --name mynginx nginx #启动nginx镜像,没有会自动pull
# docker stop bfd094233f96 #停止一个容器,根据容器 id 进行删除
# docker rm bfd094233f96 #删除一个容器
# docker attach d20f3dc6cd92 #进入一个正在运行的容器
-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上,
-i 则让容器的标准输入保持打开。
–name 使用一个自定义的名字
此命令不太好用,建议使用以下命令进入容器:
[root@localhost docker] docker inspect --format "{{.State.Pid}}" mynginx #获取容器pid 19769
[root@localhost docker] nsenter --target 19769 --mount --uts --ipc --net --pid #进入容器(推荐方法)
docker run -d -p 91:80 --name mynginx2 nginx # -p 指定端口映射,将80映射为host的91
存储镜像:
# docker save -o ubuntu_14.04.tar ubuntu:14.04
载入镜像:
# docker load < ubuntu_14.04.tar 或者使用
# cat ubuntu.tar | docker import - test/ubuntu:v1.0
移除本地镜像:
# docker rmi training/sinatra
清理所有未打过标签的本地镜像:
# docker rmi $(docker images -q -f "dangling=true")
其中 -q 和 -f 是 quiet,–filter 的缩写, 完整的命令其实可以写着下面这样,是不是更容易理解一点?
# docker rmi $(docker images --quiet --filter "dangling=true")
注: 容器是否会长久运行,是和docker run指定的命令有关,和 -d 参数无关。
要获取容器的输出信息,可以通过 docker logs 命令。
# docker logs [container ID or NAMES]
删除容器:
# docker rm 默认并不会删除运行中的容器
有关容器和镜像的底层信息:
# docker inspect container/image
可以查看:
容器实例的IP地址
端口绑定列表
特定端口映射的搜索
收集配置的详细信息
从容器内复制文件到指定的路径上:
# docker cp container:path hostpath
使用Dockerfile来构建镜像:
# docker build [options] PATH | URL
–rm=true表示构建成功后,移除所有中间容器
–no-cache=false表示在构建过程中不使用缓存
Docker 使用
查找Docker镜像
安装Docker镜像的第一步,是查找你需要的Docker镜像列表,键入:
docker search mysql
如果出现权限问题,请在最前面加入sudo:
sudo docker search mysql
查询返回一个列表:
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relati... 2981 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Crea... 194 [OK]
centurylink/mysql Image containing mysql. Optimized to be li... 46 [OK]
sameersbn/mysql 36 [OK]
jdeathe/centos-ssh-mysql CentOS-6 6.8 x86_64 / MySQL. 8 [OK]
appcontainers/mysql Centos/Debian Based Customizable MySQL Con... 8 [OK]
marvambass/mysql MySQL Server based on Ubuntu 14.04 6 [OK]
drupaldocker/mysql MySQL for Drupal 2 [OK]
azukiapp/mysql Docker image to run MySQL by Azuki - http:... 2 [OK]
yfix/mysql Yfix docker built mysql 2 [OK]
alterway/mysql Docker Mysql 2 [OK]
frodenas/mysql A Docker Image for MySQL 2 [OK]
andreluiznsilva/mysql A extension of the offical MySQL container... 1 [OK]
phpmentors/mysql MySQL server image 1 [OK]
sin30/mysql MySQL images with my own config files. 1 [OK]
tozd/mysql MySQL (MariaDB fork) Docker image. 0 [OK]
nanobox/mysql MySQL service for nanobox.io 0 [OK]
...
列表包含了所有的MySQL镜像,其中:
- NAME字段是镜像的名字
- DESCRIPTION字段是对镜像的简单描述
- STARS数量反映了用户的喜爱程度
- OFFICIAL字段如果是OK,代表了这个镜像是官方提供的,可以信任
- AUTOMATED字段如果是OK,代表了这个镜像是基于公开的脚本制作的,可以信任
- 如果OFFICIAL和AUTOMATED都不为OK,那使用的时候需要额外小心了,这类镜像中可能包含恶意软件,不过对于个人非敏感数据还是可以使用的。
此外,你也可以通过访问https://hub.docker.com/,通过Web来搜索你需要的镜像。
下载Docker镜像
当你找到合适的镜像后,可以通过:
docker pull [REGISTRYHOST/][USERNAME/]NAME[:TAG]
来进行下载,方括号中的是可选项:
docker pull mysql
导出Docker镜像
你可以将本地镜像导出为文件,如我们刚才下载的MySQL镜像:
docker save -o mysql.tar mysql
将我们的MySQL镜像导出为mysql.tar.
导入Docker镜像
有导出就有导入,导入的命令是:
docker load -i mysql.tar
将我们的MySQL镜像导入。
删除Docker镜像
为了节约磁盘空间,有时候我们需要删除不需要的Docker镜像文件,首先查看我们拥有的Docker镜像文件:
docker images
然后删除不需要的镜像,释放磁盘空间:
docker rmi [REGISTRYHOST/][USERNAME/]NAME[:TAG]
通过Docker File编译Docker镜像
制作Docker File我们放在后面再讲,假设你有一个名为Dockerfile的文件,编译制作Docker的命令是:
docker build -f Dockerfile .
成功后将在当前路径下制作出一个Docker镜像文件。