docker命令
1 docker images [OPTIONS] 2 -a: 列出本地所有的镜像(含中间映像层) 3 -q:只显示镜像ID. 4 --digests: 显示镜像的摘要信息 5 --no-trunc:显示完整的镜像信息 6 7 docker search [OPTIONS] 镜像名字 8 --no-trunc:显示完整的镜像描述 9 -s: 列出收藏数不小于指定值的镜像 10 --automated: 只列出automated build类型的镜像 11 12 docker pull 镜像名字:latest(不加默认最新版本) 13 14 15 docker rmi -f 某个镜像的名字 可以删除多个it 16 17 docker rmi -f 某个镜像名字ID 可以删除多个 18 19 docker rmi -f $(docker images -qa) 删除所有镜像 20 21 22 新建并启动容器 23 docker run [OPTIONS] IMAGE 24 OPTIONS: --name '容器新名字': 为容器指定一个名称 25 -d: 后台运行容器,并返回容器ID,也即启动守护容器 26 -i:以交互模式运行容器,通常与-t同时使用 27 -t:为容器重新分配一个伪输入终端,通常与-i同时使用
-h:主机名(自定义)
--rm: 表示容器退出后自动删除容器
-e: 设置环境变量 k=v
28 -P:随机端口映射 29 -p:指定端口映射,有以下四种格式 30 ip:hostPort:containerPort 31 ip::containerPort 32 hostPort:containerPort 33 containerPort 34 --restart:重启策略
no 容器不自动重启(默认)
on-failure 仅当容器非正常退出时(退出状态非0)才会重启
always 无论退出状态如何,总是重启容器
unless-stopped 除非用户明确地停止了容器,否则总是重启容器,即使宿主机重启了
--privileged=true
如果是CentOS7安全模块会比之前系统版本加强,不安全的会先禁止,所以目录挂载的情况被默认为不安全的行为,
在SELinux里面挂载目录被禁止掉了额,如果要开启,我们一般使用--privileged=true命令,扩大容器的权限解决挂载目录没有权限的问题,也即
使用该参数,container内的root拥有真正的root权限,否则,container内的root只是外部的一个普通用户权限。
35 36 列出当前所有正在运行的容器 37 docker ps [OPTIONS] 38 OPTIONS: -a: 列出当前 所有正在运行的容器+历史上运行过的 39 -l:显示最近创建容器 40 -n:显示最近n个创建的容器 41 -q:静默模式,只显示容器编号 42 --no-trunc:不截断输出 43 44 退出容器 45 exit 容器停止退出 46 ctrl+P+Q 容器不停止退出 47 启动容器 48 docker start 容器ID或容器名 49 重启容器 50 docker restart 容器容ID容器名 51 停止容器 52 docker stop 容器ID或容器名 53 强制停止容器 54 docker kill 容器ID或容器名 55 删除已停止的容器 56 docker rm 已停止的容器ID或容器名 57 58 一次性删除多个容器 59 docker rm -f$(docker ps -a -q) 60 docker ps -a -q | xargs docker rm 61 62 重要 63 重要 64 重要 65 docker run -d 容器名 启动守护式容器 66 docker logs -f -t --tail 容器ID 查看容器日志 67 -t 是加入时间戳 68 -f 跟随最新的日志打印 69 --tail 数字 显示最后多少条 70 docker inspect 容器ID 查看容器内部细节 71 docker exec -it 容器ID bashShell 72 重新进入docker attach 容器ID 73 上述两个区别 74 attach 75 直接进入容器启动命令的终端, 不会启动新的进程 76 exec 77 是在容器中打开新的终端,并且可以启动新的进程 78 docker cp 容器ID:容器内路径 目的主机路径 从容器内拷贝文件到主机上 79 80 docker commit 提交容器副本使之成为一个新的镜像 81 docker commit -m='提交的描述信息' -a='作者' 容器ID 要创建的目标镜像名:[标签名] 82 83 数据卷(相当于redis中的持久化) 84 直接命令添加 85 docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名字 86 docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名字 (容器中只读) 87 DockerFile添加 88 根目录下新建mydocker文件并进入 89 可在Dockerfile中使用VOLUME指令来给镜像添加一个或多个数据卷 90 File构建 91 92 docker build后生成镜像 ------->最后获得一个新镜像 93 docker build -f /自己在宿主机上创建的文件名路径 -t 新镜像名字 94 run容器 95 通过上述步骤,容器内的卷目录地址已经知道对应的主机目录地址啦 96 备注: 97 Docker挂载主机目录Docker访问出现cannot open directory.:Permission denied 98 解决办法:在挂载目录后多加一个--privileged=true参数即可 99 100 数据卷容器(数据共享) 101 先启动一个父容器dc01 102 docker run -it --name dc01 容器名称 103 dc02/dc03继承处dc01 104 docker run -it --name dc02 --volumes-from dc01 容器名称 105 回到dc01可以看到02/03各自添加的都能共享了 106 删除dc01,dc02修改后dc03可以访问的 107 删除dc02后dc03也可以访问 108 新建dc04继承dc03后再删除dc03 ,都可以访问 109 结论:容器之间配置信息的传递,数据的生命周期一直持续到没有容器使用它为止
1 DockerFile 2 DockerFile是用来构建Docker镜像构建文件,是由一系列命令和参数构成的脚本 3 构建三步骤 编写DockerFile文件 docker build docker run 4 5 DockerFile的解析过程 6 DockerFile内容基础知识 7 每条保留字指令都必须为大写字母且后面要跟随至少一个参数 8 指令按照从上到下,顺序执行 9 #表示注释 10 每条指令都会创建一个新的镜像层,并对镜像进行提交 11 Docker执行DockerFile的大致流程 12 docker从基础镜像运行一个容器 13 执行一条指令并对容器作出修改 14 执行类似docker commit的操作提交一个新的镜像层 15 docker再基于刚提交的镜像运行一个新容器 16 执行dcokerfile中的一条指令直到所有指令都执行完成 17 DockerFile体系结构(保留字指令) 18 FROM 19 基础镜像,当前新镜像是基于哪个镜像的 20 MAINTAINER 21 镜像维护者的姓名和邮箱地址 22 RUN 23 容器构建的时候需要运行的命令 24 EXPOSE 25 当前容器对外暴露出的端口号 26 WORKDIR 27 指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点 28 ENV 29 用来在构建镜像过程中设置环境变量 30 ENV MY_PATH /usr/mytest 31 这个环境变量可以在后续的任何RUN指令中使用,这就如同在命令前面指定了环境 变量前缀一样 32 也可以在其它指令中直接使用这些环境变量,例如: WORKDIR $MY_PATH 33 ADD 34 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包 35 COPY 36 类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中<源路径>的文件/目录复制到新的一层镜像内的<目标路径>位置 37 VOLUME 38 容器数据卷,用于数据保存和持久化工作 39 CMD 40 指定一个容器启动时要运行的命令 41 DockerFile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run 之后的参数替换 42 ENTRYPOINT 43 指定一个容器启动时要运行的命令 44 ENTRYPOINT的目的和CMD一样(每个指令才都生效),都是在指定容器启动程序及参数 45 ONBUILD 46 当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的ONBUILD被触发
网络相关命令
# 查看网络列表
docker network ls
# 查看网络详细信息
docker network inspect brigde(网络名称)
# 查看容器详细信息
docker inspect mysql_master(容器名称)
# 创建网络
docker network create --driver bridge(网络模式) bridge-test01(网络名称)
# 创建网络(自己设置网关和子网段)
docker network create --driver bridge --gateway 172.99.0.1 --subnet 172.99.0.0/16 bridge-test02
# 断开容器和网络之前联系
docker network disconnect 网络名称 容器名称
# 连接容器和网络
docker network connect 网络名称 容器名称