有哪些做任务网站,有了域名后怎么建设网站,网站开发济南,织梦技术个人网站模板下载从虚拟机到容器 1.环境配置的难题 软件开发最大的麻烦事之一#xff0c;就是环境配置。用户计算机的环境都不相同#xff0c;你怎么知道自家的软件#xff0c;能在那些机器跑起来#xff1f;
用户必须保证两件事#xff1a;操作系统的设置#xff0c;各种库和组件的安装…从虚拟机到容器 1.环境配置的难题 软件开发最大的麻烦事之一就是环境配置。用户计算机的环境都不相同你怎么知道自家的软件能在那些机器跑起来
用户必须保证两件事操作系统的设置各种库和组件的安装。只有它们都正确软件才能运行。举例来说安装一个 Python 应用计算机必须有 Python 引擎还必须有各种依赖可能还要配置环境变量。
如果某些老旧的模块与当前环境不兼容那就麻烦了。开发者常常会说“它在我的机器可以跑了”It works on my machine言下之意就是其他机器很可能跑不了。
环境配置如此麻烦换一台机器就要重来一次旷日费时。很多人想到能不能从根本上解决问题软件可以带环境安装也就是说安装的时候把原始环境一模一样地复制过来。
2.虚拟机 虚拟机virtual machine就是带环境安装的一种解决方案。它可以在一种操作系统里面运行另一种操作系统比如在 Windows 系统里面运行 Linux 系统。应用程序对此毫无感知因为虚拟机看上去跟真实系统一模一样而对于底层系统来说虚拟机就是一个普通文件不需要了就删掉对其他部分毫无影响。
虽然用户可以通过虚拟机还原软件的原始环境。但是这个方案有几个缺点。
资源占用多虚拟机会独占一部分内存和硬盘空间。它运行的时候其他程序就不能使用这些资源了。哪怕虚拟机里面的应用程序真正使用的内存只有 1MB虚拟机依然需要几百 MB 的内存才能运行。 冗余步骤多虚拟机是完整的操作系统一些系统级别的操作步骤往往无法跳过比如用户登录。 启动慢操作系统需要多久启动虚拟机就需要多久。可能要等几分钟应用程序才能真正运行。 3.Linux 容器 由于虚拟机存在这些缺点Linux 发展出了另一种虚拟化技术Linux 容器Linux Containers缩写为 LXC。
Linux 容器不是模拟一个完整的操作系统而是对进程进行隔离。或者说在正常进程的外面套了一个保护层。对于容器里面的进程来说它接触到的各种资源都是虚拟的从而实现与底层系统的隔离。
由于容器是进程级别的相比虚拟机有很多优势。
启动快容器里面的应用直接就是底层系统的一个进程而不是虚拟机内部的进程。所以启动容器相当于启动本机的一个进程而不是启动一个操作系统速度就快很多。 资源占用少容器只占用需要的资源不占用那些没有用到的资源虚拟机由于是完整的操作系统不可避免要占用所有资源。另外多个容器可以共享资源虚拟机都是独享资源。 体积小容器只要包含用到的组件即可而虚拟机是整个操作系统的打包所以容器文件比虚拟机文件要小很多。 总之容器有点像轻量级的虚拟机能够提供虚拟化的环境但是成本开销小得多。
4.Docker Docker 属于 Linux 容器的一种封装提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。
Docker 将应用程序与该程序的依赖打包在一个文件里面。运行这个文件就会生成一个虚拟容器。程序在这个虚拟容器里运行就好像在真实的物理机上运行一样。有了 Docker就不用担心环境问题。
总体来说Docker 的接口相当简单用户可以方便地创建和使用容器把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改就像管理普通的代码一样。
5.Window Wsl Wsl安装https://learn.microsoft.com/zh-cn/windows/wsl/install-manual
列出Wsl正在运行的组件wsl -l -v --all
Docker实现原理简述 1.进程隔离—Namespace Linux NamespaceLinux 命名空间是 Linux 内核Kernel提供的功能它可以隔离一系列的系统资源如 PID进程 IDProcess ID、User ID、Network、文件系统等。
Linux Namespace是在当前运行的系统环境中创建(隔离)另一个进程的运行环境出来并在此运行环境中将一些必要的系统全局资源进行【虚拟化】。进程可以运行在指定的namespace中因此namespace中的每个进程都认为自己拥有所有这些虚拟化的全局资源。
2.资源限制—Linux Cgroups Docker 容器本质依旧是一个进程多个 Docker 容器运行时如果其中一个 Docker 进程占用大量 CPU 和内存就会导致其他 Docker 进程响应缓慢为了避免这种情况可以通过 Linux Cgroups 技术对资源进行限制。
Linux CgroupsLinux Contorl Groups简称 Cgroups可以对一组进程及这些进程的子进程进行资源限制、控制和统计的能力其中包括 CPU、内存、存储、网络、设备访问权限等通过 Cgroups 可以很轻松的限制某个进程的资源占用并且统计该进程的实时使用情况。
Cgroups 由 3 个组件构成分别是 cgroup控制组、subsystem子系统以及 hierarchy层级树3 者相互协同作用。
cgroup 是对进程分组管理的一种机制一个 cgroup 通常包含一组多个进程Cgroups 中的资源控制都以 cgroup 为单位实现。 subsystem 是一组多个资源控制的模块每个 subsystem 会管理到某个 cgroup 上对该 cgroup 中的进程做出相应的限制和控制。 hierarchy 会将一组多个cgroup 构建成一个树状结构Cgropus 可以利用该结构实现继承等功能 3.分层结构—Union File System Docker 镜像是一种分层结构每一层构建在其他层之上从而实现增量增加内容的功能。
Union File System简称UnionFS它是为 Linux 系统设计的将其他文件系统联合到一个联合挂载点的文件系统服务。UnionFS 使用 branch分支将不同文件系统的文件和目录透明地叠加覆盖形成一个单一一致的文件系统此外 UnionFS 使用写时复制Copy on Write简称CoW技术来提高合并后文件系统的资源利用。
Docker 架构 1.基本概念 镜像ImageDocker 镜像Image就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。 容器Container镜像Image和容器Container的关系就像是面向对象程序设计中的类和实例一样镜像是静态的定义容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。 仓库Repository仓库可看成一个代码控制中心用来保存镜像。 Docker 使用客户端-服务器 (C/S) 架构模式使用远程API来管理和创建Docker容器。Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。
2.概念组成 Docker 镜像(Images)是用于创建 Docker 容器的模板比如 Ubuntu 系统。 Docker 容器(Container)是独立运行的一个或一组应用是镜像运行时的实体。 Docker 客户端(Client)通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信。 Docker 主机(Host)是一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。 Docker Registry用来保存镜像可以理解为代码控制中的代码仓库。 Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。一个 Docker Registry 中可以包含多个仓库Repository每个仓库可以包含多个标签Tag每个标签对应一个镜像。通常一个仓库会包含同一个软件不同版本的镜像而标签就常用于对应该软件的各个版本。我们可以通过 仓库名:标签 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签将以 latest 作为默认标签。 Docker Machine是一个简化Docker安装的命令行工具通过一个简单的命令行即可在相应的平台上安装Docker比如VirtualBox、 Digital Ocean、Microsoft Azure。 Docker入门 官方文档
https://docs.docker.com/
Docker Enginehttps://docs.docker.com/engine/Docker核心
Docker Desktophttps://docs.docker.com/desktop/可视化操作。
Docker Composerhttps://docs.docker.com/compose/编排容器。
拓展
Window Linux子系统https://docs.microsoft.com/zh-cn/windows/dev-environment/
1.Docker安装 官方文档上有详细的说明这里以centos7.6作为操作实例。https://docs.docker.com/engine/install/centos/
官方建议如果安装过旧版本先卸载后安装。旧版docker-engine现在被称为docker-ce.
这个可以理解为字符串换行连接符
$ sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
Copy 然后配置yum仓库源命令行开始
安装yum-utils一般都有装
$ yum install -y yum-utils
配置仓库源
$ yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
Copy 开始安装最新版本的 Docker Engine、containerd 和 Docker Compose
yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
Copy 此命令会安装 Docker但不会启动 Docker。它还会创建一个 docker组但是默认情况下它不会将任何用户添加到该组中。
安装完成查看docker版本信息命令如下
$ docker version
或者
$ docker info
Copy 启动docker 命令如下
service 命令的用法
$ sudo service docker start
systemctl 命令的用法
$ sudo systemctl start docker
测试安装是否正常
$ docker run hello-world
提示 docker --help 、docker command --help查看命令的功能说明 Copy 镜像image Docker 把应用程序及其依赖打包在 image 文件里面。只有通过这个文件才能生成 Docker 容器。image 文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件可以生成多个同时运行的容器实例。
镜像是一种轻量级、可执行的独立软件包用来打包软件运行环境和基于运行环境开发的软件它包含运行某个软件所需要的所有内容包括代码运行时一个程序在运行或者在被执行的依赖、库环境变量和配置文件。其实也可以理解为一个文件目录
image 是二进制文件。实际开发中一个 image 文件往往通过继承另一个 image 文件加上一些个性化设置而生成。举例来说你可以在 Ubuntu 的 image 基础上往里面加入 Apache 服务器形成你的 image。
image 文件是通用的一台机器的 image 文件拷贝到另一台机器照样可以使用。一般来说为了节省时间我们应该尽量使用别人制作好的 image 文件而不是自己制作。即使要定制也应该基于别人的 image 文件进行加工而不是从零开始制作。
为了方便共享image 文件制作完成后可以上传到网上的仓库。Docker 的官方仓库 Docker Hub 是最重要、最常用的 image 仓库。此外出售自己制作的 image 文件也是可以的。
相关参考
https://blog.csdn.net/sinat_33087001/article/details/123029844
镜像仓库 1.修改镜像仓库源 添加镜像仓库之后下载镜像时会先从镜像仓库进行下载
以centos为例编辑/etc/docker/daemon.json文件
{ “registry-mirrors”: [“https://alzgoonw.mirror.aliyuncs.com”] }
Copy 然后重启docker
重载配置
$ systemctl daemon-reload
重启docker
$ systemctl restart docker
查看docker信息
$ docker info Copy Window Docker Desktop
打开Docker Desktop应用程序。 点击屏幕右上角的齿轮图标打开设置菜单。 在左侧导航栏中选择Docker Engine选项。 在编辑器中找到或创建一个JSON配置文件。如果已经存在请确保它是可编辑状态。 在JSON配置文件中添加或修改registry-mirrors键的值。将其设置为你想要使用的镜像源地址。如果你想同时使用多个镜像源可以在该键的值中提供一个逗号分隔的列表。 例如假设你要使用阿里云的镜像源你可以将registry-mirrors设置为“registry-mirrors”: [“https://xxxx.mirror.aliyuncs.com”] 保存并关闭配置文件。 重新启动Docker Desktop以使配置更改生效。 2.登录仓库 docker login 登陆到一个Docker镜像仓库如果未指定镜像仓库地址默认为官方仓库 Docker Hubhttps://hub.docker.com/
登录不指定地址默认为官方仓库
$ docker login -u 用户名 -p 密码
Copy 3.退出登录 docker logout
退出指定仓库的登录
$ docker logout [OPTIONS] [SERVER]
Copy 4.搜索镜像 docker search 我们可以从 Docker Hub 网站来搜索镜像Docker Hub 网址为 https://hub.docker.com/
我们也可以使用 docker search 命令来搜索镜像。比如我们需要一个 openresty的镜像来作为我们的 web 服务。我们可以通过 docker search 命令搜索 openresty来寻找适合我们的镜像。
[rootVM-0-11-centos ~]# docker search Openresty NAME DESCRIPTION STARS OFFICIAL AUTOMATED openresty/openresty OpenResty Official Docker Images - a dynamic… 370 [OK] ficusio/openresty Minimalist OpenResty image 22 [OK] 3scale/openresty Latest Openresty with redis and some handy p… 16 [OK]
Copy NAME: 镜像仓库源的名称 DESCRIPTION: 镜像的描述 OFFICIAL: 是否 docker 官方发布 stars: 类似 Github 里面的 star表示点赞、喜欢的意思。 AUTOMATED: 自动构建。 5.拉取镜像 docker pull
拉取指定的镜像name为上方镜像仓库源名称
-a :拉取所有 tagged 镜像
name可以是一个在仓库存在的镜像名也可以是代表镜像的一个远程地址
$ docker pull [OPTIONS] NAME[:TAG|DIGEST]
Copy 6.上传仓库 docker push 用于将本地的镜像上传到镜像仓库,要先登陆到镜像仓库。
docker push [OPTIONS] NAME[:TAG]
上传本地镜像myapache:v1到镜像仓库中。
$ docker push myapache:v1
OPTIONS --disable-content-trust :忽略镜像的校验,默认开启
Copy 向指定远程仓库推送镜像
在本地登录到远程仓库
$ docker login --username[用户名] -p[密码] 远程ip:端口
给本地镜像打标签, [远程ip:端口/自定义路径/*]:[版本号] 就是[标签名:版本号]
$ docker tag [镜像id:标签] [远程ip:端口/自定义路径/*]:[版本号]
推送
$ docker push [远程ip:端口/自定义路径/*]:[版本号]
Copy 实际操作
$ docker tag hello-world daocloud.io/zter/hello-world:v1 $ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest fce289e99eb9 9 weeks ago 1.84 kB hello-world v1 fce289e99eb9 9 weeks ago 1.84 kB hello-world v2 fce289e99eb9 9 weeks ago 1.84 kB daocloud.io/zter/hello-world v1 fce289e99eb9 9 weeks ago 1.84 kB
$ docker push daocloud.io/zter/hello-world:v1
The push refers to a repository [daocloud.io/zter/hello-world] af0b15c8625b: Pushed v1: digest: sha256:39bbd4a41b5d3b164632d3b4a295c0db31139992a8fe985f949dac7ccff7aa54 size: 524
Copy 本地镜像管理 1.查看镜像列表 docker images
docker images [OPTIONS] [REPOSITORY[:TAG]]
Copy OPTIONS说明
-a :列出本地所有的镜像含中间映像层默认情况下过滤掉中间映像层 –digests :显示镜像的摘要信息 -f :显示满足条件的镜像 –format :指定返回值的模板文件 –no-trunc :显示完整的镜像信息 -q :只显示镜像ID。 [rootVM-0-11-centos ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest feb5d9fea6a5 9 months ago 13.3kB
Copy REPOSITORY表示镜像的仓库源 TAG镜像的标签 IMAGE ID镜像ID CREATED镜像创建时间 SIZE镜像大小 2.删除镜像 docker rmi
删除指定镜像
$ docker rmi name
Copy 3.创建历史 docker history
$ docker history [OPTIONS] IMAGE
Copy OPTIONS说明
-H :以可读的格式打印镜像大小和日期默认为true –no-trunc :显示完整的提交记录 -q :仅列出提交记录ID。
查看本地镜像nice/ubuntu:v3的创建历史。
$ docker history nice/ubuntu:v3
Copy 4.镜像归档 dcoker save
$ docker save [OPTIONS] IMAGE [IMAGE…]
Copy OPTIONS 说明
-o :输出到的文件。
将镜像 runoob/ubuntu:v3 生成 my_ubuntu_v3.tar 文档
$ docker save -o my_ubuntu_v3.tar runoob/ubuntu:v3
经过测试导出镜像可以导出容器不行
导出时通过参数-o指定的值必须是一个文件名不能是目录名。 Copy 5.镜像导入 dcoker load 导入使用 docker save 命令导出的镜像。
$ docker load [OPTIONS]
Copy OPTIONS 说明
–input , -i : 指定导入的文件代替 STDIN。 –quiet , -q : 精简输出信息。 6.镜像标签 docker tag 标记本地镜像将其归入某一仓库。
$ docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG] $ docker tag IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
Copy 容器生命周期 1.创建容器 docker create
创建一个容器类似 docker run -d 命令
$ docker create [OPTIONS] IMAGE [COMMAND] [ARG…]
Copy docker create 创建的容器并未实际启动还需要执行 docker start 命令或 docker run 命令以启动容器。docker create 命令常用于在启动容器之前进行必要的设置。 参数类似run。
2.容器运行 docker run
docker run [OPTIONS] IMAGE [COMMAND] [ARG…] Copy -d, --detachfalse 指定容器运行于前台还是后台默认为 false。 -i, --interactivefalse 打开 STDIN用于控制台交互。 -t, --ttyfalse 分配 tty 设备该可以支持终端登录默认为 false。 -u, --user“” 指定容器的用户。 -a, --attach[] 登录容器必须是以 docker run -d 启动的容器。 -w, --workdir“” 指定容器的工作目录。 -c, --cpu-shares0 设置容器 CPU 权重在 CPU 共享场景使用。 -e, --env[] 指定环境变量容器中可以使用该环境变量。 -m, --memory“” 指定容器的内存上限。 -P, --publish-allfalse 指定容器暴露的端口。 -p, --publish[] 指定容器暴露的端口。 -h, --hostname“” 指定容器的主机名。 -v, --volume[] 给容器挂载存储卷挂载到容器的某个目录。-v 主机目录:容器目录
-volumes-from[] 给容器挂载其他容器上的卷挂载到容器的某个目录。-cap-add[] 添加权限。-cap-drop[] 删除权限。-cidfile“” 运行容器后在指定文件中写入容器 PID 值一种典型的监控系统用法。-cpuset“” 设置容器可以使用哪些 CPU此参数可以用来容器独占 CPU。-device[] 添加主机设备给容器相当于设备直通。-dns[] 指定容器的 dns 服务器。-dns-search[] 指定容器的 dns 搜索域名写入到容器的 /etc/resolv.conf 文件。-entrypoint“” 覆盖 image 的入口点。-env-file[] 指定环境变量文件文件格式为每行一个环境变量。-expose[] 指定容器暴露的端口即修改镜像的暴露端口。-link[] 指定容器间的关联使用其他容器的 IP、env 等信息。-lxc-conf[] 指定容器的配置文件只有在指定 --exec-driverlxc 时使用。-name“” 指定容器名字后续可以通过名字进行容器管理links 特性需要使用名字。-network“bridge” 器网络设置bridge 使用 docker daemon 指定的网桥host 容器使用主机的网络container:NAME_or_ID 使用其他容器的网路共享 IP 和 PORT 等网络资源none 容器使用自己的网络类似- -networkbridge但是不进行配置。-privilegedfalse 指定容器是否为特权容器特权容器拥有所有的 capabilities。-restart“no” 指定容器停止后的重启策略: no容器退出时不重启on-failure容器故障退出返回值非零时重启 always容器退出时总是重启。-rmfalse 指定容器停止后自动删除容器(不支持以 docker run -d 启动的容器)。-sig-proxytrue 设置由代理接受并处理信号但是 SIGCHLD、SIGSTOP 和 SIGKILL 不能被代理。 示例
docker run -idt -v /:/home/lnmp --network host centos:centos7 /bin/bash
COMMAND、ARG… 代表容器运行之后要执行的命令行命令和参数 Copy
运行容器并进入bash
$ docker run -it nginx:latest /bin/bash
Copy 3.启动容器docker start
$ docker start [OPTIONS] CONTAINER [CONTAINER…]
Copy Options:
-a, --attach 连接容器的标准输出、标准错误 –detach-keys,覆盖分离容器的键的顺序 -i, --interactive连接容器的标准输入 4.停止容器 docker stop
$ docker stop [OPTIONS] CONTAINER [CONTAINER…]
Copy Options:
-t, --time 在停止之前等待的秒数默认为10s 5.重启容器docker restart
$ docker restart contanier
Copy 6.强制停止 docker kill
$ docker kill container
Copy 7.删除容器 docker rm
docker rm [OPTIONS] CONTAINER [CONTAINER…]
Copy Option参数
-f 通过 SIGKILL 信号强制删除一个运行中的容器。 -l 移除容器间的网络连接而非容器本身。 -v:-v 删除与容器关联的卷。 8.暂停、恢复 docker pause/unpause 暂停、恢复容器内的进程的运行。
$ docker pause CONTAINER [CONTAINER…] $ docker unpause CONTAINER [CONTAINER…]
Copy 9.执行命令 docker exec docker exec 用于在一个运行中的容器内执行command。
docker exec [OPTIONS] CONTAINER COMMAND [ARG…]
Copy OPTIONS说明
–detach, -d 后台运行模式在后台执行命令相关命令。 –detach-keys 覆盖容器后台运行的一些参数信息。 –env, -e 设置环境变量。 –interactive, -i 展示容器输入信息 STDIN。 –privileged 为命令提供一些扩展权限。 –tty, -t 命令行交互模式。 –user, -u 设置用户名。
在指定容器打开一个bash环境的交互式终端
$ docker exec -i -t mynginx /bin/bash
Copy 容器运维 1.列出容器 docker ps
$ docker ps [OPTIONS]
Copy OPTIONS说明
无参 默认显示正在运行的容器。 -a 显示所有的容器包括未运行的。 -f 根据条件过滤显示的内容。
-format 指定返回值的模板文件。 -l 显示最近创建的容器。 -n 列出最近创建的n个容器。-no-trunc 不截断输出。 -q 静默模式只显示容器编号。 -s 显示总的文件大小。 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Copy CONTAINER ID: 容器 ID。 IMAGE: 使用的镜像。 COMMAND: 启动容器时运行的命令。 CREATED: 容器的创建时间。 STATUS: 容器状态。状态有7种created已创建、restarting重启中、running运行中、removing迁移中、paused暂停、exited停止、dead死亡 PORTS: 容器的端口信息和使用的连接类型tcpudp。 NAMES: 自动分配的容器名称。 2.查看容器内正在运行的进程信息 容器运行时不一定有/bin/bash终端来交互执行top命令而且容器还不一定有top命令可以使用docker top来实现查看container中正在运行的进程
$ docker top CONTAINER [ps OPTIONS]
Copy 3.连接容器 docker attach 关联容器的标准输入、标准输出、错误输出到容器到本机
$ docker attach [OPTIONS] CONTAINER
Copy options 说明
–detach-keys 覆盖用于分离容器的键序列 –no-stdin 不要附加标准输入 –sig-proxy 所有接收到的信号代理到进程 4.阻塞容器 docker wait 阻塞容器运行直到容器停止运行同时输出退出的状态码通过状态码判断容器的退出状态。
$ docker wait CONTAINER [CONTAINER…]
Copy 5.端口映射 docker port docker port 命令可以用于列出指定的 Docker容器 的端口映射或者将容器里的端口映射到宿主机。该命令后面的 CONTAINER 可以是容器Id或者是容器名。
$ docker port [OPTIONS] CONTAINER [PRIVATE_PORT[/PROTO]] $ docker port mysql $ docker port mysql 3306/tcp
Copy 6.元数据 docker inspect
$ docker inspect [OPTIONS] NAME|ID [NAME|ID…]
Copy OPTIONS说明
-f 指定返回值的模板文件。 -s 显示总的文件大小。
-type 为指定类型返回JSON。 7.容器重命名 docker rename
$ docker rename CONTAINER NEW_NAME
Copy 8.统计 docker stats docker stats 命令可以用于动态显示 Docker容器 的资源消耗情况包括CPU、内存、网络I/O。docker stats命令也可以指定已停止的容器但是不会返回任何信息。
docker stats [options] [container…]
Copy OPTIONS参数
-all, -a 查看所有容器信息(默认显示运行中的)。-format Go模板展示镜像信息。-no-stream 不展示容器的一些动态信息。 9.更新配置docker update
docker update [OPTIONS] CONTAINER [CONTAINER…]
Copy OPTIONS说明
-cpu-shares 更新 cpu-shares。-kernel-memory 更新内核内存限制。-memory 更新内存限制。-restart 更新重启策略。 10.容器导出 docker export 将 Docker容器 里的文件系统作为一个 tar 归档文件导出。docker export 命令后面的 CONTAINER 可以是容器Id或者是容器名。
$ docker export [OPTIONS] CONTAINER
Copy OPTIONS说明
-o 将输入内容写到文件。 11.导入镜像 docker import 用于导入export导出的镜像归档文件。
$ docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]] $ docker images nicen/ubuntu:v4 Copy 区别、侧重点 参考
https://blog.csdn.net/JineD/article/details/118761569
1.docker save和docker export的区别 docker save保存的是镜像image docker export保存的是容器container 2.docker load和docker import的区别 docker load用来载入镜像包 docker import用来载入容器包但两者都会恢复为镜像 docker load不能对载入的镜像重命名 docker import可以为镜像指定新名称。 3.打包镜像和打包容器的区别 从文件的角度来说打包容器仅仅会打包容器的当前状态类似服务器快照会丢弃所有的历史记录和元数据信息。而打包镜像则是导出完整的历史记录和元信息。
Docker日志 1.实时事件 docker events 从服务器获取实时事件
docker events [OPTIONS]
Copy OPTIONS说明
-f 根据条件过滤事件 –since 从指定的时间戳后显示所有事件; –until 流水时间显示到指定的时间为止 2.历史版本 dcoker history 打印出指定的 Docker镜像 的历史版本信息。
docker history [OPTIONS] IMAGE
Copy OPTIONS说明
docker history -H, --human 以可读的格式打印镜像大小和日期默认为 true。 docker history --no-trunc 显示完整的提交记录。 docker history -q, --quiet 仅列出提交记录 ID。 3.输出日志 docker log 获取容器运行时输出的日志信息
docker logs [OPTIONS] CONTAINER
Copy docker logs --details 显示 log 信息的额外的详细信息。docker logs -f, --follow 跟踪日志输出。docker logs --since 显示某个开始时间的所有日志。docker logs --tail 仅列出最新 N 条容器日志。 docker logs -t, --timestamps 显示时间戳。 Docker rootfs命令 1.docker commit docker commit 命令用于根据 Docker容器 的更改创建一个新的 Docker镜像。该命令后面的 CONTAINER 可以是容器Id或者是容器名。
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
Copy OPTIONS说明
-a, --author string 作者。 -c, --change list 应用 dockerfile 指令来创建图像。 -m, --message string 提交信息。 -p, --pause 提交期间暂停容器默认为true。 2.docker cp
从容器复制到宿主机
$ docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
从宿主机复制到容器
$ docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
Copy OPTIONS说明
-a, --archive 归档模式复制所有UID / GID信息 -L, --follow-link 总是跟在源地址符号链接 命令说明
docker cp 命令类似于 Linux 中的 cp -a 命令递归复制目录下的所有子目录和文件。 docker cp 命令中的 - 表示通过标准输入/输出设备以流的方式读取或写入 tar 文件。 本地文件系统中的路径可以是绝对路径也可以是相对路径相对于当前命令执行的路径。 容器中的路径都是相对容器的 / 根路径。 docker cp 命令操作的容器可以是在运行状态也可以是停止状态。 docker cp 命令不能复制 /proc、 /sys、 /dev、 tmpfs 和容器中 mount 的路径下的文件。 3.docker diff docker diff 命令用于比较一个 Docker容器 不同版本提交的文件差异。该命令后面的 CONTAINER 可以是容器Id或者是容器名。
docker diff命令会列出 3 种容器内文件状态变化A - Add, D - Delete, C - Change 的列表清单。
$ docker diff CONTAINER
Copy 制作镜像 1.docker build docker build 命令可以用来使用 Dockerfile 创建镜像。
$ docker build [OPTIONS] PATH | URL | -
Copy 相关文档https://www.runoob.com/docker/docker-build-command.html、https://www.runoob.com/docker/docker-dockerfile.html
2.docker Dockerfile Dockerfile 是一个用来构建镜像的文本文件文本内容包含了一条条构建镜像所需的指令和说明。
相关说明https://www.runoob.com/docker/docker-dockerfile.html
3.docker composer Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose您可以使用 YML 文件来配置应用程序需要的所有服务。然后使用一个命令就可以从 YML 文件配置中创建并启动所有服务。
相关说明https://www.runoob.com/docker/docker-compose.html
Docker容器网络 原文
https://blog.csdn.net/qq_42418169/article/details/119102917
1.介绍 容器网络实质上也是由Docker为应用程序所创造的虚拟环境的一部分它能让应用从宿主机操作系统的网络环境中独立出来形成容器自有的网络设备、IP协议栈、端口套接字、IP路由表、防火墙等等与网络相关的模块。
Docker入门到精通从安装开始持续记录
Docker
Docker网络中有三个核心概念沙盒Sandbox、网络Network、端点Endpoint。
沙盒提供了容器的虚拟网络栈也即端口套接字、IP路由表、防火墙等内容。隔离容器网络与宿主机网络形成了完全独立的容器网络环境。 网络可以理解为Docker内部的虚拟子网网络内的参与者相互可见并能够进行通讯。Docker的虚拟网络和宿主机网络是存在隔离关系的其目的主要是形成容器间的安全通讯环境。 端点位于容器或网络隔离墙之上的洞主要目的是形成一个可以控制的突破封闭的网络环境的出入口。当容器的端点与网络的端点形成配对后就如同在这两者之间搭建了桥梁便能够进行数据传输了。 这三者形成Docker网络核心模型也就是容器网络模型Container Network Model。
2.Docker的网络实现 容器网络模型为容器引擎提供了一套标准的网络对接范式Docker中实现这套范式的是Docker所封装的libnetwork模块。
Docker官方提供了五种Docker网络驱动分别是Bridge Driver、Host Driver、Overlay Driver、MacLan Driver、None Driver。Bridge和 Overlay在开发中使用频率较高。
host主机模式 相当于Vmware中的桥接模式与宿主机在同一个网络中但没有独立IP地址 bridge桥梁模式 相当于Vmware中的Nat模式容器使用独立network Namespace并连接到docker0虚拟网卡默认模式。 overlay覆盖模式 Overlay网络是指在不改变现有网络基础设施的前提下通过某种约定通信协议把二层报文封装在IP报文之上的新的数据格式。 container容器模式 在理解了host模式后这个模式也就好理解了。这个模式指定新创建的容器和已经存在的一个容器共享一个Network Namespace而不是和宿主机共享。新创建的容器不会创建自己的网卡配置自己的IP而是和一个指定的容器共享IP、端口范围等。同样两个容器除了网络方面其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过lo网卡设备通信。 none无网络模式 该模式将容器放置在它自己的网络栈中但是并不进行任何配置。实际上该模式关闭了容器的网络功能在以下两种情况下是有用的容器并不需要网络例如只需要写磁盘卷的批处理任务。 3.默认网络docker 0 当你安装Docker时它会自动创建三个网络。你可以使用docker network ls命令列出这些网络
C:UsersAdmindocker network ls NETWORK ID NAME DRIVER SCOPE ff3025b2bb75 bridge bridge local 4db4c96b8fad host host local 075e1e639650 none null local
Copy Docker内置这三个网络运行容器时你可以在run运行容器时使用–network标志来指定容器应连接到哪个网络。
不指定network时默认将容器连接到bridge网络。
4.host网络模式 相当于Vmware中的桥接模式与宿主机在同一个网络中但没有独立IP地址。
Docker使用了Linux的Namespaces技术来进行资源隔离如PID Namespace隔离进程Mount Namespace隔离文件系统Network Namespace隔离网络等。
一个Network Namespace提供了一份独立的网络环境包括网卡、路由、Iptable规则等都与其他的Network Namespace隔离。一个Docker容器一般会分配一个独立的Network Namespace。但如果启动容器的时候使用host模式那么这个容器将不会获得一个独立的Network Namespace而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡配置自己的IP等而是使用宿主机的IP和端口。
5.bridge网络模式 相当于Vmware中的Nat模式容器使用独立network Namespace并连接到docker0虚拟网卡默认模式。通过docker0网桥以及Iptables nat表配置与宿主机通信bridge模式是Docker默认的网络设置此模式会为每一个容器分配Network Namespace、设置IP等并将一个主机上的Docker容器连接到一个虚拟网桥上。
Docker 默认的 bridge 网络是不支持通过 Docker DNS 服务进行域名解析的自定义桥接网络是可以的。
5.1Bridge模式的拓扑 当Docker server启动时会在主机上创建一个名为docker0的虚拟网桥此主机上启动的Docker容器会连接到这个虚拟网桥上。
虚拟网桥的工作方式和物理交换机类似这样主机上的所有容器就通过交换机连在了一个二层网络中。接下来就要为容器分配IP了Docker会从RFC1918所定义的私有IP网段中选择一个和宿主机不同的IP地址和子网分配给docker0连接到docker0的容器就从这个子网中选择一个未占用的IP使用。
如一般Docker会使用172.17.0.0/16这个网段并将172.17.0.1/16分配给docker0网桥在主机上使用ifconfig命令是可以看到docker0的可以认为它是网桥的管理接口在宿主机上作为一块虚拟网卡使用。单机环境下的网络拓扑如下主机地址为10.10.0.186/24。
Docker入门到精通从安装开始持续记录
Dokcer
Docker完成以上网络配置的过程大致是这样的
在主机上创建一对虚拟网卡veth pair设备。veth设备总是成对出现的它们组成了一个数据的通道数据从一个设备进入就会从另一个设备出来。因此veth设备常用来连接两个网络设备。 Docker将veth pair设备的一端放在新创建的容器中并命名为eth0。另一端放在主机中以veth65f9这样类似的名字命名并将这个网络设备加入到docker0网桥中 从docker0子网中分配一个IP给容器使用并设置docker0的IP地址为容器的默认网关。 6.docker overlay模式 Overlay网络是指在不改变现有网络基础设施的前提下通过某种约定通信协议把二层报文封装在IP报文之上的新的数据格式。这样不但能够充分利用成熟的IP路由协议进程数据分发而且在Overlay技术中采用扩展的隔离标识位数能够突破VLAN的4000数量限制支持高达16M的用户并在必要时可将广播流量转化为组播流量避免广播数据泛滥。
因此Overlay网络实际上是目前最主流的容器跨节点数据传输和路由方案。
要想使用Docker原生Overlay网络需要满足下列任意条件
Docker 运行在Swarm 使用键值存储的Docker主机集群 Docker Network
docker network inspect # 根据网络的ID展示网络的详细信息 docker network ls # 展示所有的网络以列表形式 docker network create # 创建一个自定义网络 docker network connect # 连接一个容器到指定网络上 docker network disconnect # 让一个容器从指定网络上断开 docker network prune # 删除所有未使用的网络 docker network rm # 根据网络的ID删除一个或多个网络
Copy Docker Machine Docker Machine 是 Docker 官方提供的一个工具它可以帮助我们在远程的机器上安装 Docker或者在虚拟机 host 上直接安装虚拟机并在虚拟机中安装 Docker。我们还可以通过 docker-machine 命令来管理这些虚拟机和 Docker。