Docker基础指南

Docker介绍

Docker作为一个容器运行,运行一个unix进程与服务器隔离提供里强大的安全保障,你的软件可以重复地运行在任何地方,因为它的容器包含了所有的环境依赖关系!

Docker.io 是轻量级的“容器引擎+映像仓库”,在LXC(linux轻量级容器)的基础上构建,可以运行任何应用程序。
docker.io的核心层由以下几个部分组成:

  • 可执行程序,“/usr/bin/docker”
  • docker.io网站上有一系列创建好的操作系统和应用程序映像
  • AUFS(另一个统一文件系统)来实现文件系统的快照,文件变化,控制只读或读写的需求。
  • LXC(Linux轻量级容器)
  • Cgroups(各种资源和命名空间的管理)

安装

以下以Linux版本:CentOS release 6.5 (Final),管理员用户运行

1
cat /etc/centos-release

安装docker-io

1
yum -y install docker-io --enablerepo=epel

安装成功后,运行命令得到相关的介绍

1
2
docker
docker -v

安装的版本是:Docker version 1.0.0, build 63fe64c/1.0.0

配置服务运行和自动启动

1
2
service docker start
chkconfig docker on

需要拉取images,拉取基本的CentOS的images

1
docker pull centos

拉取完成后,运行命令查看images

1
docker images

得到列表显示

1
2
3
4
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos              centos7             1a7dc42f78ba        7 days ago          236.4 MB
centos              latest              1a7dc42f78ba        7 days ago          236.4 MB
centos              centos6             cd934e0010d5        8 days ago          206.9 MB

基础命令列表,显示image的版本,运行image中的top命令,搜索images

1
2
3
docker run centos:centos7 cat /etc/centos-release
docker run centos:centos7 /usr/bin/top
docker search centos

进入image中的命令模式,使用exit命令退出

1
docker run -i -t centos:centos7 /bin/bash

开启工作进程

开启一个长时间工作进程

1
JOB=$(docker run -d centos:centos7 /bin/sh -c "while true; do echo Hello world; sleep 1; done")

查看这个工作进程的日志

1
docker logs $JOB

杀死进程,也可以先用后一条命名查看容器id,通过4位+的容器id来kill。

1
docker kill $JOB

查看所有运行中的容器

1
docker ps

制作自己的image

这里以制作带nc命令的centos7举例,后边这个images有用,进入某个版本的image的控制台

1
docker run -i -t centos:centos7 /bin/bash

在image中安装nc,并确认安装成功

1
yum -y install nc

之后退出这个控制台,查找这个image的Container ID:

1
docker ps -a

制作image并命名为centos7_nc,其中dbb52为上一个命令中得到的ID前四位

1
docker commit dbb52 centos7_nc

docker images可以确认image已经成功,然后确认这个image中有nc命令

1
docker run centos7_nc /bin/nc

为服务绑定一个TCP端口

为容器绑定4444端口,并告诉网络监听4444

1
JOB=$(docker run -d -p 4444 centos7_nc /bin/nc -l 4444)

查看容器用的公共端口,这个是对外的端口

1
PORT=$(docker port $JOB 4444 | awk -F: '{ print $2 }')

连接公共端口

1
echo hello world | nc 127.0.0.1 $PORT

确认网络连接是否工作,程序运行ok

1
docker logs $JOB

END.