docker容器的相关操作
操作容器命令格式:docker 命令【选项】
1、查看docker引擎中运行有哪些容器
docker ps
docker ps -a 包含停止的容器
docker ps -q 查看容器的id
(容器id) (基于那个镜像运行)(容器内启动的命令) (容器创建时间) (容器当前的状态)(容器内服务监听的端口)(容器名称)
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d7bececae0e2 tomcat "catalina.sh run" 46 seconds ago Up 45 seconds 8080/tcp vibrant_rubin
2、如何运行一个容器
docker run 镜像名 / 镜像id
简单运行:docker run tomcat:8.0
跑在自己的操作系统 外界根本访问不到。
运行tomcat容器,同时设置容器与宿主机(dokcer引擎所安装的这个机器,就是linux机器)端口的映射关系 -p 建立映射
docker run -p 8080(宿主机): 8080 tomcat:8.0
这是再去访问宿主机的8080端口,就会直接去访问容器的8080端口。可以映射多个端口
访问 192.169.1.29:8080 就会跳出tomcat的页面,
docker在启动服务时,他会把这个8080端口利用防火墙加入到防火墙的开放的列表端口里边。不需要关闭网络防火墙
这个ports 前边代表的是宿主机的8080端口,映射到 容器内部的 8080端口,可以映射多个端口
docker run -p 8081: 8080 tomcat:8.0
docker run -p 8082: 8080 tomcat:8.0
docker run -p 8083: 8080 tomcat:8.0
3、运行tomcat,开放映射端口,后台启动服务 -d 已守护进程使用
docker run -p 8080:8080 -d tomcat:8.0
4、运行tomcat容器,开放端口映射,后台启动改服务,指定容器名称 --name [容器名称]
docker -d -p 8080:8080 --name tomcat01 tomcat:8.0
5、停止、重启、暂停、恢复容器
docker stop 容器id/名称 停止
docker restart 容器id/名称 重启
docker start 容器id/名称 启动
docker pause 容器id/名称 暂停
docker unpause 容器id/名称 恢复,恢复暂停的容器
6、删除容器
docker rm 容器id/名称 只能删除已经停止的容器
docker rm -f 容器id/名称 强制删除,无论容器在运行,也可以运行
docker rm -f $(docker ps -qa) 删除所有的容器
7、查看容器内部日志
docker logs 容器id/名称
docker logs -f 容器id/名称 -f 实时的显示容器日志
docker logs -f -t 容器id/名称 -t 显示时间
8、进入容器内部
docker exec(代表执行的意思) -it(交互模式) 容器id/name bash
exit 退出容器
9、容器与宿主机操作系统之间的文件拷贝
a、如何将容器内部中指定的文件和目录拷贝到宿主机:
docker cp 容器id:容器中的文件或目录 宿主机的目录
docker cp b847:/usr/local/tomcat/RUNNING.txt /root 将b847容器内部的路径下文件拷贝到 root目录下
b、如何将宿主机的指定目录和文件拷贝到容器内
docker cp 宿主机的目录 容器id:容器中的文件或目录
10、查看容器内运行指令
查看容器内部运行进程
docker top 容器id/name
查看容器内部细节指令
docker inspect 容器id/name
11、容器数据卷机制 Volume
数据卷 Data volume
作用:用来实现容器中数据和宿主机中数据进行映射的,相互同步,对于容器中某个目录的改变会直接影响到宿主机中某个目录的改变,任何一个有变化都会相互同步
注意事项:数据卷的使用必须在容器首次启动时设置
使用:docker run -v 宿主机目录:容器内目录 -v 宿主机目录:容器内目录 ..... 可以设置多个
使用绝对路径设置数据卷:
docker run -v 宿主机绝对路径:容器内路径:ro ....
docker run -d -p 8081:8080 --name tomcat01 -v /root/apps/:/usr/local/tomcat/webapps:ro tomcat:8.0
将宿主机的/root/apps/目录与容器内部路径/usr/local/tomcat/webapps 相互同步
ro:readyonly 如果在设置数据卷时指定ro,代表日后容器内部路径是只读的,容器内部的文件无法修改
注意:这种方式会将容器路径的原始内容全部清空,始终以宿主机的路径为主
使用别名的方式设置数据卷:
docker run -v aaaa:/usr/local/tomcat/webapps ....
docker run-d -p 8082:8080 --name tomcat03 -v aaaa:/usr/local/tomcat/webapps tomcat:8.0
aaaa:代表docker数据卷中别名,这个别名如果存在docker直接使用,不存在自动创建
使用别名方式会保留容器内路径的的原始内容,前提是别名路径不能存在内容
docker根据别名创建的目录默认在 /var/lib/docker/volumes/
12、将容器打包成一个新的镜像 commit
将正在运行的容器,打包成一个镜像。基于容器直接构建的,下次不需要在部署,直接启动镜像就是一个项目。
容器是可读可写的,基于这个特性 我们就可以对容器进行自己的深度定制,将修改的容器打包成一个新的镜像,日后基于这个镜像运行成容器,存在原始定制特性
commit:用来把容器提交成一个新的镜像
docker commit -m "描述信息”-a"作者信息” (容器id或者名称) 打包的镜像名称: 标签
13、镜像的备份和恢复
镜像备份:docker save 镜像名:Tag -o xxx.tar
docker save tomcat:80 -o tomcat-8.0.tar
镜像还原:docker load -i tomcat-8.0.tar