多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
输入 docker 可以查看Docker的命令用法,输入 docker COMMAND ­­help 查看指定命令的详细用法 ## 1、镜像操作 | 操作 | 命令 | 说明 | | --- | --- | --- | | 查找 | docker search 关键字 | 可以在Docker Hub网站查看镜像的详细信息,如镜像的tag标签 | | 抽取 | docker pull 镜像名:tag | :tag表示软件的版本,如果不指定默认是latest | | 列表 | docker images | 查看所有本地镜像 | | 获取元信息 | docker inspect 镜像id | 获取镜像的元信息,详细信息 | | 删除 | docker rmi ­f 镜像id或镜像名:tag | 删除指定的本地镜像,­f表示强制删除 | ## 2、容器操作 | 操作 | 命令 | 说明 | | --- | --- | --- | | 运行 | docker run ­­name 容器名 ­i ­t ­p 主机端口:容器端口 ­d ­v 主机目录:容器目录:ro 镜 像id或镜像名称:tag | ­­name 指定容器名,名称自定义,如果不指定会自动命名; ­i 以交互模式运 行,即以交互模式运行容器;­t 分配一个伪终端,即命令行,通常组合使用­it ;­p 指定端口映射,将主机端口映射到容器内的端口;­d 表示后台运行,即守 护式运行容器;­v 指定挂载主机目录到容器目录(主机目录中的内容发生变化会自动同步到容器目录),默认在容器中为rw读写模式,ro表示 只读 | | 列表 | docker ps ­a ­q | 查看正在运行的容器,­a表示显示所有容器,­q表示只显示容器id | | 启动 | docker start 容器id或容器名称 | 启动容器 | | 停止 | docker stop 容器id或容器名称 | 停止正在运行的容器 | | 删除 | docker rm ­-f 容器id或容器名称 | 删除容器,-­f表示强制删除 | | 日志 | docker logs 容器id或容器名称 | 获取容器的日志 | | 在容器中执行 | docker exec ­-it 容器id或容器名称 /bin/bash | 进入正在运行的容器中并开启一个交互模式的终端,可以在容器中执行操作 | | 拷贝文件 | docker cp 主机中的文件路径容器id或容器名称:容器路径;docker cp 容器id或容器名称:容器中的文件路径主机路径 | 将文件中的文件拷贝到容器中;将容器中的文件拷贝到主机中 | | 获取元信息 | docker inspect 容器id | 获取容器的元信息 | #### 以CentOS为例: ``` docker search centos docker pull centos docker run ­­--name mycentos ­-it centos:latest # 根据centos:latest镜像运行容器,并以交互模式 进入容器中 # 实际上是在Docker容器中运行一个精简版的CentOS系统 exit # 退出并关闭容器 docker ps ­-a docker start mycentos docker stop mycentos docker rm mycentos docker rm ­-f $(docker ps ­-aq) # 强制删除所有容器 ``` 注:Docker容器内实际上是运行着一个精简版的Linux系统 #### 以tomcat为例: ``` # 示例1:基本用法 docker search tomcat docker pull tomcat docker run ­­--name mytomcat ­-p 8888:8080 -­d tomcat # 测试:http://宿主机地址:8888 docker stop mytomcat docker ps ­-a docker start mytomcat # 示例2:拷贝文件和挂载目录 docker run ­-p 8080:8080 ­-d tomcat docker exec ­-it 70cba924861c /bin/bash cd /usr/local/tomcat/webapps/ROOT exit echo welcome to tomcat > index.jsp docker cp index.jsp 70cba924861c:/usr/local/tomcat/webapps/ROOT # 将宿主机中的文件拷贝到容器中指定的目录中 # 部署web项目,将war文件放到容器中 docker cp spring­-web.war 70cba924861c:/usr/local/tomcat/webapps # 问题:如果项目更改了需要重新拷贝war文件,太麻烦,可以直接挂载目录(也称为数据卷Volume) docker run \ ­ -p 8080:8080 \ -­v /my/tomcat/webapps/spring­web.war:/usr/local/tomcat/webapps/spring­web.war \ ­ -v /my/tomcat/data:/usr/local/tomcat/dataVolume:ro \ ­ -d tomcat # 可以挂载指定的文件也可以挂载目录 # 示例3:启动多个容器,一个镜像可以启动多个容器,每个容器互相隔离、独立 ,所以容器的端口是可以重复的 docker run -­p 8081:8080 ­-d tomcat docker run ­-p 8082:8080 ­-d tomcat docker run ­-p 8083:8080 ­-d tomcat ``` ## 3、 镜像的分层结构 tomcat镜像为什么这么大? 镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境的软件,包含运行某个软件所需要的所有内容。 基于UnionFS联合文件系统,采用分层结构,一层一层的堆叠起来,像一个同心圆,但从外面来说,只能看到最外层的文件系统(镜像层) ![](https://img.kancloud.cn/ea/02/ea021d300bf089dcc3984ca5c57d907d_342x186.png) 分层结构:共享资源、便于复用(许多镜像都是从相同的Base基础镜像构建而来的,基础镜像只需要保存一份) 镜像都是只读的,而由镜像生成的容器是可修改的 ## 4、创建镜像 有时从Docker镜像仓库中下载的镜像不能满足我们的要求,此时可以基于这个镜像(基础镜像)封装一个自己的镜像。 两种方式: * 更新镜像:使用docker commit命令 * 构建镜像:使用docker build命令,需要创建Dockerfile文件 ### 4.1、更新镜像 先使用基础镜像创建一个容器,然后对容器进行修改,最后使用commit命令提交为一个新的镜像 步骤: a、根据基础镜像,创建容器 docker run ­­--name mytomcat ­-p 8080:8080 -­d tomcat b、修改容器 ``` docker exec ­-it bcd08edac78d /bin/bash cd webapps/ROOT rm ­-f index.jsp echo welcome to tomcat > index.html exit ``` c、提交为新镜像,语法: docker commit ­m="描述消息" ­a="作者" 容器id或容器名 镜像名:tag ``` docker commit -­m="修改默认索引页" -­a="AAA" bcd08edac78d itany/tomcat:v1 ``` d、使用新镜像运行容器 ``` docker run --­­name tomcat_v1 -­p:8080:8080 ­-d itany/tomcat:v1 ``` ### 4.2、 构建镜像 根据Dockerfile文件来自动构建镜像 Dockerfile是一个包含创建镜像所有命令的文本文件,使用docker build命令可以根据Dockerfile的内容创建镜像 步骤: a、创建一个Dockerfile文件 vi Dockerfile ``` # 指定基础镜像 FROM tomcat # 指定作者 MAINTAINER yuanke@163.com # 执行命令 RUN rm ­-f /usr/local/tomcat/webapps/ROOT/index.jsp RUN echo "welcome to tomcat!" > /usr/local/tomcat/webapps/ROOT/index.html ``` b、构建新镜像,语法: docker build ­f Dockerfile文件的路径 ­t 镜像名:tag 命令执行的上下文 ``` docker build ­-f Dockerfile ­-t itany/tomcat:v2 . ``` c、使用新镜像运行容器 ``` docker run ­-p 9999:8080 ­-d itany/tomcat:v ```