2024年最完整的Docker v19

打包镜像


打包镜像有两种方法,推荐使用Dockerfie方法

使用commit打包

将部署好的容器进行打包。

$ docker commit [-a][-m][-p] <容器> <用户名/镜像名:版本>

-a “” 镜像作者

-m “” 打包备注

-p 不停止镜像打包

使用Dockerfile文件打包

第一步:创建Dockerfile文件

#Dockerfile

FORM <基础镜像:Tag>

MAINTAINER <用户名> “联系方式” #新版本推荐使用 LABEL maintainer=value

RUN <linux命令>

EXPOSE <端口号>

说明:

这个EXPOSE指令实际上并不发布端口。它作为构建映像的人和运行容器的人之间的一种文档类型,而这些港口将被发布。若要在运行容器时实际发布端口,请使用-p旗上docker run若要发布和映射一个或多个端口,或-P标志以发布所有公开的端口,并将它们映射到高阶端口。

第二步:执行docker build命令

$ docker build [-t <镜像名>][–no-cache] <上下文路径>

-t 镜像名称

–no-cache 不使用缓存构建

上下文路径:

docker build 会将这个路径下所有的文件都打包上传给 Docker 引擎,

引擎内将这些内容展开后,就能获取到所有指定上下文中的文件了

注意不要将 / 作为<上下文路径>,因为他会把硬盘上所有的数据发给docker守护进程.

.dockerignore

创建.dockerignore文件,通过在该文件里添加匹配目录,可以在执行docker build -t xxx .命令时不上传匹配的目录。

#.dockerignore

/temp #匹配根目录下的子目录内所有的以temp开头的文件和文件夹

//temp* #匹配根目录下的子目录的子目录内所有的以temp开头的文件和文件夹

*/temp #匹配所有目录内的以temp开头的文件和文件夹

!my* #在排除文件及文件夹中允许上传my开头的文件及文件夹

Docker远程访问


Docker的配置文件在Centos7 /lib/systemd/system/docker.service

Docker守护进程Linux上配置文件的默认位置是/etc/docker/daemon.json或者通过--config-file参数可用于指定非默认位置。

Docker守护进程启动选项

配置开始

第一步:配置远程的Docker

vi /lib/systemd/system/docker.service

修改[Service]->ExecStart

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H 0.0.0.0:2375

重启Docker

systemctl daemon-reload && systemctl restart docker

第二步:配置本地的系统环境变量

windows

set DOCKER_HOST=tcp://远程ip

Centos7

export DOCKER_HOST=tcp://远程ip

注意:以上配置都是临时的

测试

docker info

是否有结果

如果想更准确的测试,可以先将远程的Docker守护进程配置一个labels,然后执行命令即可

提示:

其实配置远程还有一种方法就是配置docker守护进程的配置文件daemon.json通过配置该文件下的hosts内的值也可以实现,需要注意的是这两种方法只需要使用其中一种即可。

docker.service

[Service]->ExecStart

ExecStart=/usr/bin/dockerd --containerd=/run/containerd/containerd.sock

daemon.json

{

“hosts”:[

"0.0.0.0:2375",
"unix:///var/run/docker.sock"

]

}

Dockerfile指令


关键知识点

  • 上下文路径:
上下文路径 是在使用`docker build`的时候最后一个参数锁指定的路径,通过该路径`docker客户端`会将该路径的下的所有文件都会发送给`docker守护进程`,然后在用户执行`COPY`和`ADD`的时候进行文件复制。如果有不想发送的文件可以向`.dockerignore`中写入匹配忽略路径。
  • RUN的执行过程
RUN cd /app
RUN echo "hello" > world.txt
每一个 `RUN` 都是启动一个容器、执行命令、然后提交存储层文件变更。第一层 `RUN cd /app` 的执行仅仅是当前进程的工作目录变更,一个内存上的变化而已,其结果不会造成任何文件变更。而到第二层的时候,启动的是一个全新的容器,跟第一层的容器更完全没关系,自然不可能继承前一层构建过程中的内存变化。

FORM

这个FROM指令初始化新构建阶段,并设置基础镜像以后的指令。因此Dockerfile必须有FROM指令。Image可以是任何有效的Image它特别容易从公共储存库下载。

FROM [–platform=<平台>] [:] [AS ]

–platform 指定平台 如,linux/amd64, linux/arm64,或windows/amd64;默认自动

image 镜像名称

tag 类似于版本

As 起别名

ARG

ARG是在当前文件中设置变量,通过ARG定义变量可以在该文件内引用。

ARG VERSION=latest

FROM busybox:${VERSION} # FORM busybox:latest

LABEL

LABEL指令将元数据添加到Image中。一个LABEL是键值对。若要在LABEL值内使用引号和反斜杠,就像在命令行解析中一样。

LABEL = = = …

例子:

LABEL “com.example.vendor”=“ACME Incorporated”

LABEL com.example.label-with-value=“foo”

LABEL version=“1.0”

LABEL description="This text illustrates \

that label-values can span multiple lines."

EXPOST

EXPOSE指令通知Docker容器在运行时侦听指定的网络端口。您可以指定端口是否侦听TCP或UDP,如果未指定协议,则默认为TCP。

实际上他并无卵用。这里指定的端口仅仅只是作为文档给其他的人看。

EXPOSE [/…]

port 端口号

protocol 协议 tcp或udp

ENV

设置环境变量,该环境变量类似于linux中export的设置方法,区别在于他是永久的,所以他可以在后续的shell命令里使用该值。

ENV

ENV = =…

例子:

ENV HI HELLO

RUN echo “${HI}” # Hello

COPY

复制指令,从上下文目录中复制文件或者目录到容器里指定路径。

COPY [–chown=:] <源路径1>… <目标路径>

COPY [–chown=:] [“<源路径1>”,… “<目标路径>”]

[–chown=:] 用户改变复制到容器内文件的拥有者和属组。

<源路径> 源文件或者源目录,这里可以是通配符表达式,其通配符规则要满足 Go 的 filepath.Match 规则

ADD

ADD 指令和 COPY 的使用格式一致(同样需求下,官方推荐使用 COPY)。功能也类似,不同之处如下:

  • ADD 的优点:在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径>。
  • ADD 的缺点:在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。

RUN

执行shell命令

CMD <shell 命令>

CMD [“<可执行文件或命令>”,“”,“”,…]

CMD

类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:

  • CMD 在docker run 时运行。
  • RUN 是在 docker build。

作用:为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。

注意:如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。

CMD <shell 命令>

CMD [“<可执行文件或命令>”,“”,“”,…]

CMD [“”,“”,…] # 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数

ENTRYPOINT

类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。

但是, 如果运行 docker run 时使用了 --entrypoint 选项,此选项的参数可当作要运行的程序覆盖 ENTRYPOINT 指令指定的程序。

优点:在执行 docker run 的时候可以指定 ENTRYPOINT 运行所需的参数。

注意:如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。

可以搭配 CMD 命令使用:一般是变参才会使用 CMD ,这里的 CMD 等于是在给 ENTRYPOINT 传参,以下示例会提到。

ENTRYPOINT [“”,“”,“”,…]

WORKDIR

指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。(WORKDIR 指定的工作目录,必须是提前创建好的)。

docker build 构建镜像过程中的,每一个 RUN 命令都是新建的一层。只有通过 WORKDIR 创建的目录才会一直存在。

WORKDIR <工作目录路径>

USER

用于指定执行后续命令的用户和用户组,这边只是切换后续命令执行的用户(用户和用户组必须提前已经存在)。

USER <用户名>[:<用户组>]

HEALTHCHECK

用于指定某个程序或者指令来监控 docker 容器服务的运行状态。

HEALTHCHECK [选项] CMD <命令> #设置检查容器健康状况的命令

HEALTHCHECK NONE:如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指令

HEALTHCHECK [选项] CMD <命令> # CMD 后面跟随的命令使用,可以参考 CMD 的用法。

ONBUILD

他不会在本次docker build的时候执行,会在子镜像构建的时候执行后面的<Dockerfile指令>。

ONBUILD <Dockerfile指令>

MAINTAINER (官方不推荐)

这个是将该镜像的维护人的信息写到镜像中,这是一个旧版的写法。

MAINTAINER

代替方案

LABEL maintainer=

SHELL

通过该指令可以指定使用的shell解释器。

SHELL [“<Shell解释器>”, “<默认参数>”]

VOLUME

定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。

在启动容器 docker run 的时候,我们可以通过 -v 参数修改挂载点。

作用:

  • 避免重要的数据,因容器重启而丢失,这是非常致命的。
  • 避免容器不断变大。

VOLUME [“<路径1>”, “<路径2>”…]

VOLUME <路径>

Dockerfile的构建原理


docker会在执行每条Dockerfile的指令时会对FROM引入的基础镜像进行操作。

每操作一步会运行镜像->生成容器->修改容器->提交容器->生成新的镜像->删除容器,然后在新的镜像上继续修改提交,反复如此,最后生成出最终镜像。这些在中间生成的镜像被称为中间层镜像。

我们可以通过docker history <镜像名>来看生成镜像的过程。

Dockerfile源文件和上下文目录

2020/01/18 11:34 17 .dockerignore

2020/01/18 14:52 277 Dockerfile

2020/01/18 14:45

src

生成一个node的docker环境

FROM centos

LABEL maintainer=“wm 15804854160@163.com”

RUN curl --silent --location https://rpm.nodesource.com/setup_12.x | bash - \

&& yum -y install nodejs

WORKDIR /root/project

COPY ./ ./

RUN cd src \

&& npm install

EXPOSE 8080:80

构建过程

E:\PJ\程序设计\docker容器技术\dome\nodejsDockerfile>docker build -t demo .

Sending build context to Docker daemon 22.02kB

Step 1/7 : FROM centos

—> 470671670cac

Step 2/7 : LABEL maintainer=“wm 15804854160@163.com” #修改镜像

—> Running in 0a9bdf29772d #运行0a9bdf29772d容器

Removing intermediate container 0a9bdf29772d #删除0a9bdf29772d容器

—> 6bed20c22168 #生成新的镜像

Step 3/7 : RUN curl --silent --location https://rpm.nodesource.com/setup_12.x | bash - && yum -y install nodejs

—> Running in a6f52a14bfbc

Installing the NodeSource Node.js 12.x repo…

Inspecting system…

  • rpm -q --whatprovides redhat-release || rpm -q --whatprovides centos-release || rpm -q --whatprovides cloudlinux-release || rpm -q --whatprovides sl-release

  • uname -m

Confirming “el8-x86_64” is supported…

  • curl -sLf -o /dev/null ‘https://rpm.nodesource.com/pub_12.x/el/8/x86_64/nodesource-release-el8-1.noarch.rpm’

As yum will try to install Node.js from the AppStream repository

instead of the NodeSource repository, the AppStream’s version of Node.js has to be disabled.

Run sudo yum module enable -y nodejs to reactivate the AppStream’s Node.js repository.

  • yum module disable -y nodejs

CentOS-8 - AppStream 1.3 MB/s | 5.9 MB 00:04

CentOS-8 - Base 190 kB/s | 4.0 MB 00:21

CentOS-8 - Extras 367 B/s | 2.1 kB 00:05

Dependencies resolved.

================================================================================

Package Architecture Version Repository Size

================================================================================

Disabling modules:

nodejs

Transaction Summary

================================================================================

Complete!

Downloading release setup RPM…

  • mktemp

  • curl -sL -o ‘/tmp/tmp.w4Aojk1oBL’ ‘https://rpm.nodesource.com/pub_12.x/el/8/x86_64/nodesource-release-el8-1.noarch.rpm’

Installing release setup RPM…

  • rpm -i --nosignature --force ‘/tmp/tmp.w4Aojk1oBL’

Cleaning up…

  • rm -f ‘/tmp/tmp.w4Aojk1oBL’

Checking for existing installations…

  • rpm -qa ‘node|npm’ | grep -v nodesource

Run sudo yum install -y nodejs to install Node.js 12.x and npm.

You may also need development tools to build native addons:

sudo yum install gcc-c++ make

To install the Yarn package manager, run:

curl -sL https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo

sudo yum install yarn

Node.js Packages for Enterprise Linux 8 - x86_6 37 kB/s | 94 kB 00:02

Last metadata expiration check: 0:00:01 ago on Sun Jan 19 08:42:03 2020.

Dependencies resolved.

================================================================================

Package Arch Version Repository Size

================================================================================

Installing:

nodejs x86_64 2:12.14.1-1nodesource nodesource 22 M

Installing dependencies:

python2 x86_64 2.7.16-12.module_el8.1.0+219+cf9e6ac9 AppStream 109 k

python2-libs x86_64 2.7.16-12.module_el8.1.0+219+cf9e6ac9 AppStream 6.0 M

python2-pip-wheel

noarch 9.0.3-14.module_el8.1.0+219+cf9e6ac9 AppStream 1.2 M

python2-setuptools-wheel

noarch 39.0.1-11.module_el8.1.0+219+cf9e6ac9 AppStream 289 k

Installing weak dependencies:

python2-pip noarch 9.0.3-14.module_el8.1.0+219+cf9e6ac9 AppStream 2.0 M

python2-setuptools

noarch 39.0.1-11.module_el8.1.0+219+cf9e6ac9 AppStream 643 k

Enabling module streams:

python27 2.7

Transaction Summary

================================================================================

Install 7 Packages

Total download size: 32 M

Installed size: 104 M

Downloading Packages:

(1/7): python2-2.7.16-12.module_el8.1.0+219+cf9 165 kB/s | 109 kB 00:00

(2/7): python2-pip-9.0.3-14.module_el8.1.0+219+ 571 kB/s | 2.0 MB 00:03

(3/7): python2-pip-wheel-9.0.3-14.module_el8.1. 409 kB/s | 1.2 MB 00:02

(4/7): python2-libs-2.7.16-12.module_el8.1.0+21 1.5 MB/s | 6.0 MB 00:03

(5/7): python2-setuptools-39.0.1-11.module_el8. 1.7 MB/s | 643 kB 00:00

(6/7): python2-setuptools-wheel-39.0.1-11.modul 805 kB/s | 289 kB 00:00

(7/7): nodejs-12.14.1-1nodesource.x86_64.rpm 1.7 MB/s | 22 MB 00:12


Total 1.8 MB/s | 32 MB 00:17

warning: /var/cache/dnf/AppStream-02e86d1c976ab532/packages/python2-2.7.16-12.module_el8.1.0+219+cf9e6ac9.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY

CentOS-8 - AppStream 1.6 MB/s | 1.6 kB 00:00

Importing GPG key 0x8483C65D:

Userid : “CentOS (CentOS Official Signing Key) security@centos.org

Fingerprint: 99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D

From : /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

Key imported successfully

warning: /var/cache/dnf/nodesource-c1a37d2599ffab0c/packages/nodejs-12.14.1-1nodesource.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID 34fa74dd: NOKEY

Node.js Packages for Enterprise Linux 8 - x86_6 1.6 MB/s | 1.6 kB 00:00

Importing GPG key 0x34FA74DD:

Userid : “NodeSource gpg-rpm@nodesource.com

Fingerprint: 2E55 207A 95D9 944B 0CC9 3261 5DDB E8D4 34FA 74DD

From : /etc/pki/rpm-gpg/NODESOURCE-GPG-SIGNING-KEY-EL

Key imported successfully

Running transaction check

Transaction check succeeded.

Running transaction test

Transaction test succeeded.

Running transaction

Preparing : 1/1

Installing : python2-setuptools-wheel-39.0.1-11.module_el8.1.0+21 1/7

Installing : python2-pip-wheel-9.0.3-14.module_el8.1.0+219+cf9e6a 2/7

Installing : python2-libs-2.7.16-12.module_el8.1.0+219+cf9e6ac9.x 3/7

Installing : python2-pip-9.0.3-14.module_el8.1.0+219+cf9e6ac9.noa 4/7

Installing : python2-setuptools-39.0.1-11.module_el8.1.0+219+cf9e 5/7

Installing : python2-2.7.16-12.module_el8.1.0+219+cf9e6ac9.x86_64 6/7

Running scriptlet: python2-2.7.16-12.module_el8.1.0+219+cf9e6ac9.x86_64 6/7

Running scriptlet: nodejs-2:12.14.1-1nodesource.x86_64 7/7

Installing : nodejs-2:12.14.1-1nodesource.x86_64 7/7

Running scriptlet: nodejs-2:12.14.1-1nodesource.x86_64 7/7

Verifying : python2-2.7.16-12.module_el8.1.0+219+cf9e6ac9.x86_64 1/7

Verifying : python2-libs-2.7.16-12.module_el8.1.0+219+cf9e6ac9.x 2/7

Verifying : python2-pip-9.0.3-14.module_el8.1.0+219+cf9e6ac9.noa 3/7

Verifying : python2-pip-wheel-9.0.3-14.module_el8.1.0+219+cf9e6a 4/7

Verifying : python2-setuptools-39.0.1-11.module_el8.1.0+219+cf9e 5/7

Verifying : python2-setuptools-wheel-39.0.1-11.module_el8.1.0+21 6/7

Verifying : nodejs-2:12.14.1-1nodesource.x86_64 7/7

Installed:

nodejs-2:12.14.1-1nodesource.x86_64

python2-pip-9.0.3-14.module_el8.1.0+219+cf9e6ac9.noarch

python2-setuptools-39.0.1-11.module_el8.1.0+219+cf9e6ac9.noarch

python2-2.7.16-12.module_el8.1.0+219+cf9e6ac9.x86_64

python2-libs-2.7.16-12.module_el8.1.0+219+cf9e6ac9.x86_64

python2-pip-wheel-9.0.3-14.module_el8.1.0+219+cf9e6ac9.noarch

python2-setuptools-wheel-39.0.1-11.module_el8.1.0+219+cf9e6ac9.noarch

Complete!

Removing intermediate container a6f52a14bfbc

—> 29a93e78f5e2

Step 4/7 : WORKDIR /root/project

—> Running in fe701814cbe8

Removing intermediate container fe701814cbe8

—> eda559d13b87

Step 5/7 : COPY ./ ./

—> da28659ab618

Step 6/7 : RUN cd src && npm install

—> Running in e96081f27d89

npm WARN src@1.0.0 No description

npm WARN src@1.0.0 No repository field.

added 50 packages from 37 contributors and audited 126 packages in 169.473s

found 0 vulnerabilities

Removing intermediate container e96081f27d89

—> da2897f4c613

Step 7/7 : EXPOSE 8080:80

—> Running in db58b4e3fe1f

Removing intermediate container db58b4e3fe1f

—> 1447d55955ca

Successfully built 1447d55955ca

Successfully tagged demo:latest

用命令查看构建过程和中间层镜像

E:\PJ\程序设计\docker容器技术\dome\nodejsDockerfile>docker history demo

IMAGE CREATED CREATED BY SIZE COMMENT

1447d55955ca 13 minutes ago /bin/sh -c #(nop) EXPOSE 8080:80 0B

da2897f4c613 13 minutes ago /bin/sh -c cd src && npm install 2.31MB

da28659ab618 16 minutes ago /bin/sh -c #(nop) COPY dir:51e2c52b32624331c… 15.4kB

eda559d13b87 16 minutes ago /bin/sh -c #(nop) WORKDIR /root/project 0B

29a93e78f5e2 16 minutes ago /bin/sh -c curl --silent --location https://… 144MB

6bed20c22168 17 minutes ago /bin/sh -c #(nop) LABEL maintainer=wm 15804… 0B

470671670cac 33 hours ago /bin/sh -c #(nop) CMD [“/bin/bash”] 0B

33 hours ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B

4 days ago /bin/sh -c #(nop) ADD file:aa54047c80ba30064… 237MB

Docker容器网络基础


工具安装

$ yum install -y bridge-utils # 网桥管理工具

$ yum install -y net-tools # 安装ifconfig,自行查看自己的linux不是必须的

网桥管理

网桥相当于网络中的交换机(不完全正确,但是可以这么想)。

$ brctl addbr br0 # 新建br0网桥

$ brctl addif br0 eth0 # 让eth0 成为 br0 的一个 interface

ifconfig命令

ifconfig工具不仅可以被用来简单地获取网络接口配置信息,还可以修改这些配置。用ifconfig命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在。要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件了。

$ ifconfig # 查看网卡状态

$ ifconfig eth0 {up|down} # 启动或关闭eth0网卡

$ ifconfig eth0 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255 # 配置eth0的Ip地址,子网地址,广播地址

配置Docker的网桥

$ brctl addbr br0 # 新建br0网桥

$ ifconfig br0 192.168.1.100 netmask 255.255.255.0 # 配置br0的Ip地址,子网地址

$ vi /lib/systemd/system/docker.service

添加docker守护进程的启动参数 -b=br0

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -b=br0

$ systemctl daemon-reload && systemctl restart docker

Docker容器间的通信


默认启动参数的—icc=true,所以docker容器间是允许通信的的。

$ docker run -it --link <运行中容器名>:<标识名> <镜像名>

运行中的容器名 必须是运行中的容器

标识名 是在该容器中调用的名称,他类型于localhost

指定容器间通信

首先配置docker守护进程的启动参数

$ vi /lib/systemd/system/docker.service

添加docker守护进程的启动参数 —icc=false --iptables=true

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --icc=false --iptables=true

–iptables=true 将策略写入宿主机iptables进行隔离控制

然后使用 --link参数启动

$ docker run -it --link <运行中容器名>:<标识名> <镜像名>

运行中的容器名 必须是运行中的容器

标识名 是在该容器中调用的名称,他类型于localhost

现在该容器就与<运行中容器名>是连通的。

Docker容器的数据卷(Data Volume)


数据卷是一个特殊的目录,他可以绕开联合文件系统,为多个docker容器提供访问。

作用

  • 存储永久的数据

  • 共享给多个docker的访问空间

特点

  • 数据卷可以在容器直接共享

  • 宿主机可以直接操作数据卷里的数据

  • 数据卷的变化不会影响镜像

  • 数据卷一直存在,即使挂载(加载)数据卷的容器坏掉,也不会影响数据卷

挂载方式

  • volumes:Docker管理宿主机文件系统的一部分,默认位于 /var/lib/docker/volumes 目录

  • bind mounts:意为着可以存储在宿主机系统的任意位置

  • tmpfs:挂载存储在宿主机系统的内存中,而不会写入宿主机的文件系统(不常用)

数据卷的操作

docker volume COMMAND

COMMAND:

create <数据卷名> 创建数据卷

inspect <数据卷名> 显示一个或多个卷上的详细信息

ls 列出所有的数据卷 包括临时的

prune 删除没有用的数据卷

rm <数据卷名> 删除数据卷

基础使用

命令方式挂载数据卷

docker run -it -v <宿主机路径|数据卷名>:<容器内的路径>[:ro]

-v 挂载数据卷

ro 只读权限

Dockerfile挂载

FROM centos

VOLUME [ “/data” ]

这里的/data是容器内的路径

因为没有指定宿主机的位置所以他默认挂载到

/var/lib/docker/volumes/xxx/_data

xxx 是哈希值

共享其他容器的数据卷

docker run -it --volumes-from <容器名称> # 创建容器并且其他容器的数据卷

注意:在不指定宿主机路径时创建的数据卷容器会在删除引用他的容器后系统会自动删除这个临时的数据卷

Docker跨主机连接


Weave通过创建虚拟网络使docker容器能够跨主机通信并能够自动相互发现。

第一步:安装weave

curl -L git.io/weave -o /usr/local/bin/weave #下载

chmod a+x /usr/local/bin/weave #赋予执行权限

第二步:启动weave

host1(master):

IP:10.130.0.1/8

weave launch

启动weave

eval $(weave env)

进入weave环境

关闭weave需要执行下面这条

eval $(weave env --restore) && weave stop

docker run --name masterhost -it centos

启动一个容器名为masterhost

host2:

IP:10.130.0.2/8

weave launch 10.130.0.1

启动weave,并连接到host1

eval $(weave env)

进入weave环境

关闭weave需要执行下面这条

eval $(weave env --restore) && weave stop

docker run --name node1host -it centos

启动一个容器名为 node1host

第三步:测试

host1(master)->root@masterhost:

ping node1host

通过√

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后

前15.PNG

前16.PNG

由于文档内容过多,为了避免影响到大家的阅读体验,在此只以截图展示部分内容,详细完整版的JavaScript面试题文档,或更多前端资料可以点此处获取

cker容器能够跨主机通信并能够自动相互发现。

第一步:安装weave

curl -L git.io/weave -o /usr/local/bin/weave #下载

chmod a+x /usr/local/bin/weave #赋予执行权限

第二步:启动weave

host1(master):

IP:10.130.0.1/8

weave launch

启动weave

eval $(weave env)

进入weave环境

关闭weave需要执行下面这条

eval $(weave env --restore) && weave stop

docker run --name masterhost -it centos

启动一个容器名为masterhost

host2:

IP:10.130.0.2/8

weave launch 10.130.0.1

启动weave,并连接到host1

eval $(weave env)

进入weave环境

关闭weave需要执行下面这条

eval $(weave env --restore) && weave stop

docker run --name node1host -it centos

启动一个容器名为 node1host

第三步:测试

host1(master)->root@masterhost:

ping node1host

通过√

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-zOPp2P2R-1712390671977)]

[外链图片转存中…(img-G4cMnKel-1712390671977)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

[外链图片转存中…(img-LWw71L83-1712390671978)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后

[外链图片转存中…(img-k3ivGRpi-1712390671978)]

[外链图片转存中…(img-qpHOcqGb-1712390671978)]

由于文档内容过多,为了避免影响到大家的阅读体验,在此只以截图展示部分内容,详细完整版的JavaScript面试题文档,或更多前端资料可以点此处获取

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值