https://docs.docker.com/reference/
一、基础命令
帮助命令
搜索镜像
「列表解释」
-
「NAME: 镜像名称」
-
「DESCRIPTION: 镜像介绍」
-
「STARS: 镜像的stars」
-
「OFFICIAL: 是否是官方提供的」
-
「AUTOMATED: 是不是自动化的」
拉取镜像
查看所有镜像
「列表解释」
-
「REPOSITORY: 镜像的仓库源」
-
「TAG: 镜像的标签」
-
「IMAGE ID: 镜像的id」
-
「CREATE: 镜像的创建时间」
-
「SIZE: 镜像的大小」
删除镜像
运行镜像
「参数说明」
-
「—name=“Name”:容器名字 tomacat01、tomacat02区分容器」
-
-「e」: 「指定环境变量」
-
「-d:后台守护进程运行」
-
「-it:使用交互方式运行,进入容器查看内容」
-
「-p:指定容器的端口 -p 8080:8080」
-
「-p :主机端口:容器端口」
-
「-p :容器端口」
-
-
「-P:随机指定端口」
-
「-v: 指定数据卷」
- 「-v 容器文件位置:宿主机文件位置」
-
「—volumes-from: 指定容器的数据卷共享(指定谁,就同步谁的数据!继承!)」
- 「—volumes-from:继承自那个容器」(父容器删除不影响已存在数据)
-
「—net: 缺省 bridge」
进入容器
查看容器
退出容器
删除容器
容器的启动与停止
进入当前在正在运行中的命令
将文件从容器拷贝到宿主机
其他常用命令
「查看日志命令」
复制
「参数解析:」
-
「f: 格式化日志」
-
「t: 携带日志时间戳」
查看进程
二、可视化面板
安装
image-20200906161505532
三、提交容器为一个镜像
-
提交容器
「参数解释:」
-
「-a: 作者」
-
「-m: 备注」
-
「-c: 将Dockerfile指令应用于创建的映像」
-
「-p: 提交期间暂停容器(默认为true)」
四、Docker数据卷使用
数据卷的基本使用
mysql安装实战
「命令解析:」
-
「-d: 守护进程运行」
-
「-v: 添加数据卷(宿主机位置和容器位置映射)」
-
「-p: 堆对外映射端口」
-
「-e: 指定环境变量」
-
「—name: 容器名称」
五、Dockerfile
构建镜像文件
Dockerfile概念
-
每个保留关键字(指令)都必须是大写字母
-
执行顺序从上到下
-
#
表示注释 -
每一个指令都会创建提交一个新的镜像层并提交!
Dockerfile语法浅析
-
「FROM: 基础镜像,一切都从这里开始构建」
-
「MAINTAINER: 镜像是谁写的,姓名+邮箱」
-
「RUN: 镜像构建需要运行的命令」
-
「ADD: 添加一个内容,比如需要添加一个tomcat,则需要传递一个压缩包,便于在容器内构建!」
-
「WORKDIR: 镜像的工作目录」
-
「VOLUME: 挂在的目录」
-
「EXPOSE: 暴露端口」
-
「CMD: 一个指令,指定这个容器启动的时候要运行的命令」
-
「ENTRYPOINT: 指定这个容器启动的时候要运行的命令!可以追加命令!」
-
「ONBUILD: 当构建一个被继承的Dockerfile 这个时候就会运行指令,触发命令!」
-
「COPY: 类似与ADD,将文件拷贝到镜像中」
-
「ENV:构建的时候设置环境变量」
六、自定义网络
网络模式详解
-
「bridge: 桥接网络(默认)」
-
「host:和宿主机共享」
-
「none:不配置网络」
-
「container:容器网络联通」
查看所有的网络模式
创建自定义的网络
使用自定义网络
容器网络互通
# 把自定义网络和容器打通 容器一个容器两个ip
# 把不在该网络的容器加入当前网络
docker network connect 自定义网络 容器
七、打包SpringBoot jar项目
Dockerfile编写
构建镜像
八、如何容器化应用
镜像是容器的静态形式,它打包了应用程序的所有运行依赖项,方便保存和传输。使用容器技术运行镜像,就形成了动态的容器,由于镜像只读不可修改,所以应用程序的运行环境总是一致的。
容器化的应用就是指以镜像的形式打包应用程序,然后在容器环境里从镜像启动容器。
我这里就对今天的镜像操作和容器操作做个小结:
-
常用的镜像操作有 docker pull、docker images、docker rmi,分别是拉取镜像、查看镜像和删除镜像。
-
用来启动容器的 docker run 是最常用的命令,它有很多参数用来调整容器的运行状态,对于后台服务来说应该使用 -d。
-
Docker exec 命令可以在容器内部执行任意程序,对于调试排错特别有用。
-
其他常用的容器操作还有 docker ps、docker stop、docker rm,用来查看容器、停止容器和删除容器。
九、 与外界资源共享
如何拷贝容器内的数据
Cp 命令,它可以在宿主机和容器之间拷贝文件,是最基本的一种数据交换功能。
Docker cp 的用法很简单,很类似 Linux 的“cp”“scp”,指定源路径(src path)和目标路径(dest path)就可以了。如果源路径是宿主机那么就是把文件拷贝进容器,如果源路径是容器那么就是把文件拷贝出容器,注意需要用容器名或者容器 ID 来指明是哪个容器的路径。
如何共享主机上的文件
只需要在 docker run 命令启动容器的时候使用 -v 参数就行,具体的格式是“宿主机路径: 容器内路径”。
我还是以 Redis 为例,启动容器,使用 -v 参数把本机的“/tmp”目录挂载到容器里的“/tmp”目录,也就是说让容器共享宿主机的“/tmp”目录
如何实现网络互通
Docker 提供了三种网络模式,分别是 null、host 和 bridge。
-
Null 是最简单的模式,也就是没有网络,但允许其他的网络插件来自定义网络连接,这里就不多做介绍了。
-
Host 的意思是直接使用宿主机网络,相当于去掉了容器的网络隔离(其他隔离依然保留),所有的容器会共享宿主机的 IP 地址和网卡。这种模式没有中间层,自然通信效率高,但缺少了隔离,运行太多的容器也容易导致端口冲突。Host 模式需要在 docker run 时使用 —net=host 参数,下面我就用这个参数启动 Nginx:
- 第三种 bridge,也就是桥接模式,它有点类似现实世界里的交换机、路由器,只不过是由软件虚拟出来的,容器和宿主机再通过虚拟网卡接入这个网桥(图中的 docker 0),那么它们之间也就可以正常的收发网络数据包了
如何分配服务端口号
使用 host 模式或者 bridge 模式,我们的容器就有了 IP 地址,建立了与外部世界的网络连接,接下来要解决的就是网络服务的端口号问题。
一台主机上的端口号数量是有限的,而且多个服务之间还不能够冲突,但我们打包镜像应用的时候通常都使用的是默认端口,容器实际运行起来就很容易因为端口号被占用而无法启动。
解决这个问题的方法就是加入一个“中间层”,由容器环境例如 Docker 来统一管理分配端口号,在本机端口和容器端口之间做一个“映射”操作
端口号映射需要使用 bridge 模式,并且在 docker run 启动容器时使用 -p 参数,形式和共享目录的 -v 参数很类似,用 : 分隔本机端口和容器端口
十、镜像仓库
什么是镜像仓库(Registry)
右边的区域就是镜像仓库,术语叫 Registry,直译就是“注册中心”,意思是所有镜像的 Repository 都在这里登记保管,就像是一个巨大的档案馆。
然后我们再来看左边的“docker pull”,虚线显示了它的工作流程,先到“Docker daemon”,再到 Registry,只有当 Registry 里存有镜像才能真正把它下载到本地。
什么是 Docker Hub
什么是 Docker Hub
“Docker Hub”( https://hub.docker.com/ )。
如何在 Docker Hub 上挑选镜像
Docker Hub 上有官方镜像、认证镜像和非官方镜像的区别。
-
官方镜像(Official image):是指 Docker 公司官方提供的高质量镜像( https://github.com/docker-library/official-images ),都经过了严格的漏洞扫描和安全检测,支持 x 86_64、arm 64 等多种硬件架构,还具有清晰易读的文档,一般来说是我们构建镜像的首选,也是我们编写 Dockerfile 的最佳范例。
-
认证镜像(Verified publisher):也就是认证发行商,比如 Bitnami、Rancher、Ubuntu 等。它们都是颇具规模的大公司,具有不逊于 Docker 公司的实力,所以就在 Docker Hub 上开了个认证账号
-
非官方镜像
-
“半官方”镜像。因为成为“Verified publisher”是要给 Docker 公司交钱的,而很多公司不想花这笔“冤枉钱”,所以只在 Docker Hub 上开了公司账号(比如 OpenResty )
-
第二类就是纯粹的“民间”镜像了,通常是个人上传到 Docker Hub 的,因为条件所限,测试不完全甚至没有测试,质量上难以得到保证,下载的时候需要小心谨慎。
-
Docker Hub 上镜像命名的规则是什么
-
Docker Hub 也使用了同样的规则,就是“用户名 / 应用名”的形式,比如 bitnami/nginx、ubuntu/nginx、rancher/nginx 等等。
-
因为镜像还会有许多不同的版本,也就是“标签”(tag)。
-
直接使用默认的“latest”虽然简单方便
-
通常来说,镜像标签的格式是应用的版本号加上操作系统。
- 另外,有的标签还会加上 slim、fat,来进一步表示这个镜像的内容是经过精简的,还是包含了较多的辅助工具。
-
离线环境该怎么办
-
在内网环境里仿造 Docker Hub,创建一个自己的私有 Registry 服务,比如 Docker Registry,还有 CNCF Harbor,
-
Docker 提供了 save 和 load 这两个镜像归档命令,可以把镜像导出成压缩包,或者从压缩包导入 Docker,而压缩包是非常容易保管和传输的,可以联机拷贝,FTP 共享,甚至存在 U 盘上随身携带。