Docker命令大全

一、基础命令

1. 帮助命令

# 显示docker的版本信息
docker version 

# 显示docker的系统信息             
docker info 

# 显示帮助命令(可选填命令获取更详细的信息)
docker help [command]    或者    docker [COMMAND] --help    

「解释」

  • [   ]: 可省略
  • COMMAND: 命令

2. 镜像命令

2.1 查看所有镜像

#查看本地主机上的所有镜像信息
docker images [OPTIONS] [REPOSITORY[:TAG]]           
Options:
  -a, --all             列出本地所有的镜像(含中间映像层)
      --digests         显示镜像的摘要信息
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print images using a Go template
      --no-trunc        显示完整的镜像信息
  -q, --quiet           只显示镜像ID

#查看本地主机上的所有镜像id
docker images -aq       

「列表解释」

  • 「REPOSITORY: 镜像的仓库源」
  • 「TAG: 镜像的标签」
  • 「IMAGE ID: 镜像的id」
  • 「CREATE: 镜像的创建时间」
  • 「SIZE: 镜像的大小」

「解释」

  • OPTIONS: 可选项

同一仓库源可以有多个TAG,代表这个仓库源的不同个版本,我们使用REPOSITORY:TAG来定义不同的镜像。

如果你不指定一个镜像的版本标签,例如你只使用ubuntu,docker将默认使用ubuntu:latest镜像。

 2.2 搜索镜像

# 搜索镜像(在Docker Hub上搜索)
docker search [OPTIONS] 镜像名字
Options:
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print search using a Go template
      --limit int       Max number of search results (default 25)
      --no-trunc        显示完整的镜像描述

# 条件过滤搜索结果(列出收藏数不小于指定值的镜像)
docker search --filter=STARS=50 镜像名字

Docker命令大全_第1张图片

「列表解释」

  • 「NAME: 镜像名称」
  • 「DESCRIPTION: 镜像介绍」
  • 「STARS: 镜像的stars」
  • 「OFFICIAL: 是否是官方提供的」
  • 「AUTOMATED: 是不是自动化的」

2.3 拉取镜像

# 默认拉取最新的镜像
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
Options:
  -a, --all-tags                Download all tagged images in the repository
      --disable-content-trust   Skip image verification (default true)
      --platform string         Set platform if server is multi-platform capable
  -q, --quiet                   Suppress verbose output

# 指定版本下载
docker pull mysql:5.7

2.4 删除镜像

#删除镜像
docker rmi [OPTIONS] IMAGE[:TAG] [IMAGE...]
Options:
  -f, --force      强制删除镜像
      --no-prune   Do not delete untagged parents

#删除指定名称指定版本的镜像
docker rmi mysql:5.7

#强制删除单个有唯一镜像名的镜像
docker rmi -f 镜像名[:TAG]

#删除单个指定id的镜像
docker rmi 镜像ID[:TAG]

#删除多个指定id的镜像
docker rmi 镜像ID[:TAG] 镜像ID[:TAG] 镜像ID[:TAG]

#迭代删除所有的镜像
docker rmi -f $(docker images -aq)

3. 容器命令

3.1 运行镜像

#新建并启动容器(如果本地没有该镜像,会自动去Hub拉取)
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
Options:
  --name="容器新名字"      为容器指定一个名称,如果不指定,会被默认随机分配
  -d                      后台运行容器,并返回容器ID,也即启动守护式容器
  -i                      以交互模式运行容器,通常与-t同时使用
  -t                      为容器重新分配一个伪输入终端,通常与-i同时使用
  -P                      随机端口映射
  -p                      指定端口映射,有以下四种格式:
                          ip:hostPort:containerPort
                          ip::containerPort
                          hostPort:containerPort
                          containerPort


# 运行实例
#-小写p 主机端口:docker容器端口
#-大写P 随机分配端口
docker run --name=tomcat1 -d -p 8080:8080 tomcat     (后台运行)
docker run --name=tomcat1 -it -P tomcat              (前台运行)

# 用完即删
docker run -it --rm tomcat

# 指定环境变量(实例)
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m"  elasticsearch:7.6.2

 「参数说明」

  • 「--name="Name":容器名字 如tomacat01、tomacat02用于区分容器」
  • 「-e: 指定环境变量」
  • 「-d:后台守护进程运行(启动守护式容器)」
  • 「-it:使用交互方式运行,进入容器查看内容(启动交互式容器)」
  • 「-p:指定容器的端口 -p 8080:8080」
    • 「-p :主机端口:容器端口」
    • 「-p :容器端口」
  • 「-P:随机指定端口」
  • 「-v: 指定数据卷」
    • 「-v 容器文件位置:宿主机文件位置」
  • 「--volumes-from: 指定容器的数据卷共享(指定谁,就同步谁的数据!继承!)」
    • 「--volumes-from:继承自那个容器」(父容器删除不影响已存在数据)
  • 「--net: 缺省 bridge」

3.2 进入容器

# 运行一个centos并进入到容器里面
docker run -it centos /bin/bash

# 退出容器
exit

3.3 查看容器

docker ps [OPTIONS]
Options:
  -a, --all             列出当前所有正在运行的容器+历史上运行过的
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print containers using a Go template
  -n, --last int        显示最近n个创建的容器
  -l, --latest          显示最近创建的容器
      --no-trunc        不截断输出
  -q, --quiet           静默模式,只显示容器编号
  -s, --size            Display total file sizes

# 查看正在运行中的容器
docker ps

# 查看所有容器
docker ps -a

3.4 退出容器

# 直接容器停止并退出
exit 

# 容器不停止退出           
Ctrl + P + Q    

3.5 删除容器

# 删除已关闭的指定容器
docker rm bde00bc086cf

# 强制删除运行中的容器
docker rm -f bde00bc086cf

# 迭代删除全部的容器
docker rm -f $(docker ps -aq)

3.6 容器的启动与停止

# 启动容器
docker start 容器ID或者容器名

# 重启容器
docker restart 容器ID或者容器名

# 停止容器
docker stop 容器ID或者容器名

# 强制杀死容器
docker kill 容器ID或者容器名

3.7 进入正在运行的容器并以命令行交互

# 进入到指定容器内部进行修改  开启一个新的终端(是在容器中打开新的终端,不会启动新的进程)
docker exec -it 容器ID [/bin/bash]

# 进入到正在执行中的终端(直接进入容器启动命令的终端,不会启动新的进程)
docker attach 容器ID



#以下为exec的优势

#不进入指定容器即可直接返回结果(不写/bin/bash且使用命令)
docker exec -it 容器ID ls

#进入指定容器再操作
docker exec -it 容器ID [/bin/bash]
ls

3.8 从容器内拷贝文件到宿主机上

docker cp 容器ID:容器内文件的路径 宿主机路径

#实例
docker cp 0cd4d9d94de2:/Test.java /Test.java

3.9 其他常用命令

「查看日志命令」

docker logs [OPTIONS] CONTAINER
Options:
      --details        Show extra details provided to logs
  -f, --follow         跟随最新的日志打印
      --since string   Show logs since timestamp (e.g. 2013-01-02T13:23:37Z) or
                       relative (e.g. 42m for 42 minutes)
  -n, --tail string    从日志末尾开始显示的行数(默认为“all”),也就是显示最后多少条
  -t, --timestamps     显示时间戳
      --until string   Show logs before a timestamp (e.g. 2013-01-02T13:23:37Z) or
                       relative (e.g. 42m for 42 minutes)

# 查看容器运行产生的日志
docker logs -ft --tail 10 容器ID 

「参数解析:」

  • 「f: 格式化日志」
  • 「t: 携带日志时间戳」

「查看进程」

# 查看cpu等信息(查看容器内运行的进程)
docker top 容器ID

 「查看容器元信息」

# 查看容器元信息(查看容器内部细节)
docker inspect 容器ID

二、可视化面板

1、安装

# 安装可视化面板 portainer (数据卷路径不可改变)
docker search portainer

docker pull portainer/portainer

#单机版启动
docker run --name portainer -d -p 9000:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

三、提交容器为一个镜像

1.提交容器

# 提交容器副本使之成为一个新的镜像(将容器打包)
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

Options:
  -a, --author string    作者(e.g., "John Hannibal Smith ")
  -c, --change list      Apply Dockerfile instruction to the created image
  -m, --message string   提交的描述信息
  -p, --pause            Pause container during commit (default true)


# 示例代码提交
docker commit -a="thq" -m="删除了document页面" 65a83de5805c guigu/mytomcat:1.0
备注:guigu是命名空间

Docker命令大全_第2张图片 「参数解释:」

  • 「-a: 作者」
  • 「-m: 备注」
  • 「-c: 将Dockerfile指令应用于创建的映像」
  • 「-p: 提交期间暂停容器(默认为true)」
  • 「REPOSITORY: 要创建的目标镜像名」

四、Docker数据卷使用 

1.数据卷的基本使用

#直接命名添加
# 关联数据卷
docker run [可选参数] -v /主机路径/:/容器路径/ 镜像名称

//查看绑定状态
docker inspect 容器ID

# 关联数据卷的实例命令
docker run it -v /宿主机绝对路径目录:/容器内目录 镜像名称
或
docker run it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名称(加上了容器只读权限)
或
docker run -d -p 8080:8080 --name mytomcat -v /home/tomcat/webapps/:/usr/local/tomcat/webapps tomcat


#Dockerfile方式添加
在Dockerfile中使用VOLUME保留字指令来定义容器数据卷,用于数据保存和持久化工作

备注:

Docker挂载主机目录Docker访问出现cannot open directory .: Permission denied
解决办法:在挂载目录后多加一个--privileged=true参数即可 

2.mysql安装实战

docker run -d -p 3366:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

「命令解析:」

  • 「-d: 守护进程运行」
  • 「-v: 添加数据卷(宿主机位置和容器位置映射)」
  • 「-p: 堆对外映射端口」
  • 「-e: 指定环境变量」
  • 「--name: 容器名称」

五、Dockerfile

1. 构建镜像文件

# 创建一个Dockerfile
vim Dockerfile

FROM centos

VOLUME ["volume01","volume02"]

CMD echo "-----end---"
CMD /bin/bash

:x

# 构建docker镜像
# -f dockerfile的路径   
# -t 生成的镜像名称
# . 以当前路径为上下文打包
docker build -f /home/docker-volom/Dockerfile -t thq/centos:1.0 .

# 构建基本命令
docker build [OPTIONS] PATH | URL | -

2. Dockerfile概念

Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。

  1. 每个保留关键字(指令)都必须是大写字母
  2. 执行顺序从上到下
  3. # 表示注释
  4. 每一个指令都会创建提交一个新的镜像层并提交!

3. Dockerfile语法浅析

Docker命令大全_第3张图片

  • FROM: 基础镜像,当前新镜像是基于哪个镜像的。一切都从这里开始构建」
  • 「MAINTAINER: 镜像是谁写的,姓名+邮箱」
  • RUN: 镜像构建时需要运行的命令」
  • ADD: 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包」
  • 「WORKDIR: 镜像的工作目录,指定在创建容器后,终端默认登录的进来工作目录,一个落脚点」
  • 「VOLUME: 容器数据卷,用于数据保存和持久化工作」
  • EXPOSE: 当前容器对外暴露出的端口」
  • 「CMD: 指定这个容器启动时要运行的命令,只生效最后一个CMD指令,CMD会被docker run之后的参数替换」
  • ENTRYPOINT: 指定这个容器启动的时候要运行的命令!可以追加命令!」
  • 「ONBUILD: 当构建一个被继承的Dockerfile时运行命令,父镜像在被子镜像继承后,父镜像的onbuild被触发」
  • 「COPY: 类似ADD,拷贝文件和目录到镜像中」
  • 「ENV:构建的时候设置环境变量」
# 构建一个具有复杂命令行的centos
vim Dockerfile

# 镜像继承自centos
FROM centos
# 作者信息
MAINTAINER thq<********@163.com>
# 设置环境变量
ENV MYPATH /usr/local
# 设置工作目录
WORKDIR $MYPATH
# 执行命令安装指令
RUN yum -y install vim
RUN yum -y install net-tools
# 暴露端口
EXPOSE 80
# 执行一些指令
CMD echo "-------end------"
CMD echo $MYPATH
CMD /bin/bash

:x

# 构建镜像
docker build -f /home/docker-volom/Dockerfile -t thq/mycentos:1.0 .
备注:如果没有写-f /home/docker-volom/Dockerfile,说明当前目录下会有一个Dockerfile命名的文件供其执行,所以才能省略。


#自定义镜像Tomcat9
FROM         centos
MAINTAINER    zzyy
#把宿主机当前上下文的c.txt拷贝到容器/usr/local/路径下
COPY c.txt /usr/local/cincontainer.txt
#把java与tomcat添加到容器中
ADD jdk-8u171-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.8.tar.gz /usr/local/
#安装vim编辑器
RUN yum -y install vim
#设置工作访问时候的WORKDIR路径,登录落脚点
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置java与tomcat环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_171
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.8
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.8
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#容器运行时监听的端口
EXPOSE  8080
#启动时运行tomcat
# ENTRYPOINT ["/usr/local/apache-tomcat-9.0.8/bin/startup.sh" ]
# CMD ["/usr/local/apache-tomcat-9.0.8/bin/catalina.sh","run"]
CMD /usr/local/apache-tomcat-9.0.8/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.8/bin/logs/catalina.out

#构建镜像
docker build -t zzyytomcat9 .

#run
docker run -d -p 9080:0880 --name myt9
#我们项目的Dockerfile真实案例
FROM reg.ygops.com/os/alpine:openjdk8
LABEL maintainer sunkai

ADD http://res.ygops.com/sps/tools/simsun.ttf /usr/share/fonts/simsun/simsun.ttf
ADD ./target/blade-warehouse.jar /app.jar

RUN set -x \
    && apk add --no-cache ttf-dejavu fontconfig

EXPOSE 8101

ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]

4. Dockerfile总结

Docker命令大全_第4张图片

六、自定义网络

1. 网络模式详解

  • bridge: 桥接网络(默认)
  • 「host:和宿主机共享」
  • 「none:不配置网络」
  • 「container:容器网络联通」

2. 查看所有的网络模式

# 查看所有的网络模式
docker network ls

3. 创建自定义的网络

# 创建一个网络
docker network create [OPTIONS] NETWORK

# 创建一个mynet
# create 创建
# driver 使用的网络模式
# subnet 子网掩码
# gateway 网关
# mynety 自定义的名称
docker netywork create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynety

4. 使用自定义网络

docker run -d --net mynety --name tom01  tomcat
docker run -d --net mynety --name tom02  tomcat

# 进入到tom02
docker exec -it 7d75a637a90b865fe70259bd4e0b3f5c95133dc65693b05abaf078d31a362529 /bin/bash
# 结果是互通的
ping tom01

5. 容器网络互通

# 把自定义网络和容器打通    容器一个容器两个ip
# 把不在该网络的容器加入当前网络
docker network connect 自定义网络 容器

七、打包SpringBoot jar项目

1. Dockerfile编写

FROM java:8

COPY *.jar /app.jar

CMD ["--server.port=8080"]

EXPOSE 8080

ENTRYPOINT ["java","-jar","/app.jar"]

2. 构建镜像

mkdir idea

cd idea

# 将 Dockerfile与jar包发送到idea目录
# 构建镜像
docker build -t thqtest:1.0 .
# 后面运行略

你可能感兴趣的:(docker)