这是我参与8月更文挑战的第7天,活动详情查看:8月更文挑战
微信公众号搜索 程序媛小庄 人生苦短一起学Python
前言
上一篇文章介绍了镜像相关命令,有了镜像自然要运行,本文介绍容器相关命令~
运行容器的相关命令
ps:关于容器操作的命令以tomcat为例进行操作。
docker pull tomcat # 下载tomcat镜像
docker run 镜像名:TAG(镜像id):最简单的通过镜像运行容器的方式,容器与容器之间是互相隔离的,此时无法通过外界访问到tomcat服务,因此需要在该命令后添加一系列的参数运行。通过docker run --help可以查看docker run命令的选项,非常多哦~
-p 宿主机端口:容器内服务监听端口 :宿主机端口与容器中的端口进行映射,可以映射多个端口。实现在宿主机上访问tomcat服务的需求。再次启动tomcat服务,就可以在宿主机上访问tomcat服务了。但是通过该方式可以启动N多个tomcat服务,但是需要注意的是宿主机的8080端口已经被占用,不能再使用宿主机上的8080端口与docker容器进行映射,可以选择其他端口。
# docker run -p(端口映射参数) 宿主机端口:容器内服务端口 镜像名称:TAG
docker run -p 8080:8080 tomcat:latest
docker run -p 8081:8080 tomcat:latest
...
-d:启动容器进行端口映射并且后台运行服务。如果只进行端口映射的话还有问题,如果使用快捷键ctrl + c就会停止容器,-d选项可以让服务后台启动。
# docker run -d(后台运行) -p(端口映射参数) 宿主机端口:容器内服务端口 镜像名称:TAG
docker run -d -p 8082:8080 tomcat:latest
--name 唯一的名字:启动容器,给当前容器指定名称,端口映射,后台启动。在运行容器时为容器指定名称,容器名是唯一的。
# docker run -d(后台运行) -p(端口映射参数) 宿主机端口:容器内服务端口 --name(容器名称参数) 容器名唯一 镜像名称:TAG
docker run -d -p 8083:8080 --name tomcat01 tomcat:latest
查看容器的相关命令
docker ps:查看当前正在运行的容器。下表显示结果中每个“字段”的意思。该命令也有选项。
docker ps -a:查看所有的容器,包括运行的容器和没有运行的容器。
docker ps -q:查看所有正在运行的容器id。
docker ps -aq:查看所有的容器id。
| CONTAINER ID | 容器唯一ID |
|---|---|
| IMAGE | 基于哪个镜像运行产生的容器 |
| COMMAND | 容器内执行命令 |
| CREATED | 容器创建时间 |
| STATUS | 容器当前状态,up表示正在运行 |
| PORTS | 容器内当前服务监听的端口 |
| PORTS | 容器名字,不指定docker会指定一个随机名称 |
停止|重启容器相关命令
docker start 容器名或者容器id:开启容器
docker restart 容器名或者容器id:重启容器
docker stop 容器名或者容器id:正常停止容器运行
docker kill 容器名或者容器id:立即停止容器运行
容器删除
docker rm 容器名称|容器id(能够区分容器即可):删除一个停止的容器,如果删除正在运行的容器会报错
docker rm -f 容器名称|容器id:强制删除容器,可以是运行的容器
docker rm -f $(docker ps -aq):删除所有的容器
查看容器内服务运行日志
docker logs 容器名称|容器id:后台运行的服务无法实时查看日志,因此可以通过该命令查看日志,没有实时展示的效果
docker logs -f 容器名称|容器id:对日志进行实时监听
docker logs -tf 容器名称|容器id:实时展示日志的同时加入时间
docker logs --tail N 容器名称|容器id:N是任意数字,查看容器日志的最后N行
查看容器内的进程
docker top 容器名称|容器id:查看容器内的所有进程
与容器内部进行交互
docker exec -it 容器名称|容器id bash :表示以交互模式(-it)进入容器并与容器内的命令终端进行交互。bash代表容器内的终端,类似于linux系统中的命令行。
exit:退出容器。
操作系统与容器的文件交互(互相传输文件)
docker cp 容器ID|容器名 :容器内的资源路径 操作系统的路径:将容器内的文件复制到操作系统。
docker cp tomcat01:/usr/local/RUNING.txt ./RUNING.txt # 复制文件
docker cp tomcat01:/usr/local/webapps ./webapps # 复制目录
docker cp 操作系统路径 容器ID|容器名:容器内目标路径:宿主机上资源复制到容器中。
docker cp a.txt tomcat01:/usr/local/
查看容器内部的细节
docker inspect 容器ID|容器名:可以查看容器内部的信息,比如数据卷挂载、网络信息、端口信息。
数据卷(volume)
数据卷的核心作用就是可以实现书主机系统与容器之间的文件共享,具体讲可以实现对宿主机中的某个目录时可以直接影响到容器中对应的目录。要求容器在启动时绑定数据卷。数据卷有两种方式。
第一种方式 - 自定义数据卷
在启动容器时,数据卷的参数是-v,具体命令为docker run -d -p 8080:8080 --name tomcat01 -v 宿主机目录:容器内目录 tomcat:latest。注意宿主机目录必须是绝对路径,使用该种方式如果容器内部的路径有数据,这些数据会被宿主机上对应的数据覆盖。
docker run -d -p 8080:8080 --name tomcat01 -v /root/apps:/usr/local/webapps tomcat:latest
# 如果宿主机目录中没有任何文件或数据那么容器内对应的目录中的数据也会被清空
第二种方式 - 自动数据卷
宿主机的目录可以不指定,随便任意的名称,该名称就是数据卷的别名,别名所对应的目录在宿主机中并不存在,docker就会在宿主机上自动为aa构建一个路径,并且该目录是空的,使用这种方式有一个好处就是,因为宿主机上的目录是空的,就会将容器中对应的目录下的文件全部拷贝出来放在宿主机的目录上。比如:
docker run -d -p 8080:8080 --name tomcat01 -v aa:/usr/local/webapps tomcat:latest
# aa代表数据卷的名字, 名称是随便的
# 启动容器时会将aa对应容器目录中的全部内容复制到aa对应的宿主机目录上
# aa对应的目录寻找方式:find / -name aa
使用自动数据卷的最大好处就是保护数据,在使用自动数据卷目录启动容器时会将容器内该目录的数据全部复制到宿主机的映射目录中,这样就算容器挂掉了,但是容器内的数据不会丢失。
容器打包成镜像
docker commit -m "描述信息" -a "作者信息" 被打包的容器ID|名称 新的镜像名称:tag:根据已有的容器打包成镜像
docker commit -m "my tomcat" -a "author" tomcat01 mytomcat:1.0
备份镜像
docker save 镜像名称:TAG -o 文件名:将镜像进行备份到某个文件中并保存在当前目录中。
docker save mytomcat:1.0 -o mytomcat:1.0.tar
将打包的tar镜像文件导入到本地docker仓库
docker load -i xxx.tar:将打包好的tar文件加载到本地的docker仓库
docker load -i mysql.tar
结语
文章首发于微信公众号程序媛小庄,同步于掘金。
码字不易,转载请说明出处,走过路过的小伙伴们伸出可爱的小指头点个赞再走吧(╹▽╹)