[ Docker ] Docker Container Related Operations

这是我参与8月更文挑战的第7天,活动详情查看:8月更文挑战mysql

image.png

微信公众号搜索 程序媛小庄 人生苦短一块儿学Pythonlinux

前言

上一篇文章介绍了镜像相关命令,有了镜像天然要运行,本文介绍容器相关命令~web

运行容器的相关命令

ps:关于容器操做的命令以tomcat为例进行操做。sql

docker pull tomcat  # 下载tomcat镜像
复制代码

docker run 镜像名:TAG(镜像id):最简单的经过镜像运行容器的方式,容器与容器之间是互相隔离的,此时没法经过外界访问到tomcat服务,所以须要在该命令后添加一系列的参数运行。经过docker run --help能够查看docker run命令的选项,很是多哦~docker

-p 宿主机端口:容器内服务监听端口 :宿主机端口与容器中的端口进行映射,能够映射多个端口。实如今宿主机上访问tomcat服务的需求。再次启动tomcat服务,就能够在宿主机上访问tomcat服务了。可是经过该方式能够启动N多个tomcat服务,可是须要注意的是宿主机的8080端口已经被占用,不能再使用宿主机上的8080端口与docker容器进行映射,能够选择其余端口。tomcat

# docker run -p(端口映射参数) 宿主机端口:容器内服务端口 镜像名称:TAG

docker run -p 8080:8080 tomcat:latest
docker run -p 8081:8080 tomcat:latest
...
复制代码

-d:启动容器进行端口映射而且后台运行服务。若是只进行端口映射的话还有问题,若是使用快捷键ctrl + c就会中止容器,-d选项可让服务后台启动。bash

# 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:查看当前正在运行的容器。下表显示结果中每一个“字段”的意思。该命令也有选项。markdown

docker ps -a:查看全部的容器,包括运行的容器和没有运行的容器。网络

docker ps -q:查看全部正在运行的容器id。

docker ps -aq:查看全部的容器id。

CONTAINER ID 容器惟一ID
IMAGE 基于哪一个镜像运行产生的容器
COMMAND 容器内执行命令
CREATED 容器建立时间
STATUS 容器当前状态,up表示正在运行
PORTS 容器内当前服务监听的端口
PORTS 容器名字,不指定docker会指定一个随机名称
docker ps结果字段

中止|重启容器相关命令

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)

数据卷的核心做用就是能够实现书主机系统与容器之间的文件共享,具体讲能够实现对宿主机中的某个目录时能够直接影响到容器中对应的目录。要求容器在启动时绑定数据卷。数据卷有两种方式。

image-20210807145836120

第一种方式 - 自定义数据卷

在启动容器时,数据卷的参数是-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
复制代码

结语

文章首发于微信公众号程序媛小庄,同步于掘金

码字不易,转载请说明出处,走过路过的小伙伴们伸出可爱的小指头点个赞再走吧(╹▽╹)

相关文章
相关标签/搜索