Docker的基本使用

文章目录

    • Docker的基本使用
      • 1.1 准备工作
        • 1.1.1 安装、启动以及卸载
      • 1.2 常用命令
        • 1.2.1 docker镜像基本使用
        • 1.2.2 容器的使用
      • 1.3 Docker可视化管理
        • 1.3.1 portainer
      • 1.4 Docker镜像
        • 1.4.1 镜像介绍
        • 1.4.2 镜像分层
        • 1.4.3 自制镜像
        • 1.4.3 dockerhub 的使用
      • 1.5 容器数据卷
        • 1.5.1 容器数据卷介绍
        • 1.5.2 数据卷的使用
        • 1.5.3 dockerfile制作镜像
      • 1.6 docker网络
        • 1.6.1 docker网络介绍
        • 1.6.2 容器互联
        • 1.6.3 容器互联-自定义网络
        • 1.6.4 容器与网络的联通
        • 参考

Docker命令示意图:

image-20200605232847592

1.1 准备工作

1.1.1 安装、启动以及卸载

docker install 官方文档

(1)centos安装docker

  • 删除旧版本

    sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine
    
  • The contents of /var/lib/docker/, including:

    • images
    • containers
    • volumes
    • networks
  • The Docker Engine package is now called docker-ce.

(2)安装

  • 安装时使用稳定版仓库

    sudo yum install -y yum-utilssudo yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo
    
    • 使用其他仓库

      nightly:

      sudo yum-config-manager --enable docker-ce-nightly
      

      test channel:

      sudo yum-config-manager --enable docker-ce-test
      
    • 取消使用特定仓库:

      sudo yum-config-manager --disable docker-ce-nightly
      sudo yum-config-manager --disable docker-ce-test
      
  • 安装Docker引擎(最新版本)

    sudo yum install docker-ce docker-ce-cli containerd.io
    
    • 安装其他版本

      检查可用版本

      yum list docker-ce --showduplicates | sort -rdocker-ce.x86_64  3:18.09.1-3.el7                     docker-ce-stable
      docker-ce.x86_64  3:18.09.0-3.el7                     docker-ce-stable
      docker-ce.x86_64  18.06.1.ce-3.el7                    docker-ce-stable
      docker-ce.x86_64  18.06.0.ce-3.el7  
      

      安装特定版本:

      sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
      
    • 脚本安装:

      Warning:Always examine scripts downloaded from the internet before running them locally.

      curl -fsSL https://get.docker.com -o get-docker.sh
      sudo sh get-docker.sh
      

(3)启动docker

  • 启动

    sudo systemctl start docker
    
  • 开机启动docker守护进程服务

    sudo systemctl enable docker
    
  • 重启服务

    sudo systemctl daemon-reload
    sudo systemctl restart docker
    

(4)卸载

  • 卸载docker

    sudo yum remove docker-ce docker-ce-cli containerd.io
    
  • 删除容器,卷,自定义配置文件

    sudo rm -rf /var/lib/docker
    

1.2 常用命令

docker reference

1.2.1 docker镜像基本使用

(1)镜像加速

  • 创建或修改/etc/docker/daemon.json文件,修改为如下形式

    {"registry-mirrors": ["https://e9cvqj3d.mirror.aliyuncs.com","http://hub-mirror.c.163.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn"]
    }
    

    阿里云镜像加速

  • 重启生效

    sudo systemctl daemon-reload
    sudo systemctl restart docker
    

(2)使用镜像

  • 搜索镜像

    docker search image_name
    
  • 使用latest版本镜像

    docker pull image_name
    
    • 指定版本

      docker pull image_name:tag
      

docker hub

(3)查看镜像列表

  • 查看下载的镜像

    docker images -hUsage:  docker images [OPTIONS] [REPOSITORY[:TAG]]
    List images
    Options:-a, --all             Show all images (default hides intermediateimages)--digests         Show digests-f, --filter filter   Filter output based on conditions provided--format string   Pretty-print images using a Go template--no-trunc        Don't truncate output-q, --quiet           Only show numeric IDs
    

(4)删除镜像

  • 删除镜像

    docker rmi [OPTIONS] IMAGE [IMAGE...]
    

    选项:

    Options:-f, --force      Force removal of the image--no-prune   Do not delete untagged parents
    

1.2.2 容器的使用

(1)创建容器并启动

  • docker run命令以镜像为模板作为容器执行

  • 注意:如果运行的容器没有前台进程运行则该容器会直接自杀

    • 可以使用top,tail命令查看日志文件来制造前台进程防止自杀

    常用选项:

    • -d:后台方式运行

    • -e Command:指定容器应用参数

    • -it:以终端交互方式运行

    • --name=:指定创建的容器的名称(容器都只能使用唯一的名)

    • -rm:使用完后边删除容器

    • -p [主机IP:][docker内应用IP]

    所有命令选项:

    sudo docker run --helpUsage:  docker run [OPTIONS] IMAGE [COMMAND] [ARG...]Run a command in a new containerOptions:--add-host list                  Add a custom host-to-IPmapping (host:ip)-a, --attach list                    Attach to STDIN, STDOUT or STDERR--blkio-weight uint16            Block IO (relative weight),between 10 and 1000, or 0 todisable (default 0)--blkio-weight-device list       Block IO weight (relativedevice weight) (default [])--cap-add list                   Add Linux capabilities--cap-drop list                  Drop Linux capabilities--cgroup-parent string           Optional parent cgroup for thecontainer--cidfile string                 Write the container ID to the file--cpu-period int                 Limit CPU CFS (Completely FairScheduler) period--cpu-quota int                  Limit CPU CFS (Completely FairScheduler) quota--cpu-rt-period int              Limit CPU real-time period inmicroseconds--cpu-rt-runtime int             Limit CPU real-time runtime inmicroseconds-c, --cpu-shares int                 CPU shares (relative weight)--cpus decimal                   Number of CPUs--cpuset-cpus string             CPUs in which to allowexecution (0-3, 0,1)--cpuset-mems string             MEMs in which to allowexecution (0-3, 0,1)-d, --detach                         Run container in backgroundand print container ID--detach-keys string             Override the key sequence fordetaching a container--device list                    Add a host device to the container--device-cgroup-rule list        Add a rule to the cgroupallowed devices list--device-read-bps list           Limit read rate (bytes persecond) from a device (default [])--device-read-iops list          Limit read rate (IO persecond) from a device (default [])--device-write-bps list          Limit write rate (bytes persecond) to a device (default [])--device-write-iops list         Limit write rate (IO persecond) to a device (default [])--disable-content-trust          Skip image verification(default true)--dns list                       Set custom DNS servers--dns-option list                Set DNS options--dns-search list                Set custom DNS search domains--domainname string              Container NIS domain name--entrypoint string              Overwrite the defaultENTRYPOINT of the image-e, --env list                       Set environment variables--env-file list                  Read in a file of environmentvariables--expose list                    Expose a port or a range of ports--gpus gpu-request               GPU devices to add to thecontainer ('all' to pass all GPUs)--group-add list                 Add additional groups to join--health-cmd string              Command to run to check health--health-interval duration       Time between running the check(ms|s|m|h) (default 0s)--health-retries int             Consecutive failures needed toreport unhealthy--health-start-period duration   Start period for the containerto initialize before startinghealth-retries countdown(ms|s|m|h) (default 0s)--health-timeout duration        Maximum time to allow onecheck to run (ms|s|m|h)(default 0s)--help                           Print usage-h, --hostname string                Container host name--init                           Run an init inside thecontainer that forwardssignals and reaps processes-i, --interactive                    Keep STDIN open even if notattached--ip string                      IPv4 address (e.g., 172.30.100.104)--ip6 string                     IPv6 address (e.g., 2001:db8::33)--ipc string                     IPC mode to use--isolation string               Container isolation technology--kernel-memory bytes            Kernel memory limit-l, --label list                     Set meta data on a container--label-file list                Read in a line delimited fileof labels--link list                      Add link to another container--link-local-ip list             Container IPv4/IPv6 link-localaddresses--log-driver string              Logging driver for the container--log-opt list                   Log driver options--mac-address string             Container MAC address (e.g.,92:d0:c6:0a:29:33)-m, --memory bytes                   Memory limit--memory-reservation bytes       Memory soft limit--memory-swap bytes              Swap limit equal to memoryplus swap: '-1' to enableunlimited swap--memory-swappiness int          Tune container memoryswappiness (0 to 100) (default -1)--mount mount                    Attach a filesystem mount tothe container--name string                    Assign a name to the container--network network                Connect a container to a network--network-alias list             Add network-scoped alias forthe container--no-healthcheck                 Disable anycontainer-specified HEALTHCHECK--oom-kill-disable               Disable OOM Killer--oom-score-adj int              Tune host's OOM preferences(-1000 to 1000)--pid string                     PID namespace to use--pids-limit int                 Tune container pids limit (set-1 for unlimited)--platform string                Set platform if server ismulti-platform capable--privileged                     Give extended privileges tothis container-p, --publish list                   Publish a container's port(s)to the host-P, --publish-all                    Publish all exposed ports torandom ports--read-only                      Mount the container's rootfilesystem as read only--restart string                 Restart policy to apply when acontainer exits (default "no")--rm                             Automatically remove thecontainer when it exits--runtime string                 Runtime to use for this container--security-opt list              Security Options--shm-size bytes                 Size of /dev/shm--sig-proxy                      Proxy received signals to theprocess (default true)--stop-signal string             Signal to stop a container(default "SIGTERM")--stop-timeout int               Timeout (in seconds) to stop acontainer--storage-opt list               Storage driver options for thecontainer--sysctl map                     Sysctl options (default map[])--tmpfs list                     Mount a tmpfs directory-t, --tty                            Allocate a pseudo-TTY--ulimit ulimit                  Ulimit options (default [])-u, --user string                    Username or UID (format:<name|uid>[:<group|gid>])--userns string                  User namespace to use--uts string                     UTS namespace to use-v, --volume list                    Bind mount a volume--volume-driver string           Optional volume driver for thecontainer--volumes-from list              Mount volumes from thespecified container(s)-w, --workdir string                 Working directory inside thecontainer
    

(2)docker容器进程查看

  • 查看运行进程

    sudo docker ps
    
    • 选项

      Usage:  docker ps [OPTIONS]List containersOptions:-a, --all             Show all containers (default shows just running)-f, --filter filter   Filter output based on conditions provided--format string   Pretty-print containers using a Go template-n, --last int        Show n last created containers (includes allstates) (default -1)-l, --latest          Show the latest created container (includesall states)--no-trunc        Don't truncate output-q, --quiet           Only display numeric IDs-s, --size            Display total file sizes
      

(3)docker容器的启动、终止、进入、退出、暂停、继续

  • 启动已经停止容器

    docker start [OPTIONS] CONTAINER [CONTAINER...]
    
    • 选项:

      Start one or more stopped containersOptions:-a, --attach                  Attach STDOUT/STDERR and forward signals--checkpoint string       Restore from this checkpoint--checkpoint-dir string   Use a custom checkpoint storage directory--detach-keys string      Override the key sequence fordetaching a container-i, --interactive             Attach container's STDIN
      
  • 通过默认终端来连接正在运行中的容器

    docker attach [OPTIONS] CONTAINER
    
    • 选项:

      Attach local standard input, output, and error streams to a running containerOptions:--detach-keys string   Override the key sequence for detachinga container--no-stdin             Do not attach STDIN--sig-proxy            Proxy all received signals to theprocess (default true)
      
  • 通过一个新的终端进入正在运行中的容器

     docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
    
    • 选项:

      Run a command in a running containerOptions:-d, --detach               Detached mode: run command in the background--detach-keys string   Override the key sequence for detachinga container-e, --env list             Set environment variables-i, --interactive          Keep STDIN open even if not attached--privileged           Give extended privileges to the command-t, --tty                  Allocate a pseudo-TTY-u, --user string          Username or UID (format:<name|uid>[:<group|gid>])-w, --workdir string       Working directory inside the container
      
  • 暂停容器

    docker pause CONTAINER [CONTAINER...]
    
  • 恢复暂停

    docker unpause CONTAINER [CONTAINER...]
    
  • 停止容器

    docker stop [OPTIONS] CONTAINER [CONTAINER...]
    

    选项:

    • -t, --time int Seconds to wait for stop before killing it (default 10)
  • 强制退出容器

    docker kill [OPTIONS] CONTAINER [CONTAINER...]
    
    • -s, --signal string Signal to send to the container (default "KILL")

    该方式可能发生数据丢失

(4)文件复制

  • 主机文件复制到容器

    docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
    
  • 容器文件复制到主机中

    docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
    
    • 选项:

      Copy files/folders between a container and the local filesystemUse '-' as the source to read a tar archive from stdin
      and extract it to a directory destination in a container.
      Use '-' as the destination to stream a tar archive of a
      container source to stdout.Options:-a, --archive       Archive mode (copy all uid/gid information)-L, --follow-link   Always follow symbol link in SRC_PATH
      

(5)容器的删除

  • docker创建临时使用的容器如果不删除会一直占用空间

    docker rm containerID/name
    
    • 选项:

      Options:-f, --force     Force the removal of a running container (uses SIGKILL)-l, --link      Remove the specified link-v, --volumes   Remove anonymous volumes associated with the container
      
  • 删除所有创建的docker容器

    docker rm `docker ps -a -q`
    

1.3 Docker可视化管理

1.3.1 portainer

(1)安装并启动portainer

  • 运行

    docker run -d -p 7072:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
    
    • 搜索时可以搜到中文版但是考虑稳定性与安全性不建议使用。

(2)查看效果

  • 登录网站设置好个人账号密码后,连接localhost:

    image-20200605234424100

  • 点击local进行操作

    image-20200605234639478


1.4 Docker镜像

点击查看源网页

1.4.1 镜像介绍

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件

(1)UnionFS(联合文件系统)

  • UnionFS(联合文件系统):Union文件系统是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下,Union文件系统是Dokcer镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的镜像。

  • 特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统加载起来,这样最终的文件系统会包含所有的底层文件和目录

(2)查看镜像信息

  • 查看镜像信息

     docker image inspect [OPTIONS] IMAGE:[tag] [IMAGE:[tag]...]
    
    • 选项:

      Display detailed information on one or more imagesOptions:-f, --format string   Format the output using the given Go template
      

1.4.2 镜像分层

(1)Docker镜像加载原理

  • docker的镜像实际上是由一层一层的文件系统构成,这种层级的文件系统UnionFS。

  • bootfs(boot file system)主要包含bootloaderkernel

    • bootloader主要是引导加载kernel,Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的linux/unix系统是一样的,包含boot加载器内核。
    • 当boot加载完之后整个内核就都在内存中了,此时内存的使用权已经由bootfs交给内核了,此时系统也会卸载bootfs
  • rootfs(root file system)在bootfs之上包含的是经典Linux系统中的/dev,/proc/bin,/ect等目录与文件,可以将rootfs看作linux发行版;

  • 对以一个精简的OS,rootfs可以很小,只需要包括最基本的命令、工具和程序库就行,因为底层直接用host和kernel,自己只需要提供rootfs就行。由此可见对于不同的Linux发行版,bootfs基本是一致的,rootfs会有差别,因此不同的发行版可以公用bootfs

image-20200606001419566

image-20200606001709096

(2)镜像分层介绍

  • 当下载部分文件已有的情况下是可以跳过下载,实际上表示本机内已经存在改层文件。

    image-20200606003828220

  • 启动镜像时,一个新的可写层会加载到镜像的顶层。这一层通常称为"容器层",之下是"镜像层"。

    容器层可以读写,容器所有发生文件变更写都发生在这一层。镜像层只允许读取,read-only

    img

docker镜像原理 参考

1.4.3 自制镜像

(1)提交自己的镜像

  • 从容器中创建一个新的镜像

     docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
    
    • 选项:

      Create a new image from a container's changesOptions:-a, --author string    Author (e.g., "John Hannibal Smith <hannibal@a-team.com>")-c, --change list      Apply Dockerfile instruction to the created image-m, --message string   Commit message-p, --pause            Pause container during commit (default true)
      
      • 默认情况下,在提交映像时,将暂停提交的容器及其进程。这降低了在创建提交过程中遇到数据损坏的可能性。如果此行为是不需要的,则将选项设置为 false。--pause

    示例:

    • 以运行的容器制造镜像( 96d596566a10 为容器ID)

      docker commit -m="portainer备份" -a="倪守顺" 96d596566a10 portainer-back:1.0
      
    • 查看镜像

      [root@niss ~]# docker images
      REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
      portainer-back        1.0                 27e6310e3582        26 seconds ago      79.1MB
      wordpress             latest              b301a17258fe        2 days ago          540MB
      nginx                 latest              4392e5dad77d        3 days ago          132MB
      portainer/portainer   latest              cd645f5a4769        3 days ago          79.1MB
      redis                 latest              36304d3b4540        7 days ago          104MB
      mysql                 5.7                 a4fdfd462add        2 weeks ago         448MB
      mysql                 latest              30f937e841c8        2 weeks ago         541MB
      tomcat                latest              1b6b1fe7261e        2 weeks ago         647MB
      centos                latest              470671670cac        4 months ago        237MB
      hello-world           latest              bf756fb1ae65        5 months ago        13.3kB
      vulhub/php            xxe                 ce531f8a34fa        23 months ago       230MB
      
  • 保存镜像

    docker save [OPTIONS] IMAGE [IMAGE...]
    

    选项:

    Save one or more images to a tar archive (streamed to STDOUT by default)Options:-o, --output string   Write to a file, instead of STDOUT
    
  • 从备份中加载镜像

    docker load [OPTIONS
    

    选项:

    Load an image from a tar archive or STDINOptions:-i, --input string   Read from tar archive file, instead of STDIN-q, --quiet          Suppress the load output
    

1.4.3 dockerhub 的使用

(1)dockerhub

  • dockerhub

(2)常用命令

  • 登录:dockerhub:

    docker login
    username:yourusername
    password:yourpassword
    

    或者:

    docker login --username=yourusername
    
  • 推送镜像

    首先需要标记镜像:

    docker tag 镜像名 yourusername/仓库名[:标签]
    

    本地镜像推送到仓库:

    docker push yourusername/仓库名[:标签]
    
  • 退出docker logout

(3)阿里云镜像仓库

  • 登录阿里云镜像仓库服务阿里云镜像服务

  • 创建命名空间

  • 创建仓库

  • 按提示使用


1.5 容器数据卷

1.5.1 容器数据卷介绍

(1)容器数据卷概念以及意义

  • docker容器运行的数据本身全部保存在容器内,倘若容器被删除则数据就全部会丢失,比如MySQL,Tomcat配置文件等等。
  • 在Docker中,要想实现数据的持久化(所谓Docker的数据持久化即数据不随着Container的结束而结束),需要将数据从宿主机挂载到容器中。

1.5.2 数据卷的使用

(1)run命令参数挂载数据卷

  • -v 命令参数挂载数据卷

    docker run -v 主机目录:容器目录:[权限] [-v 主机目录:容器目录:[权限]  [-v 主机目录:容器目录:[权限]]...]
    
    • 开始时如果宿主机没有该文件或者目录,则会自动创建
    • 可以挂载多个目录
    • 如果表示文件或目录要指定以绝对路径“/”开头,不然会认为是具名挂载;
    • 可以在挂载目录最后设置文件权限(一旦设置,之后就很难去修改了);
      • ro:read-only,即只能由宿主机创建以及修改挂载卷的文件内容;
      • rw:read-write
    • 数据卷不会因容器的删除而被删除;

    示例:

    1. 创建MySQL容器:

      docker run -d -p 3306:3306 \
      -v /home/mysql/conf:/ect/mysql/conf.d \
      -v /home/mysql/data:/var/lib/mysql \
      -e MYSQL_ROOT_PASSWORD=18724787072 --name=mysql mysql:5.7
      
    2. 查看文件:

      [root@niss mysql]# ls /home/mysql/data
      auto.cnf         client-key.pem  ib_logfile1         private_key.pem  sys
      ca-key.pem       ib_buffer_pool  ibtmp1              public_key.pem
      ca.pem           ibdata1         mysql               server-cert.pem
      client-cert.pem  ib_logfile0     performance_schema  server-key.pem
      

(2)匿名挂载与具名挂载

  • 匿名挂载:不指定宿主机的文件、目录路径或卷名

    docker run -v /容器内路径:[权限] [-v /容器内路径:[权限]]
    
    • 该方法挂载的卷会给一个随机的唯一卷名(不建议使用)
  • 具名挂载:指定不指定宿主机的文件路径但是指定卷名

    docker run -v 卷名:/容器内路径:[权限] [-v 卷名:容器内路径:[权限]]
    
    • 该方法挂载的卷的文件内容保存在:/var/lib/docker/volumes/卷名/_data

    例:

    • 匿名挂载nginx:

      docker run -d --name=nginx01 -v /usr/share/nginx nginx
      328a5f13b8ef03752b5e5fa84ad99dd12c1858c05e2db6d02cae01742f7d2733docker run -d --name=nginx02 -v nginxVol:/etc/nginx nginx
      9d1f00d3ee598cbc2e5d2c69d25c0cc7fb5164254e6dd5fff40f3be3351eabb4
      
    • 查看具名挂载的卷的信息:

      docker volume inspect nginxVol
      [{"CreatedAt": "2020-06-07T01:28:17+08:00","Driver": "local","Labels": null,"Mountpoint": "/var/lib/docker/volumes/nginxVol/_data","Name": "nginxVol","Options": null,"Scope": "local"}
      ]
      

1.5.3 dockerfile制作镜像

(1)dockerfile介绍

  • Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明

  • dockerfile指令基础:

    • 一般将该文件命名为Dockerfile,docker build命令会自动寻找该文件进行构建;

    • 每个关键字都要大写;

    • 从上往下执行

  • # 表示注释;

    • 每个指令都会创建一个新的镜像文件层,并提交;

(2)dockerfile指令

  • FROM:指定基础镜像

  • MAINTAINER:指定维护者信息

  • RUN:镜像构建时要运行的命令

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

    COPY [--chown=<user>:<group>] <源路径1>...  <目标路径>
    # 或者
    COPY [--chown=<user>:<group>] ["<源路径1>",...  "<目标路径>"]
    
    • [–chown=:]:可选参数,用户改变复制到容器内文件的拥有者和属组。

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

      • 例如:

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

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

    WORKDIR <工作目录路径>
    
    • docker build 构建镜像过程中的,每一个 RUN 命令都是新建的一层。只有通过 WORKDIR 创建的目录才会一直存在。
  • VOLUME:定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。

    VOLUME ["<路径1>", "<路径2>"...]
    # 或者
    VOLUME <路径>
    
    • 避免重要的数据,因容器重启而丢失,这是非常致命的。
    • 避免容器不断变大。
    • 在启动容器 docker run 的时候,我们可以通过 -v 参数修改挂载点。
  • EXPOSE:声明端口

    EXPOSE <端口1> [<端口2>...]
    
    • 帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射。
    • 在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。
  • CMD:类似于 RUN 指令,用于运行程序,但二者运行的时间点不同

    CMD <shell 命令> 
    CMD ["<可执行文件或命令>","<param1>","<param2>",...] 
    CMD ["<param1>","<param2>",...]  # 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数
    
    • CMD 在docker run 时运行。
    • RUN 是在 docker build。
    • 为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖
    • 如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效

    CMD示例

    FROM centos# run镜像时输出当前路径
    CMD pwd
    # run镜像时输出根路径文件名
    CMD ["ls","-a"]      
    
    [root@niss]~/dockerf# docker build -f dockerfile-cmd-test -t centos-cmd .
    Sending build context to Docker daemon  3.072kB
    Step 1/3 : FROM centos---> 470671670cac
    Step 2/3 : CMD pwd---> Running in 6a33f855dc76
    Removing intermediate container 6a33f855dc76---> 81c94050b537
    Step 3/3 : CMD ["ls","-a"]---> Running in f3e4302b0484
    Removing intermediate container f3e4302b0484---> f37c82b28bb9
    Successfully built f37c82b28bb9
    Successfully tagged centos-cmd:latest
    [root@niss]~/dockerf# docker run -it centos-cmd
    .   .dockerenv  dev  home  lib64       media  opt   root  sbin  sys  usr
    ..  bin         etc  lib   lost+found  mnt    proc  run   srv   tmp  var
    
    • 只会执行最后一条CMD命令
    [root@niss]~/dockerf# docker run -it centos-cmd -l
    docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"-l\": executable file not found in $PATH": unknown.[root@niss]~/dockerf# docker run -it centos-cmd ls -al
    total 56
    drwxr-xr-x  1 root root 4096 Jun  7 09:19 .
    drwxr-xr-x  1 root root 4096 Jun  7 09:19 ..
    -rwxr-xr-x  1 root root    0 Jun  7 09:19 .dockerenv
    lrwxrwxrwx  1 root root    7 May 11  2019 bin -> usr/bin
    drwxr-xr-x  5 root root  360 Jun  7 09:19 dev
    drwxr-xr-x  1 root root 4096 Jun  7 09:19 etc
    drwxr-xr-x  2 root root 4096 May 11  2019 home
    lrwxrwxrwx  1 root root    7 May 11  2019 lib -> usr/lib
    lrwxrwxrwx  1 root root    9 May 11  2019 lib64 -> usr/lib64
    drwx------  2 root root 4096 Jan 13 21:48 lost+found
    drwxr-xr-x  2 root root 4096 May 11  2019 media
    drwxr-xr-x  2 root root 4096 May 11  2019 mnt
    drwxr-xr-x  2 root root 4096 May 11  2019 opt
    dr-xr-xr-x 92 root root    0 Jun  7 09:19 proc
    dr-xr-x---  2 root root 4096 Jan 13 21:49 root
    drwxr-xr-x 11 root root 4096 Jan 13 21:49 run
    lrwxrwxrwx  1 root root    8 May 11  2019 sbin -> usr/sbin
    drwxr-xr-x  2 root root 4096 May 11  2019 srv
    dr-xr-xr-x 13 root root    0 Jun  7 09:19 sys
    drwxrwxrwt  7 root root 4096 Jan 13 21:49 tmp
    drwxr-xr-x 12 root root 4096 Jan 13 21:49 usr
    drwxr-xr-x 20 root root 4096 Jan 13 21:49 var
    
    • 当添加附加命令时,-l会替换掉ls -a,已经不是一条命令了,所以会报错
  • ENTRYPOINT类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。

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

    ENTRYPOINT ["<executeable>","<param1>","<param2>",...]
    
    • 优点:在执行 docker run 的时候可以指定 ENTRYPOINT 运行所需的参数。

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

    ENTRYPOINT示例:

    FROM centosENTRYPOINT ["ls","-a"]
    
    [root@niss]~/dockerf# docker run -it centos-entry -l
    total 56
    drwxr-xr-x  1 root root 4096 Jun  7 09:25 .
    drwxr-xr-x  1 root root 4096 Jun  7 09:25 ..
    -rwxr-xr-x  1 root root    0 Jun  7 09:25 .dockerenv
    lrwxrwxrwx  1 root root    7 May 11  2019 bin -> usr/bin
    drwxr-xr-x  5 root root  360 Jun  7 09:25 dev
    drwxr-xr-x  1 root root 4096 Jun  7 09:25 etc
    drwxr-xr-x  2 root root 4096 May 11  2019 home
    lrwxrwxrwx  1 root root    7 May 11  2019 lib -> usr/lib
    lrwxrwxrwx  1 root root    9 May 11  2019 lib64 -> usr/lib64
    drwx------  2 root root 4096 Jan 13 21:48 lost+found
    drwxr-xr-x  2 root root 4096 May 11  2019 media
    drwxr-xr-x  2 root root 4096 May 11  2019 mnt
    drwxr-xr-x  2 root root 4096 May 11  2019 opt
    dr-xr-xr-x 92 root root    0 Jun  7 09:25 proc
    dr-xr-x---  2 root root 4096 Jan 13 21:49 root
    drwxr-xr-x 11 root root 4096 Jan 13 21:49 run
    lrwxrwxrwx  1 root root    8 May 11  2019 sbin -> usr/sbin
    drwxr-xr-x  2 root root 4096 May 11  2019 srv
    dr-xr-xr-x 13 root root    0 Jun  7 09:19 sys
    drwxrwxrwt  7 root root 4096 Jan 13 21:49 tmp
    drwxr-xr-x 12 root root 4096 Jan 13 21:49 usr
    drwxr-xr-x 20 root root 4096 Jan 13 21:49 var
    
    • ENRTRYPOINT会以追加方式添加命令
  • ENV:设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量

    ENV <key> <value>
    ENV <key1>=<value1> <key2>=<value2>...
    
  • ARG:构建参数,与 ENV 作用一至。不过作用域不一样。ARG 设置的环境变量仅对 Dockerfile 内有效,也就是说只有 docker build 的过程中有效,构建好的镜像内不存在此环境变量。

    ARG <参数名>[=<默认值>]
    
    • 构建命令 docker build 中可以用 --build-arg <参数名>=<值> 来覆盖。
  • USER:用于指定执行后续命令的用户和用户组,这边只是切换后续命令执行的用户(用户和用户组必须提前已经存在)

    USER <用户名>[:<用户组>]
    
  • ONBUILD:用于延迟构建命令的执行。

    简单的说,就是 Dockerfile 里用 ONBUILD 指定的命令,在本次构建镜像的过程中不会执行(假设镜像为 test-build)。当有新的 Dockerfile 使用了之前构建的镜像 FROM test-build ,这是执行新镜像的 Dockerfile 构建时候,会执行 test-build 的 Dockerfile 里的 ONBUILD 指定的命令。

    示例:

    • 构建一个带有vim与net-tools的centos镜像

      # centos with vim and net-tools# 基础镜像
      FROM centos# 维护者信息
      MAINTAINER 倪守顺<1623339719@qq.com># 环境
      ENV MYPATH /usr/local
      WORKDIR $MYPATH# 安装工具
      RUN yum -y install vim
      RUN yum -y install net-tools# 默认暴露端口
      EXPOSE 80# 启动时就执行该程序
      CMD /bin/bas
      
  • docker build构建镜像

    • -f dockerfile构建文件
    • -t 目标镜像:[tag]
    [root@niss]~/dockerf# docker build -f dockerfile-centos -t centos-plus:0.1 .Sending build context to Docker daemon  2.048kB
    Step 1/10 : FROM centos---> 470671670cac
    Step 2/10 : MAINTAINER 倪守顺<1623339719@qq.com>---> Running in 00c8f78d21a5
    Removing intermediate container 00c8f78d21a5---> 0d1447c2897d
    Step 3/10 : ENV MYPATH /usr/local---> Running in 65597ede8cd2
    Removing intermediate container 65597ede8cd2---> 2df7599ad39c
    Step 4/10 : WORKDIR $MYPATH---> Running in 7007d6fc309e
    Removing intermediate container 7007d6fc309e---> bdf84a4fa2f8
    Step 5/10 : RUN yum -y install vim---> Running in 350ffe3558a4
    # 。。。以下省略。。。
    Step 6/10 : RUN yum -y install net-tools---> Running in e0eb62d5632f
    # 。。。以下省略
    Removing intermediate container e0eb62d5632f---> ca1425549ec9
    Step 7/10 : EXPOSE 80---> Running in ff302710bc5d
    Removing intermediate container ff302710bc5d---> c83a68ff9d53
    Step 8/10 : CMD echo $MYPATH---> Running in 7f18df522293
    Removing intermediate container 7f18df522293---> e0c045995ecd
    Step 9/10 : CMD echo "----end----"---> Running in 174d8158d11b
    Removing intermediate container 174d8158d11b---> f3660fc995da
    Step 10/10 : CMD /bin/bash---> Running in 9308f03248c3
    Removing intermediate container 9308f03248c3---> 2ccca68a259c
    Successfully built 2ccca68a259c
    Successfully tagged centos-plus:0.1
    
    • 查看制作的镜像:

      [root@niss]~/dockerf# docker images
      REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
      centos-plus             0.1                 2ccca68a259c        27 minutes ago      321MB
      以下省略。。。
      
    • 使用自制的镜像:

      [root@niss]~/dockerf# docker run -it --name=centos-plus centos-plus:0.1
      [root@4318333c9bb1 local]# pwd
      /usr/local# ip-tools测试
      [root@4318333c9bb1 local]# ifconfig
      eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 172.17.0.4  netmask 255.255.0.0  broadcast 172.17.255.255ether 02:42:ac:11:00:04  txqueuelen 0  (Ethernet)RX packets 0  bytes 0 (0.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 127.0.0.1  netmask 255.0.0.0loop  txqueuelen 1000  (Local Loopback)RX packets 0  bytes 0 (0.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0# vim测试
      [root@4318333c9bb1 local]# vim --help
      VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Nov 11 2019 19:08:24)usage: vim [arguments] [file ..]       edit specified file(s)or: vim [arguments] -               read text from stdinor: vim [arguments] -t tag          edit file where tag is definedor: vim [arguments] -q [errorfile]  edit file with first error
      # 以下省略
      
  • docker history 镜像名[:tag]查看镜像的构建过程:

    [root@niss]~/dockerf# docker history centos-plus:0.1
    IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
    2ccca68a259c        38 minutes ago      /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "/bin…   0B
    f3660fc995da        38 minutes ago      /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B
    e0c045995ecd        38 minutes ago      /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B
    c83a68ff9d53        38 minutes ago      /bin/sh -c #(nop)  EXPOSE 80                    0B
    ca1425549ec9        38 minutes ago      /bin/sh -c yum -y install net-tools             24MB
    a14067222158        38 minutes ago      /bin/sh -c yum -y install vim                   59.8MB
    bdf84a4fa2f8        39 minutes ago      /bin/sh -c #(nop) WORKDIR /usr/local            0B
    2df7599ad39c        39 minutes ago      /bin/sh -c #(nop)  ENV MYPATH=/usr/local        0B
    0d1447c2897d        39 minutes ago      /bin/sh -c #(nop)  MAINTAINER 倪守顺<1623339…      0B
    470671670cac        4 months ago        /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B
    <missing>           4 months ago        /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B
    <missing>           4 months ago        /bin/sh -c #(nop) ADD file:aa54047c80ba30064…   237MB
    

例:构建tomcat+jdk镜像

  • 准备:

    apache-tomcat-9.0.35.tar.gz  jdk-8u251-linux-x64.tar.gz
    
  • 编写Dockerfiles

    FROM centosMAINTAINER nishoushun<ni18724787072@outlook.com>COPY readme.md /usr/local/readme.mdADD jdk-8u251-linux-x64.tar.gz /usr/local
    ADD apache-tomcat-9.0.35.tar.gz /usr/localRUN yum -y install vimENV MYPATH /usr/local
    WORKDIR $MYPATHENV JAVA_HOME /usr/local/jdk1.8.0_251
    ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.35
    ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.35
    ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/binEXPOSE 8080CMD /usr/local/apache-tomcat-9.0.35/bin/startup.sh $$ tail -F  /usr/local/apache-tomcat-9.0.35/logs/catalina.out
    
  • 构建镜像

    docker build -t tomcat_jdk:1.0 .
    
    • 构建时如果没有指定dockerfile,会自动寻找Dockerfile文件
  • 启动镜像

    docker run -it -p 7070:8080 --name=tomcat \
    -v /home/web/tomcat/webapps/:/usr/local/apache-tomcat-9.0.35/webapps/ \
    -v /home/web/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.35/logs \
    tomcat-jdk
    

1.6 docker网络

1.6.1 docker网络介绍

(1)安装并启动了docker服务服务器网络

  • 查看docker网络

    # root @ niss in ~ [10:01:00]
    $ ip addr
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:16:3e:0e:84:10 brd ff:ff:ff:ff:ff:ffinet 172.16.121.72/20 brd 172.16.127.255 scope global dynamic eth0valid_lft 313982894sec preferred_lft 313982894sec
    3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group defaultlink/ether 02:42:4f:3a:be:9d brd ff:ff:ff:ff:ff:ffinet 172.17.0.1/16 scope global docker0valid_lft forever preferred_lft forever
    812: veth2c09b5d@if811: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group defaultlink/ether 8e:9a:e4:08:1e:21 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    162: br-58fd6f6d2257: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group defaultlink/ether 02:42:59:73:3d:f0 brd ff:ff:ff:ff:ff:ffinet 172.18.0.1/16 brd 172.18.255.255 scope global br-58fd6f6d2257valid_lft forever preferred_lft forever
    
    • 环回地址:127.0.0.1/8
    • 内网地址:172.16.121.72/20
    • docker0:172.17.0.1/16
    • docker地址:172.18.0.1/16
  • 启动tomcat镜像,查看网络信息

    # root @ niss in ~ [10:04:31]
    $ docker run --name=tomcat01 -d tomcat
    c2fe7ba1530d5d685ad6fe63b2cc4ec6858102f27934022804ca24ff6afc7235# root @ niss in ~ [10:04:49]
    $ docker exec -it tomcat01 /bin/bash
    root@c2fe7ba1530d:/usr/local/tomcat# ip addr
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever
    813: eth0@if814: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group defaultlink/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0valid_lft forever preferred_lft forever
    
    • 环回地址:127.0.0.1/8
    • eth0@if810:容器启动时,docker为之分配的IP地址:inet 172.17.0.2/16
  • 再次启动一个tomcat:

    # root @ niss in ~ [10:08:35]
    $ docker exec -it tomcat02 /bin/bash
    root@adc336154f86:/usr/local/tomcat# ip addr
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever
    815: eth0@if816: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group defaultlink/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0valid_lft forever preferred_lft forever
    
    • 172.17.0.3/16
  • 容器与宿主机连通性测试

    image-20200609100246977

    • 可以ping通

1.6.2 容器互联

(1)容器互联问题

  • 当以容器名为连接性测试对象时,无法识别主机

    root@adc336154f86:/usr/local/tomcat# ping tomcat01
    ping: tomcat01: Name or service not known
    
  • 然而很多情况下需要以主机名作为连接对象(就像浏览网站,只需要记住url,即使IP更改,只要有人维护IP与域名的映射关系,就不会对访问者造成影响)

(2)link

  • 在创建容器时使用--link选项来连接其他容器:

    # root @ niss in ~ [9:08:51] C:130
    $ docker run -d -P --name=tomcat03 --link "tomcat01" --link"tomcat02" tomcat
    unknown flag: --linktomcat02
    See 'docker run --help'.# root @ niss in ~ [9:08:57] C:125
    $ docker run -d -P --name=tomcat03 --link "tomcat01" --link "tomcat02" tomcat
    ff37a3e051442bc939dab557a8994ccb67b69e84c67e7d6605e30b608582ac7f
    

    连通性测试:

    # root @ niss in ~ [9:10:46] C:125
    $ docker exec -it tomcat03 ping tomcat01
    PING tomcat01 (172.17.0.2) 56(84) bytes of data.
    64 bytes from tomcat01 (172.17.0.2): icmp_seq=1 ttl=64 time=0.169 ms
    64 bytes from tomcat01 (172.17.0.2): icmp_seq=2 ttl=64 time=0.104 ms
    ^C
    --- tomcat01 ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, time 1000ms
    rtt min/avg/max/mdev = 0.104/0.136/0.169/0.034 ms
    
  • 但是此时tomcat02仍然不能以tomcat03为主机名进行连接性测试

    # root @ niss in ~ [9:10:58]
    $ docker exec -it tomcat01 ping tomcat03
    ping: tomcat03: Name or service not known
    

(3)docker network命令

  • 使用docker network命令参数:

    Manage networksCommands:connect     Connect a container to a networkcreate      Create a networkdisconnect  Disconnect a container from a networkinspect     Display detailed information on one or more networksls          List networksprune       Remove all unused networksrm          Remove one or more networks
    
  • 查看docker网络详细信息

    # root @ niss in ~ [9:16:20]
    $ docker network ls
    NETWORK ID          NAME                DRIVER              SCOPE
    a0dc6e118c93        bridge              bridge              local
    13fc812121dc        host                host                local
    acb2c6a1d19f        none                null                local
    58fd6f6d2257        phpxxe_default      bridge              local# root @ niss in ~ [9:17:31]
    $ docker network inspect a0dc6e118c93
    

    image-20200615091912181

    容器的网络设置:

    image-20200615091939041

    网络连接选项:

    image-20200615092022303

  • 查看tomcat03容器的配置信息:

    在最后:

    image-20200615092256501

    • 可以看到网关为172.17.0.1
  • 查看tomcat03的hosts文件配置信息:

    # root @ niss in ~ [9:26:41] C:1
    $  docker exec -it tomcat03 cat /etc/hosts
    127.0.0.1       localhost
    ::1     localhost ip6-localhost ip6-loopback
    fe00::0 ip6-localnet
    ff00::0 ip6-mcastprefix
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters
    172.17.0.2      tomcat01 c2fe7ba1530d
    172.17.0.3      tomcat02 adc336154f86
    172.17.0.5      ff37a3e05144
    
    • 实际上–link就是在/etc/hosts添加容器名与容器IP的映射

    再比如tomcat01的hosts文件:

    # root @ niss in ~ [9:27:16]
    $  docker exec -it tomcat01 cat /etc/hosts
    127.0.0.1       localhost
    ::1     localhost ip6-localhost ip6-loopback
    fe00::0 ip6-localnet
    ff00::0 ip6-mcastprefix
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters
    172.17.0.2      c2fe7ba1530d
    
    • 此时就没有相应的主机映射;

1.6.3 容器互联-自定义网络

(1)网络模式

  • bridge:桥接docker默认(docker0)
  • none:不配置网络
  • host:与宿主机共享网络
  • container:容器网络联通

(2)查看自定义网络

  • 查看docker网络:

    docker network ls
    NETWORK ID          NAME                DRIVER              SCOPE
    a0dc6e118c93        bridge              bridge              local
    13fc812121dc        host                host                local
    acb2c6a1d19f        none                null                local
    58fd6f6d2257        phpxxe_default      bridge              local
    
    • brige实际上对应的就是docker0网络,默认;如果未指定,容器不能靠容器名网络连接;

(3)创建自定义网络

  • docker network create:

    Create a networkOptions:--attachable           Enable manual container attachment--aux-address map      Auxiliary IPv4 or IPv6 addresses used by Network driver (default map[])--config-from string   The network from which copying the configuration--config-only          Create a configuration only network-d, --driver string        Driver to manage the Network (default "bridge")--gateway strings      IPv4 or IPv6 Gateway for the master subnet--ingress              Create swarm routing-mesh network--internal             Restrict external access to the network--ip-range strings     Allocate container ip from a sub-range--ipam-driver string   IP Address Management Driver (default "default")--ipam-opt map         Set IPAM driver specific options (default map[])--ipv6                 Enable IPv6 networking--label list           Set metadata on a network-o, --opt map              Set driver specific options (default map[])--scope string         Control the network's scope--subnet strings       Subnet in CIDR format that represents a network segment
    

    例:

    # root @ niss in ~ [9:46:22] C:130
    $ docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynetwork
    c1c801784c1c58d913eccb2c1b0132763ca5d2aeff641ebf367423f7fa6cc141$  docker network inspect mynetwork
    [{"Name": "mynetwork","Id": "c1c801784c1c58d913eccb2c1b0132763ca5d2aeff641ebf367423f7fa6cc141","Created": "2020-06-15T09:46:26.470339626+08:00","Scope": "local","Driver": "bridge","EnableIPv6": false,"IPAM": {"Driver": "default","Options": {},"Config": [{"Subnet": "192.168.0.0/16","Gateway": "192.168.0.1"}]},"Internal": false,"Attachable": false,"Ingress": false,"ConfigFrom": {"Network": ""},"ConfigOnly": false,"Containers": {},"Options": {},"Labels": {}}
    ]
    
    • 桥接模式
    • 子网:192.168.0.0/16
    • 网关:192.168.0.1
    • 网络名:mynetwork

(4)创建容器时使用自定义网络

  • 删除之前的所有容器,创建新的属于自定义网络的容器

    使用--net 网络ID

    # root @ niss in ~ [9:49:52]
    $ docker run --name tomcat01 -P -d --net mynetwork tomcat
    9beabc19bafaa7e842511be8537563023d85df5a4f58b6bffbdef83958055296# root @ niss in ~ [9:50:27]
    $ docker run --name tomcat02 -P -d --net mynetwork tomcat
    d42357da832bcd136e057cc79c1e68955cca4b3991c48f20c541bc519b239e89
    

    此时:

    # root @ niss in ~ [9:50:34]
    $  docker network inspect mynetwork
    [{"Name": "mynetwork","Id": "c1c801784c1c58d913eccb2c1b0132763ca5d2aeff641ebf367423f7fa6cc141","Created": "2020-06-15T09:46:26.470339626+08:00","Scope": "local","Driver": "bridge","EnableIPv6": false,"IPAM": {"Driver": "default","Options": {},"Config": [{"Subnet": "192.168.0.0/16","Gateway": "192.168.0.1"}]},"Internal": false,"Attachable": false,"Ingress": false,"ConfigFrom": {"Network": ""},"ConfigOnly": false,"Containers": {"9beabc19bafaa7e842511be8537563023d85df5a4f58b6bffbdef83958055296": {"Name": "tomcat01","EndpointID": "5560fbafc4d6154c247fc52465afe6eb61b33e5c19684177f17bea33942b3e59","MacAddress": "02:42:c0:a8:00:02","IPv4Address": "192.168.0.2/16","IPv6Address": ""},"d42357da832bcd136e057cc79c1e68955cca4b3991c48f20c541bc519b239e89": {"Name": "tomcat02","EndpointID": "225ae1e8f4e58bb931f9d89436871342868d692b561c6f8df7c849bb012ba877","MacAddress": "02:42:c0:a8:00:03","IPv4Address": "192.168.0.3/16","IPv6Address": ""}},"Options": {},"Labels": {}}
    ]
    

    此时再次进行连通性测试:

    # root @ niss in ~ [9:51:53] C:1
    $ docker exec  tomcat01 ping tomcat02
    PING tomcat02 (192.168.0.3) 56(84) bytes of data.
    64 bytes from tomcat02.mynetwork (192.168.0.3): icmp_seq=1 ttl=64 time=0.136 ms
    64 bytes from tomcat02.mynetwork (192.168.0.3): icmp_seq=2 ttl=64 time=0.099 ms
    
    • 此时就可以根据容器名正常联通

1.6.4 容器与网络的联通

(1)docker network connect

  • 将容器添加到网络中,使该网络间的容器可以相互连通;

  • 使用方式:

    Usage:  docker network connect [OPTIONS] NETWORK CONTAINERConnect a container to a networkOptions:--alias strings           Add network-scoped alias for the container--driver-opt strings      driver options for the network--ip string               IPv4 address (e.g., 172.30.100.104)--ip6 string              IPv6 address (e.g., 2001:db8::33)--link list               Add link to another container--link-local-ip strings   Add a link-local address for the container
    

    示例:将容器mysql添加到mynwtwork网络中,相互连通;

    # root @ niss in ~ [9:24:24]
    $ docker network connect mynetwork mysql
    

    检查网络:

    # root @ niss in ~ [9:29:56] C:1
    $ docker network inspect mynetwork
    [{"Name": "mynetwork","Id": "c1c801784c1c58d913eccb2c1b0132763ca5d2aeff641ebf367423f7fa6cc141","Created": "2020-06-15T09:46:26.470339626+08:00","Scope": "local","Driver": "bridge","EnableIPv6": false,"IPAM": {"Driver": "default","Options": {},"Config": [{"Subnet": "192.168.0.0/16","Gateway": "192.168.0.1"}]},"Internal": false,"Attachable": false,"Ingress": false,"ConfigFrom": {"Network": ""},"ConfigOnly": false,"Containers": {"c3e76d01dbff94ef2499bc10bed8f92b615ecaa803f13083c7821103bc386331": {"Name": "mysql","EndpointID": "505f679d560d2986b4bc914babd50a6d092db5280d6ef7147e145f2c54725871","MacAddress": "02:42:c0:a8:00:02","IPv4Address": "192.168.0.2/16","IPv6Address": ""}},"Options": {},"Labels": {}}
    ]
    

参考

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. ug nxopen 二次开发cam部分添加操作和程序组

    思路: 1.添加操作,也就是平面铣,轮廓铣,多轴铣…成为主类型,由UF_CAM_opt_ask_types得到; 每个下面有许多子类型,由UF_CAM_opt_ask_subtypes得到,改变第二个参数可以改变得到的四个视图是哪个视图。然后想要那个子类型就添加就好了 程序里有打印子类型的方法,可以试一…...

    2024/4/24 13:48:46
  2. linux磁盘管理说明(8)文件系统的挂载(上)

    文件系统的挂载点是目录,这个目录就是挂载的文件系统的入口,文件系统只有被挂载上了之后才能访问,而移除外部存储设备时,请记得一定要卸载该设备。文件系统的挂载与卸载最常用的命令就是mount/umount,接下来我们介绍这两个命令。 mount 标准格式: mount -t 文件系统类型…...

    2024/4/24 13:48:45
  3. Unity Inspector 界面拓展

    像Unity很多自带的系统组建中都是可以通过勾选或下拉等方式修改的,那么这样的界面如何实现呢?在此之前,可以先了解下 Unity常用的标记字段 1.创建元数据类脚本 (像往常一样创建一个脚本就可以了)using System.Collections; using System.Collections.Generic; using Unity…...

    2024/4/18 9:23:34
  4. 特性速览 | Apache Hudi 0.5.3版本正式发布

    欢迎关注微信公众号:ApacheHudi 1. 下载连接源代码下载:Apache Hudi 0.5.3 Source Release (asc, sha512) 0.5.3版本相关jar包地址:https://repository.apache.org/#nexus-search;quick~hudi2. 迁移指南这是一个bugfix版本,从0.5.2升级时不需要任何特殊的迁移步骤。如果要从…...

    2024/4/18 5:30:03
  5. 基于Java的简易Http服务器--你瞅啥

    上次看了一个基于Java的http服务器代码,功能很简单,但是却用到了很多学到的知识,感觉很有意思,就模仿着写了一个,一开始遇到一点儿问题(这个问题感觉比这个代码要难多了),现在基本上问题都解决了,关于那个问题,可以看 我的博客。部署到服务器上,感觉很不错,特地拿…...

    2024/4/15 3:33:48
  6. Redis详解(九)------ 哨兵(Sentinel)模式详解

    目录1、架构图2、服务器列表3、搭建主从模式4、搭建哨兵模式5、Java客户端连接哨兵集群6、Java客户端连接原理7、哨兵模式工作原理在上一篇博客----Redis详解(八)------ 主从复制,我们简单介绍了Redis的主从架构,但是这种主从架构存在一个问题,当主服务器宕机,从服务器不能够…...

    2024/4/19 11:33:17
  7. centos7.4网络配置

    用ifconfig命令查看到ip地址,网关等信息,如图所示,观察图中内容,可以发现虚拟机的网关名称为ens33,而且没有ip地址。使用cat /etc/sysconfig/network-scripts/ifcfg-ens33命令查看网络配置。(这里为: ifcfg-ens33 具体看网关名是什么, ls /etc/sysconfig/network-scripts…...

    2024/4/17 22:04:30
  8. vue中表格formatter格式化内容的用法

    <el-table-column prop="manProp" label="属性" :formatter="changeManProp" width=""></el-table-column>//改变显示的人物属性 changeManProp(row, column){const manProp = row[column.property];var string = null;if…...

    2024/4/15 3:33:44
  9. 24.MySQL中的联合查询(UNION)

    24.MySQL中的联合查询(UNION)1.简介2.准备3.案例 1.简介 联合查询是多表查询的一种方式,经常用在分表操作中,在保证多个SELECT语句的查询字段数相同的情况下,合并多个查询的结果。 语法: SELECT … UNION [ALL | DISTINCT] SELECT … [UNION [ALL | DISTINCT] SELECT …]…...

    2024/4/15 3:33:43
  10. Maven总结

    Maven 是一个项目管理工具,它包含了一个项目对象模型 (POM:Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标 (goal)的逻辑。Maven 就可…...

    2024/4/28 7:09:50
  11. ug nx/open二次开发cam部分之刀具的创建

    简单说一下思路,参见http://www.360doc.com/content/14/0928/11/7378868_412936842.shtml 1.首先是初始化uf_initialize UF_UI_ONT_switch_view这个函数是用来将当前视图改到机床视图,也就是括号中的machine_tool里,然后用UF_UI_ONT_refresh来刷新这个视图中的内容 2.然后用…...

    2024/5/4 11:17:16
  12. Redis详解(十)------ 从零开始搭建集群

    目录1、为什么需要集群?2、数据分区方式3、一致性哈希分布4、Redis Cluster虚拟槽分区5、原生搭建 Redis Cluster①、服务器列表②、配置各个节点参数③、建立各个节点通信④、分配槽位⑤、主从配置⑥、测试6、脚本搭建Redis Cluster①、Redis5之前使用redis-trib.rb脚本搭建②…...

    2024/4/28 1:36:13
  13. Redis详解(十一)------ 过期删除策略和内存淘汰策略

    目录1、设置Redis键过期时间2、Redis过期时间的判定3、过期删除策略①、定时删除②、惰性删除③、定期删除4、Redis过期删除策略5、内存淘汰策略①、设置Redis最大内存②、设置内存淘汰方式6、总结在介绍这篇文章之前,我们先来看如下几个问题:①、如何设置Redis键的过期时间?…...

    2024/4/28 16:47:22
  14. The Server time zone value ‘�й���׼ʱ��’ is unrecognized or represents more than one time zone

    (1)前端请求拿不到数据,报500错误(2)后端报错部分信息(3)解决方案 在IntelliJ IDEA中使用mybatis-generator时,配置过plugin后,尝试run,此时出现The Server time zone value ‘�й���׼ʱ��’ is unrecognized or represents more than one time zone的Excepti…...

    2024/4/29 1:06:53
  15. 统计文件中的字符和符号数量程序设计

    统计文件中的字符和符号数量程序设计 一 初级要求需要用到文件操作及相关函数,对磁盘中的文件进行读写,其用法类似于屏幕输入输出。 统计和输出其中包含空格数量,数字及符号的数量,英文字符数量,英文单词数量(规定单词间以一个或多个空格分开)。 二 高级要求 统计段落数。…...

    2024/4/28 18:29:55
  16. numpy中的array与asarray

    array和asarray都可以将结构数据转化为ndarray,但是主要区别就是当数据源是ndarray时,array仍然会copy出一个副本,占用新的内存,但asarray不会。 arr1=np.ones((3,3)) arr2=np.array(arr1) arr3=np.asarray(arr1) arr1[1]=2 print (arr1:\n,arr1 ) print (arr2:\n,arr2…...

    2024/4/28 6:24:12
  17. 操作系统-5-死锁

    文章目录死锁一、死锁的概念1、死锁的必要条件(互斥、不剥夺、请求、循环)2、死锁的处理策略(预防、避免、检测和解除)3、总结二、死锁的处理1、预防死锁1、破坏互斥条件2、破坏不剥夺条件3、破坏请求和保持条件4、破坏循环等待条件2、避免死锁3、检测和解除死锁的解除总结 死锁…...

    2024/4/28 11:55:39
  18. WampServer配置局域网

    1:查看端口是否被禁止,例如:8088 netstat –ano|findstr 81232:查看本机ip地址 ipconfig3:设置httpd.conf监听端口 Listen 0.0.0.0:8088 Listen [::0]:80884:配置httpd-vhosts.conf <VirtualHost *:8088>ServerName 本机IP地址DocumentRoot E:/web/cms/public<D…...

    2024/4/28 8:56:38
  19. GET提交中%5B与%5D代表什么意思?

    根据这个答案:str=foo%20%5B12%5D编码foo [12]:%20 is space %5B is [ and %5D is ]这叫做百分比编码并用于对url参数值中的特殊字符进行编码。...

    2024/4/28 16:16:59
  20. 文件存储

    SpringCloud Alibaba-OSS对象存存储服务(Object Storage Service,Oss)是一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件。容量和处理能力弹性扩展,多种存储类型供选择,全面优hua存储成本。...

    2024/4/28 5:26:00

最新文章

  1. 漏洞扫描神器:AppScan 保姆级教程(附破解步骤)

    一、介绍 AppScan是IBM的一款应用程序安全测试工具&#xff0c;旨在帮助组织发现和修复应用程序中的安全漏洞。它提供了全面的功能和工具&#xff0c;用于自动化应用程序安全测试、漏洞扫描和漏洞管理。 以下是AppScan的一些主要特点和功能&#xff1a; 1. 自动化漏洞扫描&a…...

    2024/5/4 15:20:16
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 目标检测——RCNN系列学习(二)Faster RCNN

    接着上一篇文章&#xff1a;目标检测——RCNN系列学习(一&#xff09;-CSDN博客 主要内容包含&#xff1a;Faster RCNN 废话不多说。 Faster RCNN [1506.01497] Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks (arxiv.org)https://arxiv.…...

    2024/4/30 18:57:37
  4. 自动化标准Makefile与lds

    makefile的自动化&#xff0c;需要使用变量&#xff0c;以及自动变量。 实行命令行与参数的分离。 命令行只与变量打交道&#xff0c;而变量则携带不同的参数&#xff0c;这样&#xff0c;通过修改变量&#xff0c;命令的执行结果不同。 可以简单理解为&#xff0c;命令行是个…...

    2024/5/3 10:04:44
  5. 论文阅读AI工具链

    文献检索 可以利用智谱清言来生成合适的文献检索式&#xff0c;并根据需要不断调整。 谷歌学术 在Google Scholar中进行检索时&#xff0c;您可以使用类似的逻辑来构建您的搜索式&#xff0c;但是语法会有所不同。Google Scholar的搜索框接受普通的文本搜索&#xff0c;但是…...

    2024/5/3 14:44:57
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/1 17:30:59
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/2 16:16:39
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/29 2:29:43
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/3 23:10:03
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/30 9:43:09
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/2 15:04:34
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/29 20:46:55
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/30 22:21:04
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/1 4:32:01
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/4 2:59:34
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/30 9:42:22
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/2 9:07:46
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/30 9:42:49
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57