该文章主要介绍Docker容器与其他虚拟化的区别,Docker的文件系统,Docker启动和管理的常用命令,Docker的端口映射,Docker挂载宿主机目录作为卷等命令。
容器与虚拟机管理程序区别
容器与虚拟化管理程序(hypervisor virtualization, HV)的主要区别:管理程序虚拟化通过中间层将一台或多台独立的机器虚拟运行在物理硬件之上,而容器则是直接运行在操作系统内核之上的用户空间。和传统的虚拟化以及半虚拟化相比,容器运行不需要模拟层和管理层,而是使用操作系统的系统调用接口。
Docker的文件系统
Docker采用分层的联合文件系统(Union File System)作为Docker容器的文件系统。
启动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 ps -aq
命名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
登录(附着)到指定容器,这样用户就可以对容器进行操作。
ctrl + q + p
退出登录
创建守护式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来指定目的目录的读写状态。
磁盘使用量
docker system df
cleanup the docker file
docker system prune -f -a
docker system prune --force
导入导出镜像
# 保留原镜像的名称和标签
docker save <IMAGE NAME>:<IMAGE TAG> > save.tar
# 不保留原镜像的基本信息,加载load后需执行tag命令重命名none镜像
docker save <IMAGE ID> > save.tar
docker load < save.tar
docker export <CONTAINER ID> > export.tar
docker import export.tar <IMAGE NAME>:<IMAGE TAG>
update
更新运行中容器的参数:
docker update --restart=always mariadb
docker update --memory-swap -1 mariadb
# 更新 memory 需要先更新 memory-swap
docker update --memory-swap 500M mariadb
docker update --memory 500M mariadb
内存、CPU限制
docker run \
-m 512m \ // Memory limit
--memory-swap=-1 \ // memory + swap, -1 ulimit; if memory > swap then swap = 0
--memory-reservation=256m \ // 保留的最小内存
--memory-swappiness 60 \ // 控制物理内存、与swap分区的比例,默认为60。越小,越倾向于使用物理内存
--cpus=2 \
--cpu-shares=2000 \
--oom-kill-disable=false \ // 禁止容器被 OOM killer 杀掉,与 -m 一起使用
nginx