该文章主要介绍Docker容器与其他虚拟化的区别,Docker的文件系统,Docker启动和管理的常用命令,Docker的端口映射,Docker挂载宿主机目录作为卷等命令。

容器与虚拟机管理程序区别

容器与虚拟化管理程序(hypervisor virtualization, HV)的主要区别:管理程序虚拟化通过中间层将一台或多台独立的机器虚拟运行在物理硬件之上,而容器则是直接运行在操作系统内核之上的用户空间。和传统的虚拟化以及半虚拟化相比,容器运行不需要模拟层和管理层,而是使用操作系统的系统调用接口。

Docker的文件系统

Docker采用分层的联合文件系统(Union File System)作为Docker容器的文件系统。

安装Docker

参照使用脚本安装Docker: https://xiexianbin.cn/2015/07/25/Docker-install-script/

启动Docker进程

service docker start/stop

查看Docker

[root@xiexianbin ~]# docker info
Containers: 2
Images: 37
Storage Driver: devicemapper
 Pool Name: docker-253:0-921930-pool
 Pool Blocksize: 65.54 kB
 Backing Filesystem: extfs
 Data file: /dev/loop0
 Metadata file: /dev/loop1
 Data Space Used: 2.387 GB
 Data Space Total: 107.4 GB
 Metadata Space Used: 3.162 MB
 Metadata Space Total: 2.147 GB
 Udev Sync Supported: true
 Data loop file: /var/lib/docker/devicemapper/devicemapper/data
 Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata
 Library Version: 1.02.89-RHEL6 (2014-09-01)
Execution Driver: native-0.2
Kernel Version: 2.6.32-504.30.3.el6.x86_64
Operating System: <unknown>
CPUs: 1
Total Memory: 1742.4 MiB
Name: www.xiexianbin.com
ID: ****
Username: xiexianbin
Registry: [https://index.docker.io/v1/]

启动Docker容器

sudo docker run -i -t centos /bin/bash

docker run指定-i和-t两个命令行参数。 -i 标识保证容器中STDIN是开启的,持久的标准输入在Docker的交互式中占有重要地位。 -t 使Docker为要创建的容器分配一个伪tty终端,为新创建的容器提供一个交互式shell。

查看Docker容器

sudo docker ps -a

docker ps列出所有运行的docker容器,-a列出当前系统中的所有容器。

命名Docker容器

sudo docker run --name xiexianbin -i -t centos /bin/bash

–name参数指定新创建的容器名称为xiexianbin

登录Docker容器

sudo service docker attach xiexianbin

sudo service docker attach container_id

登录(附着)到指定容器,这样用户就可以对容器进行操作。

创建守护式Docker容器

sudo docker run --name xiexianbin -d centos /bin/bash -c "while true; do echo ok; sleep 1; done"

-d 启动守护式容器,让Docker容器以守护式进程的方式启动一个容器。该方式适合运行应用程序或服务。

查看容器日志

sudo docker logs -f xiexianbin

sudo docker logs -f container_id

-f 该参数用来监控Docker日志,与tail -f (或tailf)命令类似。

查看Docker容器进程

sudo docker top xiexianbin

sudo docker top container_id

在Docker容器内运行进程

sudo docker exec -d xiexianbin touch /root/a.txt

停止守护式Docker容器

sudo docker stop xiexianbin

sudo docker stop container_id

重启Docker容器

sudo docker restart xiexianbin

sudo docker restart container_id

创建自启动Docker容器

sudo docker run --restart=always -d --name xiexianbin -i -t centos /bin/bash

如果容器运行出现某种错误而导致容器停止运行,可以通过–restart=always标志让Docker自动重新启动容器。

–restart=on-failure:5 当容器退出时,Docker会自动重启容器,最多重启5次。

查看容器信息

sudo docker inspect xiexianbin

sudo docker inspect container_id

删除Docker容器

sudo docker rm xiexianbin

sudo docker rm container_id

删除前docker stop container_id停止容器。

为Docker容器做端口映射

sudo docker run -i -t -p 80:8080 centos /bin/bash

-p参数在启动容器时将宿主机的80端口映射到Docker容器的8080端口。

为Docker容器挂载宿主机的目录作为卷

sudo docker run -i -t -v /var/www/website_1:/var/www/html/website:rw centos /bin/bash

-v 参数将宿主机的目录作为卷挂载到Docker容器,在目录的后边加rw或者ro来指定目的目录的读写状态。

完毕。