- Docker的安装
- Docker的常用命令
- 帮助命令
- 镜像命令
- 容器命令
- 新建并启动容器:docker run 镜像名称 or ID
- 查看当前所有在运行的容器:docker ps
- 退出容器:exit
- 启动容器:docker start 容器名 or 容器ID
- 停止容器:docker stop 容器ID or 容器名
- 强制停止:docker kill 容器ID or 容器名
- 删除容器:docker rm 容器ID or 容器名
- 强制删除:docker rm -f 容器ID or 容器名
- 删除全部:docker rm -f ${docker ps -aq}
- 删除多个:docker ps -aq | xargs docker rm
- 查看容器的运行日志:docker logs 容器ID or 容器名
- 查看容器内的进程:docker top 容器ID or 容器名
- 重新进入退出不停止的容器:docker attach 容器ID
- 从容器中拷贝文件到主机上(持久化):docker cp 容器ID 要拷贝到的主机路径
- docker对外暴露的端口映射到docker内部容器的端口
- docker的commit操作
- Docker容器数据卷:数据的持久化与容器间共享数据
- DockerFile
容器,docker的图标是一个鲸鱼,鲸鱼的背上有很多集装箱,通过这个图标就能解释docker一些原理了。
鲸鱼 ——- docker
鲸鱼畅游在大海中 大海 —— 宿主机os(macos、windows、linux)
集装箱 ——— 容器实例
容器实例来自与镜像模版:镜像模版比做Class,容器实例比做Object,它们之间的关系
Docker的安装
本地
Docker的常用命令
帮助命令
- docker version : 查看版本、内核等一些信息
- docker info : 比version的信息更详细
- docker —help:帮助命令,列出docker的所有命令集与作用说明

镜像命令
docker images
列出本地的镜像
可选属性【options】
-a:all 获取本地的所有镜像-q:只显示镜像的ID-qa:显示所有镜像的ID--digests: 显示摘要信息
搜索镜像:docker search
查询某个镜像的名字,例如:docker search tomcat,是从https://hub.docker.com 这个官方仓库去查询的
可选属性【options】 参考:docker search —help
下载镜像:docker pull
例如:docker pull tomcat,如果不加版本号,那么默认拉取最新版本的tomcat,加版本号的写法:docker pull tomcat:8.5
可选属性【options】 参考:docker pull —help
删除镜像:docker rmi 镜像ID or 镜像名
例如:docker rmi hello-world,如果不加版本号,默认删除本地最新版本的镜像,加版本号的写法:docker rmi hello-world:latest。
删除多个镜像:docker rmi hello-world nginx redis
删除所有镜像:docker rmi ${docker images -qa}
可选属性【options】 参考:docker rmi —help
-f:强制删除,当某个镜像实例正在运行时,常规删除是删除不掉的,需使用强制删除
容器命令
新建并启动容器:docker run 镜像名称 or ID
例如:docker run centos
执行run命令时,首先会在本地镜像里面找是否存在这个竟然,如果存在则直接运行,否则就从远程仓库拉取下来后再运行
可选属性【options】 参考:docker run —help
-i: 以交互模式运行容器,通常与-t搭配使用
-t: 为容器重新分配一个伪终端,通常与-i搭配使用
--name: 为容器起一个新名字
-d: 后台运行容器
-i -t 的使用示例


查看当前所有在运行的容器:docker ps
可选属性【options】 参考:docker ps —help
-l:上一个运行的容器
-a:历史上所有运行过的容器列表
-n number:上number个运行的容器列表 例如:docker ps -n 3
-q:只显示容器ID
退出容器:exit
退出后,容器就不再运行了,又想退出容器,又让容器保持运行,macOS下使用:control+p+q,windows下使用:ctrl+p+q
启动容器:docker start 容器名 or 容器ID
停止容器:docker stop 容器ID or 容器名
强制停止:docker kill 容器ID or 容器名
删除容器:docker rm 容器ID or 容器名
强制删除:docker rm -f 容器ID or 容器名
删除全部:docker rm -f ${docker ps -aq}
删除多个:docker ps -aq | xargs docker rm
查看容器的运行日志:docker logs 容器ID or 容器名
可选属性【options】 参考:docker logs —help
-t: 显示时间
-f: 不停的监听日志
--tail number: 从倒数第几条开始看起
查看容器内的进程:docker top 容器ID or 容器名
重新进入退出不停止的容器:docker attach 容器ID
从容器中拷贝文件到主机上(持久化):docker cp 容器ID 要拷贝到的主机路径

docker对外暴露的端口映射到docker内部容器的端口
我们都知道tomcat的端口默认是8080,我们在docker内部运行了一个tomcat,但这个tomcat是docker内部的,我们没法直接在外面通过浏览器来访问这个tomcat,所以需要使用端口映射的方式来完成这种操作。
指定端口
docker run -it -p 对外暴露的端口:容器实例的端口(tomcat的端口) 镜像ID or 镜像名

随机端口
docker run -it -P 镜像ID or 镜像名
docker的commit操作
所有的镜像都是从远程仓库拉取下来的,拿redis举例说明,将redis拉取下来后,redis的所有配置都是默认的,包括端口号,密码等等,如果我们对其做了一些修改,例如增加了密码。这是属于我们个人或者是团队独特的设置,但是从远程仓库拉取下来的镜像是没有这些配置的,每次都需要我们重新配置,就很麻烦,所以我们可以自己制作一个符合我们自己风格或业务的镜像,并提交到远程仓库,下次再次拉取,就直接拉取我们自己提交的镜像,就不需要再重新设置了。
从pull、commit等命令看出来了,跟git操作很相似,那么自然的,也有push操作了,commit操作只是将我们自己制作的镜像保存在我们本地上,想要提交到远程仓库,还要配合push命令一起才行,先看看commit命令如何使用吧:
docker commit -a=”作者” -m=”提交的注释” 容器的ID 镜像的命名空间/镜像的名称:版本号
Docker容器数据卷:数据的持久化与容器间共享数据
命令:docker run -it -v /主机绝对路径:/容器路径 镜像名
我们在宿主机上执行这条命令之后,就会将宿主机上的我们填写的路径与容器路径绑定起来,就相当于建立了一个桥梁,这两个路径下的文件数据都是共享的,在宿主机上对文件or数据修改添加,在容器内是可见的,同理,容器内对文件数据做添加修改,宿主机内也是可见的。
例如:docker run -it -v /Users/lcz/dockerDataShare:/myData centos
然后在宿主机的/Users/lcz/dockerDataShare目录下新建一个host.txt:touch host.txt
进入到容器内的myData文件夹下查看是否有host.txt文件:
我们在执行docker run -it -v /Users/lcz/dockerDataShare:/myData centos
这条命令时,docker都做了些什么呢,首先会看宿主机与容器内的路径是否存在,如果不存在则会创建出相应的文件夹,然后将两者进行绑定,同时会进入到容器内的终端。
DockerFile
dockerfile是一种用来构建镜像的脚本,由一系列的参数和命令组成的
构建步骤
- 编写dockerfile文件
- docker build
- run
dockerfile的保留字指令

案例:使用dockerfile编写一个自定义的centos,支持vim、ifconfig、登陆时不是根路径
在宿主机中编写dockerfile:
在宿主机中执行命令:docker build -f /Users/lcz/dockerDataShare/mycentosDockerfile . -t mycentos:1.0
当镜像构建成功之后,执行:docker run -it mycentos:1.0
就会看到,登陆到了我们自己的centos的终端,并且路径是myDocker,同时可以使用vim、ifconfig等命令
