前戏
我们使用docker --help来查看下都有哪些命令
View Code
搜索镜像
docker search jenkins # 搜索所有的jenkins的docker镜像
[root@HH ~]# docker search jenkins NAME DESCRIPTION STARS OFFICIAL AUTOMATED jenkins Official Jenkins Docker image 4453 [OK] jenkins/jenkins The leading open source automation server 1706 jenkinsci/blueocean https://jenkins.io/projects/blueocean 442 jenkinsci/jenkins Jenkins Continuous Integration and Delivery … 371 jenkinsci/jnlp-slave A Jenkins slave using JNLP to establish conn… 114 [OK] jenkins/jnlp-slave a Jenkins agent (FKA "slave") using JNLP to … 96 [OK] jenkinsci/slave Base Jenkins slave docker image 57 [OK] jenkinsci/ssh-slave A Jenkins SSH Slave docker image 39 [OK] cloudbees/jenkins-enterprise CloudBees Jenkins Enterprise (Rolling releas… 34 [OK] jenkins/slave base image for a Jenkins Agent, which includ… 32
NAME:名称。DESCRIPTION:描述。STARS:点赞数。OFFICIAL:官方。AUTOMATED:自动化
搜索镜像且过滤是非官方的
docker search --filter "is-official=true" centos
获取镜像
从docker registry获取镜像的命令是docker pull。命令格式是:
docker pull [选项][docker registry地址] 仓库名:标签
docker是把应用程序和其依赖打包在image文件里面,只有通过这个镜像文件才能生成docker容器。
一个image文件可以生成多个容器实例。
可以使用docker pull命令来从仓库获取所需要的镜像,比如下载一个jenkins的镜像
docker pull jenkins # 获取jenkins镜像
[root@HH ~]# docker pull jenkins Using default tag: latest latest: Pulling from library/jenkins 55cbf04beb70: Pull complete 1607093a898c: Pull complete 9a8ea045c926: Pull complete d4eee24d4dac: Pull complete c58988e753d7: Pull complete 794a04897db9: Pull complete 70fcfa476f73: Pull complete 0539c80a02be: Pull complete 54fefc6dcf80: Pull complete 911bc90e47a8: Pull complete 38430d93efed: Pull complete 7e46ccda148a: Pull complete c0cbcb5ac747: Pull complete 35ade7a86a8e: Pull complete aa433a6a56b1: Pull complete 841c1dd38d62: Pull complete b865dcb08714: Pull complete 5a3779030005: Pull complete 12b47c68955c: Pull complete 1322ea3e7bfd: Pull complete Digest: sha256:eeb4850eb65f2d92500e421b430ed1ec58a7ac909e91f518926e02473904f668 Status: Downloaded newer image for jenkins:latest docker.io/library/jenkins:latest
拉取指定版本,用:
docker pull jenkins:1.12 # 获取jenkins1.12的镜像
下载过程可以看出镜像是由多层存储构成的。下载也是一层一层,并非单一的文件。
下载过程中给出每一层的前12位ID。下载结束后会给出sha246的文件一致性校验值
查看docker镜像
docker images # 查看docker镜像
删除docker镜像
如果要移除本地的镜像,可以使用docker rmi命令(在删除镜像之前先用docker rm删除依赖于这个镜像的所有容器)。注意docker rm 命令是移除容器。
docker rmi imageID #删除docker镜像 或者 docker rmi 镜像名字
删除所有的镜像
docker rmi `docker images -aq` #一次性删除所有镜像记录,反单引号
导出docker镜像
有时候我们的镜像,别人也要使用,我们可以把我们的镜像导出给别人使用,使用docker save命令
docker save jenkins > /tmp/jenkins.tar.gz # 导出docker镜像到本地的tmp目录下
导入docker镜像
上面别人给我们导出了他的镜像,那我们就要导入了,删除自己的docker镜像在导入
docker load < /tmp/jenkins.tar.gz # 导入本地镜像到docker镜像库
导入完之后查看docker镜像库
# docker images REPOSITORY TAG IMAGE ID CREATED SIZE jenkins latest cd14cecfdb3a 14 months ago 696MB
启动docker容器
启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped)的容器重新启动。
因为Docker的容器实在太轻量级了,很多时候用户都是随时删除和新创建容器。
新建容器并启动
使用docker run启动容器
[root@HH ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE jenkins latest cd14cecfdb3a 14 months ago 696MB [root@HH ~]# docker run cd14
这样就启动了一个容器,但这样有缺点,我们关掉窗口或者ctrl+c就终止了,所以在启动的时候我们可以加上参数-d,表示后台启动
[root@HH ~]# docker run -d jenkins 也可以通过id启动 4ee88fb080c7718fd68bc5dfbea01e10048df8fd00e461cdec166be594064293
docker run就是运行容器的命令。
参数
- -it : -i 是交互式操作,-t是终端
- -rm : 容器退出后将其删除。也可以不指定参数,手动docker rm,使用-rm可以避免浪费空间。
- bash : 指定用交互式的shell,因此需要bash命令
当利用docker run来创建容器时,Docker在后台运行的标准操作包括
- 检查本地是否存在指定的镜像,不存在就从公有仓库下载
- 利用镜像创建并启动一个容器
- 分配一个文件系统,并在只读的镜像层外面挂在一层 可读写层
- 从宿主机配置的网桥接口桥接一个虚拟 接口到容器中去
- 从地址池配置一个 ip地址给容器
- 执行用户指定的 应用程序
- 执行完毕后容器被终止
查看正在运行的容器
通过docker ps就可以查看运行的容器
[root@HH ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4ee88fb080c7 jenkins "/bin/tini -- /usr/l…" 4 minutes ago Up 4 minutes 8080/tcp, 50000/tcp brave_wilson
后面的NAMES参数是docker给我们生成的,我们也可以自定义,在启动的时候加上--name参数
[root@HH ~]# docker run -d --name MyJenkins jenkins 1603ebfad9aaff6c2ec1bfa6e5300ac711a716d8bea3b0fed37c6bbc38b354b1 [root@HH ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1603ebfad9aa jenkins "/bin/tini -- /usr/l…" 9 seconds ago Up 8 seconds 8080/tcp, 50000/tcp MyJenkins
停止正在运行的容器
通过docker stop 容器id/names都可以停止容器
[root@HH ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4ee88fb080c7 jenkins "/bin/tini -- /usr/l…" 7 minutes ago Up 7 minutes 8080/tcp, 50000/tcp brave_wilson [root@HH ~]# [root@HH ~]# docker stop brave_wilson brave_wilson [root@HH ~]# docker stop 40db 40db
查看所有的容器
docker ps -a 可以查看停止和运行的容器
[root@HH ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 40db302d030b jenkins "/bin/tini -- /usr/l…" 2 minutes ago Exited (143) About a minute ago admiring_morse 4ee88fb080c7 jenkins "/bin/tini -- /usr/l…" 9 minutes ago Exited (143) 2 minutes ago brave_wilson d6e046c9d2ff cd14 "/bin/tini -- /usr/l…" 12 minutes ago Exited (130) 11 minutes ago vigorous_greider
查看容器详细信息
docker inspect 容器名/容器id [root@WC ~]# docker inspect mycentos
结果
删除容器记录
通过docker rm 容器ID来删除
[root@dce88 ~]# docker rm -h Flag shorthand -h has been deprecated, please use --help Usage: docker rm [OPTIONS] CONTAINER [CONTAINER...] Remove one or more containers # 删除一个或多个容器 Options: -f, --force Force the removal of a running container (uses SIGKILL) # 强制删除一个正在运行的容器(使用SIGKILL)。 -l, --link Remove the specified link # 删除指定的链接 -v, --volumes Remove anonymous volumes associated with the container # 删除与容器相关的匿名卷
基本使用
[root@HH ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 40db302d030b jenkins "/bin/tini -- /usr/l…" About an hour ago Exited (143) About an hour ago admiring_morse 4ee88fb080c7 jenkins "/bin/tini -- /usr/l…" 2 hours ago Exited (143) About an hour ago brave_wilson d6e046c9d2ff cd14 "/bin/tini -- /usr/l…" 2 hours ago Exited (130) 2 hours ago vigorous_greider [root@HH ~]# docker rm 40db 删除容器记录 40db [root@HH ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4ee88fb080c7 jenkins "/bin/tini -- /usr/l…" 2 hours ago Exited (143) About an hour ago brave_wilson d6e046c9d2ff cd14 "/bin/tini -- /usr/l…" 2 hours ago Exited (130) 2 hours ago vigorous_greider
通过rm删除的是已停止的,如果是正在运行的会报错
[root@HH ~]# docker rm 00436 Error response from daemon: You cannot remove a running container 00436eade5368cad1f93e9e1ef9c3cc5da3738a0f17a7e1b6e2669e7c379ca54. Stop the container before attempting removal or force remove
可以通过-f参数强制删除
[root@HH ~]# docker rm -f 00436 00436 [root@HH ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3c4cb6a23761 jenkins "/bin/tini -- /usr/l…" 30 minutes ago Up 30 minutes 50000/tcp, 0.0.0.0:8000->8080/tcp myjenkins
一次性删除所有容器记录
docker rm `docker ps -aq` # 一次性删除所有容器id记录 ` ` #反引号是取命令的运行结果
启动终止状态的容器
通过docker start 容器ID来启动
[root@HH ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4ee88fb080c7 jenkins "/bin/tini -- /usr/l…" 2 hours ago Exited (143) About an hour ago brave_wilson d6e046c9d2ff cd14 "/bin/tini -- /usr/l…" 2 hours ago Exited (130) 2 hours ago vigorous_greider [root@HH ~]# docker start 4ee8 启动停止的容器 4ee8 [root@HH ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4ee88fb080c7 jenkins "/bin/tini -- /usr/l…" 2 hours ago Up 3 seconds 8080/tcp, 50000/tcp brave_wilson d6e046c9d2ff cd14 "/bin/tini -- /usr/l…" 2 hours ago Exited (130) 2 hours ago vigorous_greider