14年左右最早接触过docker,当时在ubuntu系统中只简单的运行过几个命令稍略测试过。在红帽RHCA中有DO280课程(红帽DIY 的 docker + k8s + etcd + haproxy组合产品),趁着学习DO280课程的机会 ,做下DOCKer内容的小结,本篇先从docker架构开始说起。
一、docker架构和常用命令
在开始之前,先简单的看下docker的架构图,如下:
docker的常用命令如下:
- 容器生命周期管理 — docker [run|start|stop|restart|kill|rm|pause|unpause]
- 容器操作运维 — docker [ps|inspect|top|attach|events|logs|wait|export|port]
- 容器rootfs命令 — docker [commit|cp|diff]
- 镜像仓库 — docker [login|pull|push|search]
- 本地镜像管理 — docker [images|rmi|tag|build|history|save|import]
- 其他命令 — docker [info|version]
二、命令执行
1、images镜象
这里先从国内的163镜像源下载一个image镜像,查看并运行该镜像,使期产生一个容器:
- [root@localhost docker]# docker pull hub.c.163.com/public/centos:7.2.1511 //从国内163源拉取一个docker镜像
- [root@localhost centos7]# docker images //查看现有镜像
- REPOSITORY TAG IMAGE ID CREATED SIZE
- hub.c.163.com/public/centos 7.2.1511 84352c4ff678 7 months ago 355.7 MB
- [root@localhost centos7]# docker run -i -t 84352c4ff678 /bin/bash //使用刚刚的镜像运行一个容器
- [root@81adc321fd6c /]# ps auxf
- USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
- root 1 1.3 0.0 11768 1876 ? Ss 03:13 0:00 /bin/bash
- root 17 0.0 0.0 35880 1436 ? R+ 03:13 0:00 ps auxf
2、commit image
在该容器内执行了一系统操作后,可以将该container 重新commit 为一个新的image,如下:
- [root@localhost centos7]# docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- dc27fe50bb80 84352c4ff678 “/bin/bash” About an hour ago Up About an hour 22/tcp gloomy_hugle
- [root@localhost centos7]# docker commit -m “some tools installed” dc27fe50bb80 361way/centos:7.2
- sha256:5a3a8963b1e8a575d860ca3e32dbbccab0138dc70da065700eef2a90659eed2c
- [root@localhost centos7]# docker images
- REPOSITORY TAG IMAGE ID CREATED SIZE
- 361way/centos 7.2 5a3a8963b1e8 6 seconds ago 570.5 MB
- hub.c.163.com/public/centos 7.2.1511 84352c4ff678 7 months ago 355.7 MB
请注意,当你反复去commit一个容器的时候,每次都会得到一个新的IMAGE ID,假如后面的repository:tag没有变,通过docker images可以看到,之前提交的那份镜像的repository:tag就会变成none:none,所以尽量避免反复提交。
3、 save、load、tag与images
使用docker save可以将当前的images备份成一个tar文件,方便在其他主机上通过load载入,使用tag可以修改对应的标签。具体用法可以 man docker-save 、man docker-load、man docker-tag进行查看。示例如下:
- [root@localhost ~]# docker images
- REPOSITORY TAG IMAGE ID CREATED SIZE
- 361way/centos 7.2 5a3a8963b1e8 8 minutes ago 570.5 MB
- hub.c.163.com/public/centos 7.2.1511 84352c4ff678 7 months ago 355.7 MB
- [root@localhost ~]#
- [root@localhost ~]#
- [root@localhost ~]# docker save 5a3a8963b1e8 -o 361way.tar
- [root@localhost ~]# docker save 5a3a8963b1e8 > 361way.tar //也可以使用重定向的方向
- [root@localhost ~]# docker save –output=centos-latest.tar 361way/centos:7.2 //也可以tag标签进行save
- [root@localhost ~]# ls
- 361way.tar anaconda–ks.cfg docker–training
- [root@localhost ~]# docker rmi 5a3a8963b1e8
- Untagged: 361way/centos:7.2
- Deleted: sha256:5a3a8963b1e8a575d860ca3e32dbbccab0138dc70da065700eef2a90659eed2c
- Deleted: sha256:bda71a8e48dc76fa11fd32d22687e48bf0a66425e4dde0d5386712bfde6a1b0e
- [root@localhost ~]# docker images
- REPOSITORY TAG IMAGE ID CREATED SIZE
- hub.c.163.com/public/centos 7.2.1511 84352c4ff678 7 months ago 355.7 MB
- [root@localhost ~]# docker load -i 361way.tar.gz
- 1dfed3279435: Loading layer [==================================================>] 220.9 MB/220.9 MB
- Loaded image ID: sha256:5a3a8963b1e8a575d860ca3e32dbbccab0138dc70da065700eef2a90659eed2c
- [root@localhost ~]# docker images //可以看到刚刚导入的images没有tag标签
- REPOSITORY TAG IMAGE ID CREATED SIZE
- <none> <none> 5a3a8963b1e8 10 minutes ago 570.5 MB
- hub.c.163.com/public/centos 7.2.1511 84352c4ff678 7 months ago 355.7 MB
- [root@localhost tmp]# docker tag 5a3a8963b1e8 361way/centos:latest
- [root@localhost ~]# docker images
- REPOSITORY TAG IMAGE ID CREATED SIZE
- 361way/centos latest 5a3a8963b1e8 8 minutes ago 570.5 MB
- hub.c.163.com/public/centos 7.2.1511 84352c4ff678 7 months ago 355.7 MB
4、容器相关命令
容器相关的常用参数有docker run 、ps 、attach、log、commit、rm、inspect 。其中docker run -i -t “image id” 命令,会将一个imager作为容器运行起来;ps用于查看当前活动的所有容器,其经常和其他参数配合使用:
- [root@localhost ~]# docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- dc27fe50bb80 84352c4ff678 “/bin/bash” 4 hours ago Up 10 minutes 22/tcp gloomy_hugle
- [root@localhost ~]# docker ps -a -q
- dc27fe50bb80
- [root@localhost ~]# docker rm -f $(docker ps -a -q) //删除所有容器
attach主要是连接上当前正常在运行的容器;log命令用于打印容器运行中所产生的所有日志;commit用于将一个容器重新提交成images文件;inspect命令用于查看容器或images的属性信息,这里比如提取某个容器的IP信息的命令如下:
- [root@localhost ~]# docker inspect –format='{{.NetworkSettings.IPAddress}}’ dc27fe50bb80
- 172.17.0.2
如果不加任何格式过滤(后面直接跟容器id或images id),会打印出所有的容器或images信息。
docker相关的命令这里先写这么多,因为docker所有的参数命令都可以通过man docker-参数 的方式获取帮助信息 。