Docker基本命令
目录
docker search
docker search [OPTIONS] TERM
OPTIONS说明:
-
--automated :只列出 automated build类型的镜像;
-
--no-trunc :显示完整的镜像描述;
-
-s :列出收藏数不小于指定值的镜像。
用于在docker仓库中搜索镜像, 例如搜索 java
这样做的缺点很明显, 因为你不知道搜索结果对应的这些镜像内部封装的是什么, 大部分时候我们都是在docker Hub 官网来搜索镜像的, 访问 https://hub.docker.com/ , 登录用户
点击去就可以看到镜像的具体内容, 就可以按照需求选择仔细想要的镜像.
docker pull
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
OPTIONS说明:
- -a :拉取所有 tagged 镜像
- --disable-content-trust :忽略镜像的校验,默认开启
拉取刚刚选择的的镜像
直接pull 没有输入tag 的话就会默认使用 latest , 要指定tag 可以使用 镜像名称:tag 的格式,
下面的列表是这个镜像所依赖的基础镜像, 镜像是由一些基础的镜像叠加起来的, 而且这些基础镜像是可以通用的, 比如这个进行用了 5040bd298390 那么下个镜像再次用 5040bd298390 的时候就可以直接引用了.
这个表示就完成镜像的拉取了
docker images
docker images [OPTIONS] [REPOSITORY[:TAG]]
OPTIONS 说明
- -a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
- --digests :显示镜像的摘要信息;
- -f :显示满足条件的镜像;
- --format :指定返回值的模板文件;
- --no-trunc :显示完整的镜像信息;
- -q :只显示镜像ID。
可以查看本地一已经拉取可以使用的镜像
docker run
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS说明:
-
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-
-d: 后台运行容器,并返回容器ID;
-
-i: 以交互模式运行容器,通常与 -t 同时使用;
-
-p: 端口映射,格式为:主机(宿主)端口:容器端口
-
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-
--name="nginx-lb": 为容器指定一个名称;
-
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
-
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-
-h "mars": 指定容器的hostname;
-
-e username="ritchie": 设置环境变量;
-
--env-file=[]: 从指定文件读入环境变量;
-
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
-
-m :设置容器使用内存最大值;
-
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
-
--link=[]: 添加链接到另一个容器;
-
--expose=[]: 开放一个端口或一组端口
运行一下刚刚拉取的Java镜像
[docker@VM_121_116_centos ~]$ docker run -it java java -version
-it 使用交互模式, 结果显示容器的 jdk 版本为1.8
我们在来 pull 一个redis 的镜像
[docker@VM_121_116_centos ~]$ docker pull redis
run一下redis
[docker@VM_121_116_centos ~]$ docker run -p 6379:6379 --name redis -d redis redis-server --appendonly yes
这里 -p 映射端口, 访问宿主机6379即可访问到容器的6379 , --name 定义容器名称 -d 在后台运行, 最后是在容器内执行
redis-server --appendonly yes 开启 redis 持久化配置
小结:
决定容器的运行方式,前台执行还是后台执行
docker run后面追加-d=true或者-d,那么容器将会运行在后台模式。 docker exec来进入到到该容器中,或者attach重新连接容器的会话
进行交互式操作(例如Shell脚本),那我们必须使用-i -t参数同容器进行数据交互
docker run时没有指定--name,那么deamon会自动生成一个随机字符串UUID
Docker时有自动化的需求,你可以将containerID输出到指定的文件中(PIDfile): --cidfile=""
--cidfile=""
Docker的容器是没有特权的,例如不能在容器中再启动一个容器。这是因为默认情况下容器是不能访问任何其它设 备的。但是通过"privileged",容器就拥有了访问任何其它设备的权限
docker ps
docker ps [OPTIONS]
OPTIONS说明:
-
-a :显示所有的容器,包括未运行的。
-
-f :根据条件过滤显示的内容。
-
--format :指定返回值的模板文件。
-
-l :显示最近创建的容器。
-
-n :列出最近创建的n个容器。
-
--no-trunc :不截断输出。
-
-q :静默模式,只显示容器编号。
-
-s :显示总的文件大小。
查看运行的容器的状况, 有那些已经创建的容器, 看看刚刚创建的redis, 同时创建的Java容器停止了, 要使用 -a 参数才行
docker create
docker create 是创建一个容器, 参数和 docker run 是一致的. 但是他只是创建不会启动,
例如我们创建一个mysql的容器
docker create -p 23306:3306 --name mysql:5.6 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
-e 是添加环境变量, 设定mysql的 root 密码
执行完毕后是容器是create状态, 没有运行
docker start/stop/restart
docker start/stop/restart [OPTIONS] CONTAINER [CONTAINER...]
分别用于 启动/停止/重启容器, 刚刚新建状态的容器就可以使用 start 来重启 docker start 后面可以跟容器名或者容器ID.
docker start e8abf8c09a26 和 docker start mysql5.6 作用一致
docker start e8abf8c09a26
docker exec
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
OPTIONS说明:
-
-d :分离模式: 在后台运行
-
-i :即使没有附加也保持STDIN 打开
-
-t :分配一个伪终端
用于访问运行的容器的内部
交互模式进入刚刚新建的 mysql5.6 的镜像,
[docker@VM_121_116_centos ~]$ docker exec -it mysql5.6 /bin/bash
root@e8abf8c09a26:/# tail -30f /var/log/mysql/error.log
2019-02-06 07:07:03 485 [Note] InnoDB: Using Linux native AIO
2019-02-06 07:07:03 485 [Note] InnoDB: Using CPU crc32 instructions
2019-02-06 07:07:03 485 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2019-02-06 07:07:03 485 [Note] InnoDB: Completed initialization of buffer pool
2019-02-06 07:07:03 485 [Note] InnoDB: Highest supported file format is Barracuda.
2019-02-06 07:07:03 485 [Note] InnoDB: 128 rollback segment(s) are active.
执行 exit 退出
当然 后面也可以直接跟命令, 这样就不会进入容器里面, 而是输出执行结果
[docker@VM_121_116_centos ~]$ docker exec mysql5.6 env
docker rm
docker rm [OPTIONS] CONTAINER [CONTAINER...]
OPTIONS说明:
-
-f :通过SIGKILL信号强制删除一个运行中的容器
-
-l :移除容器间的网络连接,而非容器本身
-
-v :-v 删除与容器关联的卷
删除容器, 不能删除运行中的容器, 运行的容器, 必须先stop, 再删除, docker rm 同样后面可以跟容器名称或者容器ID
比如删除 刚刚的Java容器
[docker@VM_121_116_centos ~]$ docker rm 6915333292ea
docker rmi
docker rmi [OPTIONS] IMAGE [IMAGE...]
OPTIONS说明:
-
-f :强制删除;
-
--no-prune :不移除该镜像的过程镜像,默认移除;
用于删除拉取到本地的镜像
刚刚java的容器移除了, 我们再把镜像删掉
[docker@VM_121_116_centos ~]$ docker rmi d23bdf5b1b1b