docker 命令详解官方地址
https://docs.docker.com/engine/reference/
基本命令
docker version ##查看docker版本信息
docker info ##显示docker的系统信息,包括镜像和容器数量
docker --help ##docker 帮助命令##
docker inspect -f "{{ .RestartCount }}" 容器 ##查看容器启动次数命令
docker inspect -f "{{ .State.StartedAt }}" 容器 ##查看容器最后一次启动时间
docker inspect -f "{{ .Config.Env }}" 容器 ##查看容器环境配置
镜像命令
docker images ##查看所有本机上的镜像
docker search ##搜索
docker search XXX --filter=stars=3000 ##搜索星大于3000的镜像
docker pull XXX:TAG ##获取镜像
docker rmi XXX ##删除XXX镜像,可以通过ID或者名称删除
docker rmi -f $(docker images -aq) ##删除所有镜像
容器命令
docker run --help
docker run [可选参数] images
#参数说明
--name =“Name” 容器名字 XXX ,用来区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口 -p 8080:8080
-p ip:主机端口:容器端口
-p 主机端口:容器端口 (常用)
-p 容器端口
-p 随机指定端口
docker stats ##查看cpu的状态
列出所有运行的容器
docker ps
列出当前正在运行的容器
-a ##列出所有运行过的容器(包括曾经运行过的)
-n =? ##显示最近创建的容器
-q ##只显示容器的编号
退出容器
exit ##直接容器停止并退出
ctrl + p + Q ##容器不停止退出
删除容器
docker rm 容器id ##删除指定容器
docker rm -f $(docker ps -aq) ##删除所有容器
docker ps -a -q | xargs docker rm ##删除所有容器
启动和停止容器的操作
docker start 容器id/name #启动指定容器
docker stop 容器id/name #停止指定的容器
docker restart 容器id/name #重启指定容器
docker kill 容器id/name #强制停止当前容器
常用的其他命令
docker run
-d 后台启动容器(常见的坑,docker 容器使用后台运行,就必须要一个前台进程,docker发现没有应用,就会自动停止)
docker logs --help
docker logs -f 容器id
docker logs -tf --tail 10 容器id ##显示最新10条命令
docker top 容器id
docker inspect --help
docker inspect 容器id/name
#我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置
#命令
docker exec -it 容器id/name /bin/bash
docker exec -it 容器id/name /bin/sh
#exec 进入容器后开启一个新的终端,可以在里面操作(常用)
docker attach 容器id/name
#进入容器正在执行的终端,不会启动新的进程
docker cp 容器id:容器内路径 目的主机的路径
docker commit
docker commit 提交容器成为一个新的副本
##命令和git原理类似
docker commit -m ="提交的描述信息 " -a="作者" 容器id/name 目标镜像名:[TAG]
docker容器数据卷
##方式一:直接使用命令挂载 -v
docker run -it -v 主机目录:容器内目录
启动成功之后可以通过 docker inspect 容器id/name 查挂载是否成功
##具名和匿名挂载
-v 容器内路径 ##匿名挂载
-v 卷名:容器内路径 #具名挂载
-v /宿主机路径:容器内路径 #指定路径挂载
docker File
docker build --help
docker build -f 目录地址 -t 文件名 . #注意后边的点不要漏掉了
#注意脚本指令都是大写的
docker run -it --name docker02 --vlumes-from docker01 XXX/centos:latest(卷共享)
##容器卷的生命周期是一直持续到没有人使用为止,但是一旦持久化到了本地,这个时候,本地的数据 是不会删除的
##指令
FROM #格式:FROM image或FROM image:tag 【Dockerfile中第一条指令必须是FROM指令,且在同一个Dockerfile中创建多个镜像时,可以使用多个FROM指令】
MAINTAINER #格式为MAINTAINER user_name user_email 【指定维护者信息RUN】
RUN #格式为RUN command或 RUN["EXECUTABLE","PARAM1","PARAM2".....]【前者在shell终端中运行命令,/bin/sh -c command,例如:/bin/sh -c "echo hello";后者使用exec执行,指定其他运行终端使用RUN["/bin/bash","-c","echo hello"] ,每条RUN指令将当前的镜像基础上执行指令,并提交为新的镜像,命令较长的时候可以使用\来换行 】
ADD #格式:ADD src dest 【该命令将复制指定本地目录中的文件到容器中的dest中,src可以是是一个绝对路径,也可以是一个URL或一个tar文件,tar文件会自动解压为目录】
WORKDIR #格式: WORKDIR /path 【为后续的RUN CMD ENTRYPOINT指定配置工作目录,可以使用多个WORKDIR指令,若后续指令用的是相对路径,则会基于之前的命令指定路径】
VOLUME #格式: VOLUME ["/data"] 【作用是创建在本地主机或其他容器可以挂载的数据卷,用来存放数据】
EXPOSE #格式: EXPOSE port [port2,port3,...] 【例如EXPOSE 80这条指令告诉Docker服务器暴露80端口,供容器外部连接使用。在启动容器的使用使用-P,Docker会自动分配一个端口和转发指定的端口,使用-p可以具体指定使用哪个本地的端口来映射对外开放的端口】
CMD #支持三种格式:
# CMD ["executable","param1","param2"],使exec执行,这是推荐的方。
# CMD command param1 param2 在/bin/sh中执行
# CMD ["param1","param2"] 提供给ENTERYPOINT的默认参数
#CMD用于指定容器启动时执行的命令,每个Dockerfile只能有一个CMD命令,多个CMD命令只执行最后一个。若容器启动时指定了运行的命令,则会覆盖掉CMD中指定的命令
ENTRYPOINT #格式有两种:
#ENTRYPOINT ["executable","param1","param2"]
#ENTRYPOINT command param1,param2 会在shell中执行。
#用于配置容器启动后执行的命令,这些命令不能被docker run提供的参数覆盖。和CMD一样,每个Dockerfile中只能有一个ENTRYPOINT,当有多个时最后一个生效(我们运行容器时追加的命令,是直接拼接在ENTRYPOINT 命令后面的)
USER #格式:USER username 【指定容器运行时的用户名或UID,后续的RUN也会使用指定的用户。要临时使用管理员权限可以使用sudo。在USER命令之前可以使用RUN命令创建需要的用户。例如:RUN groupadd -r docker && useradd -r -g docker docker】
ONBUILD #格式:ONBUILD [INSTRUCTION] 【该配置指定当所创建的镜像作为其他新建镜像的基础镜像时所执行的指令】
COPY #格式:COPY src desc 【复制本地主机src目录或文件到容器的desc目录,desc不存在时会自动创建】
ENV #格式:EVN key value 【用于指定环境变量,这些环境变量,后续可以被RUN指令使用,容器运行起来之后,也可以在容器中获取这些环境变量】
docker build
#创建好Dockerfile之后,通过docker build命令来创建镜像,该命令首先会上传Dockerfile文件给Docker服务器端,服务器端将逐行执行Dockerfile中定义的指令。
#通常建议放置Dockerfile的目录为空目录。另外可以在目录下创建.dockerignore文件,让Docker忽略路径下的文件和目录,这一点与Git中的配置很相似。
#通过 -t 指定镜像的标签信息,例如:docker build -t regenzm/first_image . 【"."指定的是Dockerfile所在的路径】
docker 网络
查看所有的docker网络
docker network ls
##网络模式
bridge #桥接docker(默认)
none #不配置网络
host #和宿主机共享网络
container #容器网络联通(用的少,局限很大)
自定义docker网络
好处:不同的集群使用不同的网络,保证集群是安全和健康的
docker network --help
docker network create --help
docker网络联通