docker 安装
前提条件
- 运行64位CPU构架的计算机(目前只能是x86_64和amd64)
- 运行Linux 3.10或更高版本内核
- 内核必须支持一种适合的存储驱动(storage driver)
- 内核必须支持并开启cgroup和命名空间(namespace)功能
Docker团队推荐在Ubuntu、Debian或者RHEL系列(CentOS、Fedora 等)宿主机中部署Docker,这些发行版中直接提供了可安装的软件包。在不同的平台和版本中,软件包命名有细微的差别。对于Windows系统,Windows 7、8可以安装Docker Toolbox,Windows 10 只有Professional或者Enterprise的64位系统可以安装Docker CE。
检查内核的版本
$ uname -a
Linux host.localdomain 4.19.4-1.el7.elrepo.x86_64 #1 SMP Fri Nov 23 08:15:01 EST 2018 x86_64 x86_64 x86_64 GNU/Linux
检查存储驱动,这里使用Device Mapper
ls -l /sys/class/misc/device-mapper
grep device-mapper /proc/devices
如果没有检测到Device Mapper,安装device-mapper并加载dm_mod 内核模块
yum install -y device-mapper
modprobe dm_mod
CentOS 6中,需要先添加EPEL软件包的仓库再安装
rpm –Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
yum -y install docker-io
CentOS 7或更高的版本
yum install -y docker
启动Docker守护进程与开机启动Docker
# CentOS 6中
service docker start
service docker enable
# CentOS 7中
systemctl start docker
systemctl enable docker
检查Docker是否正确安装
$ docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 1.13.1
......
docker 命令
Docker是基于客户端-服务器构架的。它有一个docker程序,既能作为客户端,也可以作为服务器端。作为客户端时,docker程序向Docker守护进程发送请求(如请求返回守护进程自身的信息),然后再对返回的请求结果进行处理。
Docker CLI(docker)
Docker Hub Registry
运行第一个容器
-i 标志保证容器中STDIN 是开启的,-t 标志告诉Docker为要创建的容器分配一个伪tty终端,使用centos镜像为基础,在选择的操作系统上构建自己的镜像。该容器拥有自己的网络、IP地址,以及一个用来和宿主机进行通信的桥接网络接口。当容器创建完毕之后,Docker就会执行容器中的/bin/bash命令,这时就可以看到容器内的shell。
docker run -i -t centos /bin/bash
# 可以使用--name为容器命名
docker run --name first_container -i -t centos /bin/bash
一个合法的容器名称只能包含以下字符:小写字母a~z、大写字母A~Z、数字0~9、下划线、圆点、横线([a-zA-Z0-9_.-])。
很多Docker命令中,都可以用容器的名称来替代容器ID。
查看当前系统中容器的列表
ID、用于创建该容器的镜像、容器最后执行的命令、创建时间以及容器的退出状态、名称等。
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b5c5720db0b3 centos "/bin/bash" 7 hours ago Exited (0) 5 hours ago lucid_noether
启动已经停止运行的容器
docker start lucid_noether
docker start b5c5720db0b3
docker restart lucid_noether
docker restart b5c5720db0b3
附着到容器上
docker attach lucid_noether
创建守护式容器
守护式容器(daemonized container)没有交互式会话,非常适合运行应用程序和服务。
docker run --name daemon_dave -d centos /bin/sh -c "while true; do echo hello world; sleep 1; done"
获取容器的日志
docker logs daemon_dave
# 类似于tail -f
docker logs -f daemon_dave
# 加上时间戳
docker logs -ft daemon_dave
查看守护式容器的进程
docker top daemon_dave
容器的统计信息
docker stats daemon_dave
在容器中运行后台任务
docker exec -d daemon_dave touch /etc/new_config_file
在容器内运行交互命令
docker exec -t -i daemon_dave /bin/bash
停止守护式容器
docker stop命令会向Docker容器进程发送SIGTERM信号。如果想快速停止某个容器,也可以使用docker kill命令来向容器进程发送SIGKILL信号。
docker stop daemon_dave
docker kill daemon_dave
自动重启容器
docker run --restart=always -i -t centos /bin/bash
# 最多重启5次
docker run --restart=on-failure:5 -i -t centos /bin/bash
查看容器
docker inspect daemon_dave
删除容器
docker rm b5c5720db0b3
# 删除所有容器
docker rm `docker ps -a -q`