14年左右最早接触过docker,当时在ubuntu系统中只简单的运行过几个命令稍略测试过。在红帽RHCA中有DO280课程(红帽DIY 的 docker + k8s + etcd + haproxy组合产品),趁着学习DO280课程的机会 ,做下DOCKer内容的小结,本篇先从docker架构开始说起。

一、docker架构和常用命令

在开始之前,先简单的看下docker的架构图,如下:

docker

docker的常用命令如下

  1. 容器生命周期管理 docker [run|start|stop|restart|kill|rm|pause|unpause]
  2. 容器操作运维 docker [ps|inspect|top|attach|events|logs|wait|export|port]
  3. 容器rootfs命令 docker [commit|cp|diff]
  4. 镜像仓库 docker [login|pull|push|search]
  5. 本地镜像管理 docker [images|rmi|tag|build|history|save|import]
  6. 其他命令 docker [info|version]

二、命令执行

1、images镜象

这里先从国内的163镜像源下载一个image镜像,查看并运行该镜像,使期产生一个容器:

  1. [root@localhost docker]# docker pull hub.c.163.com/public/centos:7.2.1511 //从国内163源拉取一个docker镜像
  2. [root@localhost centos7]# docker images //查看现有镜像
  3. REPOSITORY TAG IMAGE ID CREATED SIZE
  4. hub.c.163.com/public/centos 7.2.1511 84352c4ff678 7 months ago 355.7 MB
  5. [root@localhost centos7]# docker run -i -t 84352c4ff678 /bin/bash //使用刚刚的镜像运行一个容器
  6. [root@81adc321fd6c /]# ps auxf
  7. USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
  8. root 1 1.3 0.0 11768 1876 ? Ss 03:13 0:00 /bin/bash
  9. root 17 0.0 0.0 35880 1436 ? R+ 03:13 0:00 ps auxf

2、commit image

在该容器内执行了一系统操作后,可以将该container 重新commit 为一个新的image,如下:

  1. [root@localhost centos7]# docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. dc27fe50bb80 84352c4ff678 “/bin/bash” About an hour ago Up About an hour 22/tcp gloomy_hugle
  4. [root@localhost centos7]# docker commit -m “some tools installed” dc27fe50bb80 361way/centos:7.2
  5. sha256:5a3a8963b1e8a575d860ca3e32dbbccab0138dc70da065700eef2a90659eed2c
  6. [root@localhost centos7]# docker images
  7. REPOSITORY TAG IMAGE ID CREATED SIZE
  8. 361way/centos 7.2 5a3a8963b1e8 6 seconds ago 570.5 MB
  9. 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进行查看。示例如下:

  1. [root@localhost ~]# docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. 361way/centos 7.2 5a3a8963b1e8 8 minutes ago 570.5 MB
  4. hub.c.163.com/public/centos 7.2.1511 84352c4ff678 7 months ago 355.7 MB
  5. [root@localhost ~]#
  6. [root@localhost ~]#
  7. [root@localhost ~]# docker save 5a3a8963b1e8 -o 361way.tar
  8. [root@localhost ~]# docker save 5a3a8963b1e8 > 361way.tar //也可以使用重定向的方向
  9. [root@localhost ~]# docker save –output=centos-latest.tar 361way/centos:7.2 //也可以tag标签进行save
  10. [root@localhost ~]# ls
  11. 361way.tar anacondaks.cfg dockertraining
  12. [root@localhost ~]# docker rmi 5a3a8963b1e8
  13. Untagged: 361way/centos:7.2
  14. Deleted: sha256:5a3a8963b1e8a575d860ca3e32dbbccab0138dc70da065700eef2a90659eed2c
  15. Deleted: sha256:bda71a8e48dc76fa11fd32d22687e48bf0a66425e4dde0d5386712bfde6a1b0e
  16. [root@localhost ~]# docker images
  17. REPOSITORY TAG IMAGE ID CREATED SIZE
  18. hub.c.163.com/public/centos 7.2.1511 84352c4ff678 7 months ago 355.7 MB
  19. [root@localhost ~]# docker load -i 361way.tar.gz
  20. 1dfed3279435: Loading layer [==================================================>] 220.9 MB/220.9 MB
  21. Loaded image ID: sha256:5a3a8963b1e8a575d860ca3e32dbbccab0138dc70da065700eef2a90659eed2c
  22. [root@localhost ~]# docker images //可以看到刚刚导入的images没有tag标签
  23. REPOSITORY TAG IMAGE ID CREATED SIZE
  24. <none> <none> 5a3a8963b1e8 10 minutes ago 570.5 MB
  25. hub.c.163.com/public/centos 7.2.1511 84352c4ff678 7 months ago 355.7 MB
  26. [root@localhost tmp]# docker tag 5a3a8963b1e8 361way/centos:latest
  27. [root@localhost ~]# docker images
  28. REPOSITORY TAG IMAGE ID CREATED SIZE
  29. 361way/centos latest 5a3a8963b1e8 8 minutes ago 570.5 MB
  30. 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用于查看当前活动的所有容器,其经常和其他参数配合使用:

  1. [root@localhost ~]# docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. dc27fe50bb80 84352c4ff678 “/bin/bash” 4 hours ago Up 10 minutes 22/tcp gloomy_hugle
  4. [root@localhost ~]# docker ps -a -q
  5. dc27fe50bb80
  6. [root@localhost ~]# docker rm -f $(docker ps -a -q) //删除所有容器

attach主要是连接上当前正常在运行的容器;log命令用于打印容器运行中所产生的所有日志;commit用于将一个容器重新提交成images文件;inspect命令用于查看容器或images的属性信息,这里比如提取某个容器的IP信息的命令如下:

  1. [root@localhost ~]# docker inspect –format='{{.NetworkSettings.IPAddress}}’ dc27fe50bb80
  2. 172.17.0.2

如果不加任何格式过滤(后面直接跟容器id或images id),会打印出所有的容器或images信息。

docker相关的命令这里先写这么多,因为docker所有的参数命令都可以通过man docker-参数 的方式获取帮助信息 。

Leave a Reply

Your email address will not be published. Required fields are marked *