精华内容
下载资源
问答
  • Docker 是一个开源的应用容器引擎,和传统的虚拟机技术相比,Docker 容器性能开销极低,因此也广受开发者...这篇文章主要介绍了基于spring-boot和docker-java实现对docker容器的动态管理和监控 ,需要的朋友可以参考下
  • docker容器管理(使用rancher)

    千次阅读 2017-10-12 11:24:50
    docker rancher

    docker可以很快速的创建一个生产环境。但是在复杂的生产环境中,运维开发者都使用docker的一些基本命令比如docker exec、docker log、docker attach、docker ps等命令来维护所有的生产环境,其实也是很麻烦的事情。如果生产环境有成千上万个,你们维护生产环境的工作量也会是非常的巨大的。这里来介绍一下使用rancher管理docker容器。
    一、介绍下rancher
    Rancher 是以在生产环境中运行容器为目标而构建的开源软件平台。随着 Docker 容器这种类型的应用工作负载的逐渐流行,它催生了很多与之相应的基础架构服务,如网络服务、存储服务、负载均衡,安全,服务发现和资源管理。-

    二、在不能翻墙情况下获取rancher
    在rancher的很多安装方法介绍中,默认都是可以翻墙下载的。但是本人由于翻不了墙,只能到各种docker镜像服务器中找。笔者在网易蜂巢有个镜像库,所以在网易蜂巢那找,发现使用docker pull拉镜像到本地的时候经常会失败。所以就到阿里云那边找,发现rancher在阿里云那边有放好几个版本的镜像库。所以,如果翻不了墙的话就到阿里云上找对应版本的镜像就可以了。不过有一点需要注意的是,rancher在阿里云放的镜像一般是稳定版本的。想要获取最新版本的镜像还是需要翻墙取的。

    三、rancher基本使用方法:

    1、部署docker环境:
    由于要用rancher来管理docker容器,那么就需要环境上有docker。还有就是 Linux 主机的内存至少1GB。

    2、获取rancher/server镜像
    可以翻墙的话,最直接的就是运行下面命令:

    docker pull rancher/server

    不过,最好要选对应的版本,否则获取的镜像为rancher/server:latest。rancher的版本中2.0大版本后的是基于k8s开发的,2.0以前是基于docker开发的,会存在一些差异。
    如果不能翻墙,就到阿里云那选取增加要获取的版本pull到本地。以下是笔者从阿里云获取rancher的操作:

    fanastic@DESKTOP-MRSQ5RC MINGW64 ~
    $ docker pull registry.cn-hangzhou.aliyuncs.com/ranchers/server:v1.6.5
    v1.6.5: Pulling from ranchers/server
    6599cadaf950: Pull complete
    23eda618d451: Pull complete
    f0be3084efe9: Pull complete
    52de432f084b: Pull complete
    a3ed95caeb02: Pull complete
    e75cd91a1dc5: Pull complete
    997f1b48f59f: Pull complete
    313c28fb4e37: Pull complete
    2a0730d1275c: Pull complete
    8848fbebd2c8: Pull complete
    906504ea9ea6: Pull complete
    9329940f8e65: Pull complete
    e849debd7945: Pull complete
    4883bd135dd2: Pull complete
    605c6a0fe940: Pull complete
    274bc004c933: Pull complete
    e574b973aaa1: Pull complete
    08cb1e411b87: Pull complete
    4af3b5b17b6e: Pull complete
    Digest: sha256:429d0a5bb7ba989b3b8cf07dcba0ed75d56823fa73b72056d773d91e427419d2
    Status: Downloaded newer image for registry.cn-hangzhou.aliyuncs.com/ranchers/server:v1.6.5

    3、运行rancher/server
    运行rancher/server命令为:

    docker run -d --restart=always -p 8080:8080 rancher/server

    其中对应的容器tag,需要根据实际情况做对应的修改。比如我这边从阿里云pull的镜像后将tag修改为rancher/server:v1.6.5,那么运行的命令为:

    docker run -d --restart=always -p 8080:8080 rancher/server:v1.6.5

    运行容器后通过主机对应的ip加上8080就可以访问rancher的管理页面。

    4、运行rancher/agent
    打开rancher管理页面后点击”INFRASTRUCTRUE”按钮中的”HOST”,然后再加一个主机,使用默认安装的话复制第五个步骤中的docker run命令到主机上执行。比如笔者环境中对应的命令如下:

    sudo docker run --rm --privileged -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher rancher/agent:v1.2.5 http://192.168.99.100:8080/v1/scripts/32FE04AC1ABC88F0F471:1483142400000:iLqghwnOYJVKTTMPq9XCrxEqfM

    从命令可以看出和rancher/server:v1.6.5匹配的rancher/agent为v1.2.5。如果可以翻墙的话直接在主机上运行即可,docker会下载缺失的镜像包,如果不能翻墙的话,就需要到阿里云pull一个和命令中相对应的rancher/agent版本的镜像后再执行docker run命令。

    5、使用rancher管理页面管理环境中的所有容器:
    运行rancher/agent容器后,到rancher管理页面中“INFRASTRUCTURE”->“Containers”对应的页面中可以看到所有容器。可以所有容器进行统一管理:
    这里写图片描述

    展开全文
  • Docker容器技术 配置部署与应用;任务一 Docker镜像的使用与操作;任务一 Docker镜像的使用与操作;任务三 容器监控与日志管理;任务三 容器监控与日志管理;任务三 容器监控与日志管理;任务三 容器监控与日志管理;任务三...
  • Docker 容器管理

    千次阅读 2020-06-07 16:35:33
    管理容器常用命令 创建容器常用选项 命令 描述 -i, –interactive 交互式 -t, –tty 分配一个伪终端 -d, –detach 运行容器到后台 -e, –env 设置环境变量 -p, –publish list 发布容器端口到主机 ...

    目录:

    1. 创建容器常用选项
    2. 容器资源限制
    3. 管理容器常用命令

    创建容器常用选项

    命令描述
    -i, –interactive交互式
    -t, –tty分配一个伪终端
    -d, –detach运行容器到后台
    -e, –env设置环境变量
    -p, –publish list发布容器端口到主机
    -P, –publish-all发布容器所有EXPOSE的端口到宿主机随机端口
    –name string指定容器名称
    -h, –hostname设置容器主机名
    –ip string指定容器IP,只能用于自定义网络
    –network连接容器到一个网络
    –mount mount将文件系统附加到容器
    -v, –volume list绑定挂载一个卷
    –restart string容器退出时重启策略,默认no,可选值:[always

    查看容器相关操作命令

    [root@k8s-master ~]# docker container -help
    unknown shorthand flag: 'e' in -elp
    See 'docker container --help'.
    
    Usage:	docker container COMMAND
    
    Manage containers
    
    Commands:
      attach      Attach local standard input, output, and error streams to a running container
      commit      Create a new image from a container's changes
      cp          Copy files/folders between a container and the local filesystem
      create      Create a new container
      diff        Inspect changes to files or directories on a container's filesystem
      exec        Run a command in a running container
      export      Export a container's filesystem as a tar archive
      inspect     Display detailed information on one or more containers
      kill        Kill one or more running containers
      logs        Fetch the logs of a container
      ls          List containers
      pause       Pause all processes within one or more containers
      port        List port mappings or a specific mapping for the container
      prune       Remove all stopped containers
      rename      Rename a container
      restart     Restart one or more containers
      rm          Remove one or more containers
      run         Run a command in a new container
      start       Start one or more stopped containers
      stats       Display a live stream of container(s) resource usage statistics
      stop        Stop one or more running containers
      top         Display the running processes of a container
      unpause     Unpause all processes within one or more containers
      update      Update configuration of one or more containers
      wait        Block until one or more containers stop, then print their exit codes
    
    Run 'docker container COMMAND --help' for more information on a command.
    
    

    案例:

    #下载nginx镜像
    [root@k8s-master ~]# docker pull nginx
    Using default tag: latest
    latest: Pulling from library/nginx
    afb6ec6fdc1c: Pull complete 
    dd3ac8106a0b: Pull complete 
    8de28bdda69b: Pull complete 
    a2c431ac2669: Pull complete 
    e070d03fd1b5: Pull complete 
    Digest: sha256:c870bf53de0357813af37b9500cb1c2ff9fb4c00120d5fe1d75c21591293c34d
    Status: Downloaded newer image for nginx:latest
    docker.io/library/nginx:latest
    
    #查看当前镜像列表
    [root@k8s-master ~]# docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    nginx               latest              4392e5dad77d        4 days ago          132MB
    hello-world         latest              bf756fb1ae65        5 months ago        13.3kB
    
    #创建运行一个容器
    [root@k8s-master ~]# docker run -d -p 80:80 --name mynginx -h web -e prod=123 nginx
    7c7bfa8a6b8308a51a6ea7bf7b7423c98ab7f77e36895efb70bf0194994da438
    [root@k8s-master ~]# 
    
    
    #查看容器运行状态
    [root@k8s-master ~]# docker container ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                     PORTS                NAMES
    7c7bfa8a6b83        nginx               "/docker-entrypoint.…"   About a minute ago   Up About a minute          0.0.0.0:80->80/tcp   mynginx
    cf9000de7c0b        centos              "/bin/bash"              6 minutes ago        Exited (0) 5 minutes ago                        kind_germain
    a57414e73291        nginx               "/docker-entrypoint.…"   7 minutes ago        Exited (0) 7 minutes ago                        frosty_rhodes
    6ad8d7c76e95        hello-world         "/hello"                 2 hours ago          Exited (0) 2 hours ago                          inspiring_bose
    
    
    
    
    #查看当前容器与镜像的区别
    [root@k8s-master ~]# docker container diff 7c7bfa8a6b83
    C /etc
    C /etc/nginx
    C /etc/nginx/conf.d
    C /etc/nginx/conf.d/default.conf
    C /run
    A /run/nginx.pid
    C /var
    C /var/cache
    C /var/cache/nginx
    A /var/cache/nginx/client_temp
    A /var/cache/nginx/fastcgi_temp
    A /var/cache/nginx/proxy_temp
    A /var/cache/nginx/scgi_temp
    A /var/cache/nginx/uwsgi_temp
    [root@k8s-master ~]# 
    
    #进入一个容器查看创建容器指定的hostname
    [root@k8s-master ~]# docker exec -it 7c7bfa8a6b83 bin/bash
    
    root@web:/# hostname
    web
    root@web:/# 
    
    root@web:/# ls
    bin  boot  dev	docker-entrypoint.d  docker-entrypoint.sh  etc	home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
    root@web:/# 
    
    
    
    #退出容器
    [root@cf9000de7c0b /]# exit
    exit
    [root@k8s-master ~]# 
    
    #容器重启策略,宿主机开机后自启动容器
    [root@k8s-master ~]# docker run -d -p 81:80 --name mynginx2 -h web2 -e prod=1234 --restart always nginx
    5e77a21defa20f146f2662418cbc7373d1a09421b82398ec258bdd6f227adbc8
    [root@k8s-master ~]# 
    
    。。。。。。
    

    容器资源限制

    命令描述
    -m,–memory容器可以使用的最大内存量
    –memory-swap允许交换到磁盘的内存量(物理内存不够用时临时使用swap大小)
    –memory-swappiness=<0-100容器使用SWAP分区交换的百分比(0-100,默认为-1)
    –oom-kill-disable禁用OOM Killer(内存不足时找到最大的消耗内存杀掉)
    –cpus可以使用的CPU数量
    –cpuset-cpus限制容器使用特定的CPU核心,如(0-3, 0,1)
    –cpu-sharesCPU共享(相对权重)

    案例

    内存限额: 允许容器最多使用500M内存和100M(–memory-swap 减去 --memory的大小)的Swap,并禁用 OOM Killer:

    [root@k8s-master ~]# docker run -d -p 80:80 --name mynginx3 --memory="500m" --memory-swap="600m" --oom-kill-disable nginx
    bef193c2d4a28921ec64346ae186ba02f8a7f52c1d46ebf6e76be1a170151ecb
    
    #查看容器资源限制(默认是动态刷新)
    [root@k8s-master ~]# docker stats mynginx3
    
    CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
    bef193c2d4a2        mynginx3            0.00%               4.031MiB / 500MiB   0.81%               656B / 0B           0B / 0B             2
    
    CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
    bef193c2d4a2        mynginx3            0.00%               4.031MiB / 500MiB   0.81%               656B / 0B           0B / 0B             2
    
    CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
    bef193c2d4a2        mynginx3            0.00%               4.031MiB / 500MiB   0.81%               656B / 0B           0B / 0B             2
    
    CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
    bef193c2d4a2        mynginx3            0.00%               4.031MiB / 500MiB   0.81%               656B / 0B           0B / 0B             2
    
    #静态显示容器占用资源
    [root@k8s-master ~]# docker stats --help
    
    Usage:	docker stats [OPTIONS] [CONTAINER...]
    
    Display a live stream of container(s) resource usage statistics
    
    Options:
      -a, --all             Show all containers (default shows just running)
          --format string   Pretty-print images using a Go template
          --no-stream       Disable streaming stats and only pull the first result
          --no-trunc        Do not truncate output
    
    [root@k8s-master ~]# docker stats --no-stream mynginx3
    CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
    bef193c2d4a2        mynginx3            0.00%               4.031MiB / 500MiB   0.81%               656B / 0B           0B / 0B             2
    [root@k8s-master ~]# 
    
    
    #如果不限制内存大小默认占用linux内存大小,实际情况中需要每个容器需要资源限制运行
    
    总大小3.7G
    [root@k8s-master ~]# free -h
                  total        used        free      shared  buff/cache   available
    Mem:           3.7G        276M        2.1G         11M        1.3G        3.1G
    Swap:          2.0G          0B        2.0G
    
    #启动容器没有资源限制
    [root@k8s-master ~]# docker run -d -p 81:80 --name mynginx2  nginx
    28e3b09617d2c1e4cb5ff897a4eb32d66d842a6c603277fd99b01b3776618d11
    
    #会占用全部内存使用
    [root@k8s-master ~]# docker stats --no-stream mynginx2
    CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
    28e3b09617d2        mynginx2            0.00%               1.383MiB / 3.683GiB   0.04%               656B / 0B           0B / 0B             2
    
    
    
    
    

    CPU限额: 允许容器最多使用一个半的CPU:

    [root@k8s-master ~]# docker run -d --name mynginx5 --cpus="1.5" nginx 
    e276bc413a9ec69f07bad57872283bd5724914114ba1f059a1befebc982d4a48
    

    允许容器最多使用50%的CPU:

    [root@k8s-master ~]# docker run -d --name mynginx6 --cpus=".5" nginx
    2bf1244538f751144915c8ef05382b240b344a63af38d3794155c98159ab71cc
    [root@k8s-master ~]# 
    
    。。。。。。
    

    管理容器常用命令

    命令描述
    ls列出容器
    inpsect查看一个或多个容器详细信息
    exec在运行容器中执行命
    commit创建一个新镜像来自一个容器
    cp拷贝文件/文件夹到一个容器
    logs获取一个容器日志
    port列出或指定容器端口映射
    top显示一个容器运行的进程
    stop/start停止/启动一个或多个容器
    rm删除一个或多个容器

    案例

    #查询刚运行过的容器
    [root@k8s-master ~]# docker ps -l
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
    79b5cab6d470        hello-world         "/hello"            10 seconds ago      Exited (0) 9 seconds ago                       wonderful_poitras
    [root@k8s-master ~]# 
    
    
    #查找所有的容器
    [root@k8s-master ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                NAMES
    79b5cab6d470        hello-world         "/hello"                 58 seconds ago      Exited (0) 58 seconds ago                        wonderful_poitras
    6bec9470bd9b        nginx               "/docker-entrypoint.…"   5 minutes ago       Up 5 minutes                0.0.0.0:80->80/tcp   mynginx
    [root@k8s-master ~]# 
    
    #列出全部正在运行的容器
    [root@k8s-master ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
    6bec9470bd9b        nginx               "/docker-entrypoint.…"   6 minutes ago       Up 6 minutes        0.0.0.0:80->80/tcp   mynginx
    
    
    
    #创建一个新的镜像来源与一个容器内
    
    查看当前容器
    [root@k8s-master ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
    6bec9470bd9b        nginx               "/docker-entrypoint.…"   6 minutes ago       Up 6 minutes        0.0.0.0:80->80/tcp   mynginx
    
    #进入nginx容器
    [root@k8s-master ~]# docker exec -it 6bec9470bd9b bash
    
    #创建4个文件夹
    root@6bec9470bd9b:/# touch {1..4}
    
    #查看文件夹
    root@6bec9470bd9b:/# ls
    1  2  3  4  bin  boot  dev  docker-entrypoint.d  docker-entrypoint.sh  etc  home  lib  lib64  media  mnt  opt  proc  root  run	sbin  srv  sys	tmp  usr  var
    
    #退出
    root@6bec9470bd9b:/# exit
    
    #创建一个新的镜像
    [root@k8s-master ~]# docker commit mynginx  web01:v1.0
    sha256:ddc180bf76daa8d7ef3e5908da53a0c6d5951e255fce5bd69d53ac6f2dab720f
    
    #查看新创建的镜像
    [root@k8s-master ~]# docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    web01               v1.0                ddc180bf76da        2 minutes ago       132MB
    nginx               latest              4392e5dad77d        4 days ago          132MB
    centos              latest              470671670cac        4 months ago        237MB
    hello-world         latest              bf756fb1ae65        5 months ago        13.3kB
    
    #运行新创建的容器镜像
    [root@k8s-master ~]# docker run -d -p 82:80 --name mynginx2 web01:v1.0
    dfa810018e45d33d921cf691550641438222e65b97dc26df9eb9a10227a59879
    
    #查看刚刚创建的容器
    [root@k8s-master ~]# docker ps -l
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
    dfa810018e45        web01:v1.0          "/docker-entrypoint.…"   6 seconds ago       Up 5 seconds        0.0.0.0:82->80/tcp   mynginx2
    
    #进入容器查看是否存在4个文件夹
    [root@k8s-master ~]# docker exec -it dfa810018e45 bash
    
    #查看新镜像包含创建的4个文件夹,由此操作完毕!
    root@dfa810018e45:/# ls
    1  2  3  4  bin  boot  dev  docker-entrypoint.d  docker-entrypoint.sh  etc  home  lib  lib64  media  mnt  opt  proc  root  run	sbin  srv  sys	tmp  usr  var
    root@dfa810018e45:/# 
    
    
    
    #复制宿主机文件到容器内部
    [root@k8s-master ~]# docker container ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                NAMES
    dfa810018e45        web01:v1.0          "/docker-entrypoint.…"   7 minutes ago       Up 7 minutes                0.0.0.0:82->80/tcp   mynginx2
    79b5cab6d470        hello-world         "/hello"                 18 minutes ago      Exited (0) 18 minutes ago                        wonderful_poitras
    6bec9470bd9b        nginx               "/docker-entrypoint.…"   23 minutes ago      Up 23 minutes               0.0.0.0:80->80/tcp   mynginx
    
    
    [root@k8s-master ~]# docker cp hello.tar mynginx:/
    
    [root@k8s-master ~]# docker exec -it mynginx bash
    
    root@6bec9470bd9b:/# ls
    1  2  3  4  bin  boot  dev  docker-entrypoint.d  docker-entrypoint.sh  etc  hello.tar  home  lib  lib64  media	mnt  opt  proc	root  run  sbin  srv  sys  tmp	usr  var
    root@6bec9470bd9b:/# 
    
    
    
    #查看容器运行日志
    [root@k8s-master ~]# docker logs dfa810018e45
    /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
    /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
    /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
    10-listen-on-ipv6-by-default.sh: IPv6 listen already enabled, exiting
    /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
    /docker-entrypoint.sh: Configuration complete; ready for start up
    
    
    #容器运行的进程
    [root@k8s-master ~]# docker top dfa810018e45
    UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
    root                25723               25706               0                   16:23               ?                   00:00:00            nginx: master process nginx -g daemon off;
    101                 25767               25723               0                   16:23               ?                   00:00:00            nginx: worker process
    [root@k8s-master ~]# 
    
    。。。。。。。
    

    更多的命令,查看命令手册即可
    docker run --help
    docker ps --help
    docker container --help

    展开全文
  • 1、Docker容器的方式 1)Docker访问外网 Docker容器连接到宿主机的Docker0网桥访问外网;默认自动将docker0网桥添加到docker容器中。 2)容器和容器之间通信 需要管理员创建网桥;将不同的容器连接到网桥上实现...
  • miniDocker提供在小程序端管理服务器上的Docker容器及Docker Swarm,可远程执行Docker的一系列基本操作: 启动 docker start 暂停 docker pause 停止 docker stop 删除 docker rm 读取容器基本信息 docker ps 查看...
  • docker容器管理【创建及使用等】

    千次阅读 2021-06-17 12:33:49
    文章目录容器查看查看运行中的容器查看所有容器【含未运行中的】查看容器运行状态docker参数说明docker run 参数说明容器创建及使用创建一个最简单的容器删除一个已创建的容器创建一个带终端的容器一次性容器一直...

    容器查看

    查看运行中的容器

    • 命令:docker ps
      我里面没有运行任何容器,所以是空的
    [root@ccx ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    [root@ccx ~]# 
    
    

    查看所有容器【含未运行中的】

    • 命令:docker ps -a
      我里面没有运行任何容器,所以是空的
    [root@ccx ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    [root@ccx ~]# 
    

    查看容器运行状态

    • 命令:docker top NAMES【docker ps 查看NAMES】
      这个里面有这个容器的详细信息,包括运行时间啦这些,但我们平常看里面的CMD运行的是什么居多。
    [root@ccx ~]# docker top db
    UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
    polkitd             34719               34699               1                   17:51               pts/4               00:00:00            /bin/bash /usr/local/bin/docker-entrypoint.sh mysqld
    polkitd             34779               34719               99                  17:51               pts/4               00:00:06            mysqld --initialize-insecure
    [root@ccx ~]# 
    

    查看容器属性【代码】

    • 命令:docker inspect NAMES【docker ps 查看NAMES】
      这个命令查看到的内容是容器的底层代码,底层代码的作用就不做描述了,后面会经常用到这个命令查看属性的。
    • 我这以通过底层查看容器IP的方式展示下
    [root@ccx ~]# docker inspect db | grep IPA
                "SecondaryIPAddresses": null,
                "IPAddress": "172.17.0.2",
                        "IPAMConfig": null,
                        "IPAddress": "172.17.0.2",
    [root@ccx ~]# 
    
    • 下面是一个容器的默认全部底层代码,可以看看
    [root@ccx ~]# docker inspect db
    [
        {
            "Id": "e3f4ca9e2486b90cc95fece843c8772fa58d5acfc94ca21c78ebe3b1c28bcb2e",
            "Created": "2021-06-18T01:52:55.177573842Z",
            "Path": "docker-entrypoint.sh",
            "Args": [
                "mysqld"
            ],
            "State": {
                "Status": "running",
                "Running": true,
                "Paused": false,
                "Restarting": false,
                "OOMKilled": false,
                "Dead": false,
                "Pid": 23305,
                "ExitCode": 0,
                "Error": "",
                "StartedAt": "2021-06-18T01:52:55.532846553Z",
                "FinishedAt": "0001-01-01T00:00:00Z"
            },
            "Image": "sha256:9e64176cd8a206f88336506fe52cd8f87423147dc197d0250175dddc39465e90",
            "ResolvConfPath": "/var/lib/docker/containers/e3f4ca9e2486b90cc95fece843c8772fa58d5acfc94ca21c78ebe3b1c28bcb2e/resolv.conf",
            "HostnamePath": "/var/lib/docker/containers/e3f4ca9e2486b90cc95fece843c8772fa58d5acfc94ca21c78ebe3b1c28bcb2e/hostname",
            "HostsPath": "/var/lib/docker/containers/e3f4ca9e2486b90cc95fece843c8772fa58d5acfc94ca21c78ebe3b1c28bcb2e/hosts",
            "LogPath": "",
            "Name": "/db",
            "RestartCount": 0,
            "Driver": "overlay2",
            "MountLabel": "system_u:object_r:svirt_sandbox_file_t:s0:c796,c964",
            "ProcessLabel": "system_u:system_r:svirt_lxc_net_t:s0:c796,c964",
            "AppArmorProfile": "",
            "ExecIDs": null,
            "HostConfig": {
                "Binds": null,
                "ContainerIDFile": "",
                "LogConfig": {
                    "Type": "journald",
                    "Config": {}
                },
                "NetworkMode": "default",
                "PortBindings": {},
                "RestartPolicy": {
                    "Name": "no",
                    "MaximumRetryCount": 0
                },
                "AutoRemove": false,
                "VolumeDriver": "",
                "VolumesFrom": null,
                "CapAdd": null,
                "CapDrop": null,
                "Dns": [],
                "DnsOptions": [],
                "DnsSearch": [],
                "ExtraHosts": null,
                "GroupAdd": null,
                "IpcMode": "",
                "Cgroup": "",
                "Links": null,
                "OomScoreAdj": 0,
                "PidMode": "",
                "Privileged": false,
                "PublishAllPorts": false,
                "ReadonlyRootfs": false,
                "SecurityOpt": null,
                "UTSMode": "",
                "UsernsMode": "",
                "ShmSize": 67108864,
                "Runtime": "docker-runc",
                "ConsoleSize": [
                    0,
                    0
                ],
                "Isolation": "",
                "CpuShares": 0,
                "Memory": 0,
                "NanoCpus": 0,
                "CgroupParent": "",
                "BlkioWeight": 0,
                "BlkioWeightDevice": null,
                "BlkioDeviceReadBps": null,
                "BlkioDeviceWriteBps": null,
                "BlkioDeviceReadIOps": null,
                "BlkioDeviceWriteIOps": null,
                "CpuPeriod": 0,
                "CpuQuota": 0,
                "CpuRealtimePeriod": 0,
                "CpuRealtimeRuntime": 0,
                "CpusetCpus": "",
                "CpusetMems": "",
                "Devices": [],
                "DiskQuota": 0,
                "KernelMemory": 0,
                "MemoryReservation": 0,
                "MemorySwap": 0,
                "MemorySwappiness": -1,
                "OomKillDisable": false,
                "PidsLimit": 0,
                "Ulimits": null,
                "CpuCount": 0,
                "CpuPercent": 0,
                "IOMaximumIOps": 0,
                "IOMaximumBandwidth": 0
            },
            "GraphDriver": {
                "Name": "overlay2",
                "Data": {
                    "LowerDir": "/var/lib/docker/overlay2/8ed192638e890747cf70feb4df9b346ffb790a95c4f15b35913fca2e426c7006-init/diff:/var/lib/docker/overlay2/9f169b39dbf27e6bb47c9977c0a108c7956a2e228010b8376a2f55fa996dc15c/diff:/var/lib/docker/overlay2/5e9029a95df77de463ef9269a0b4ec52dc44c8b8befcac3cec9b2c0dc86904e4/diff:/var/lib/docker/overlay2/73d981abdeda246ebd26897c56a5f5f56466dfdf1f636bfe1bf76fd2ca3ece4a/diff:/var/lib/docker/overlay2/d9e27b7ce66aa598750f15e7ac8af9a596ad13b84d44973cf4beb2a7398b4b66/diff:/var/lib/docker/overlay2/00835e558036dafe56792056d4f972d555346639d319bec8223ed32dd5c4ded3/diff:/var/lib/docker/overlay2/4c709162fb4ebb73c84cd1b49276f50cdf49b512e0ac5b1ce5f376ba2cbe01d3/diff:/var/lib/docker/overlay2/798b82941f0407a72167d18ac0b47b873271cd43d6af3edb93cf190e7d5772ee/diff:/var/lib/docker/overlay2/aa593048918a930d13919fcbe450d6a42867aa5aef84aa126d8be6aa329d7e4b/diff:/var/lib/docker/overlay2/39dffddde3d37bded76d68ba1026034a0128663f877a7df82a38b32e72316902/diff:/var/lib/docker/overlay2/1881a218b3afb6e879db7f9ab2b4c59dc4ed2cea82a54983670a2e64fc5c5dbf/diff:/var/lib/docker/overlay2/a2f3f18b577f7bbe72a04b6a4552989ba92425654e40f7275dc3c7737b89222a/diff",
                    "MergedDir": "/var/lib/docker/overlay2/8ed192638e890747cf70feb4df9b346ffb790a95c4f15b35913fca2e426c7006/merged",
                    "UpperDir": "/var/lib/docker/overlay2/8ed192638e890747cf70feb4df9b346ffb790a95c4f15b35913fca2e426c7006/diff",
                    "WorkDir": "/var/lib/docker/overlay2/8ed192638e890747cf70feb4df9b346ffb790a95c4f15b35913fca2e426c7006/work"
                }
            },
            "Mounts": [
                {
                    "Type": "volume",
                    "Name": "bfd01afaff30e2040931a49fa46b7b118448e92f52bae935162dcff9fe973a7c",
                    "Source": "/var/lib/docker/volumes/bfd01afaff30e2040931a49fa46b7b118448e92f52bae935162dcff9fe973a7c/_data",
                    "Destination": "/var/lib/mysql",
                    "Driver": "local",
                    "Mode": "",
                    "RW": true,
                    "Propagation": ""
                }
            ],
            "Config": {
                "Hostname": "e3f4ca9e2486",
                "Domainname": "",
                "User": "",
                "AttachStdin": false,
                "AttachStdout": false,
                "AttachStderr": false,
                "ExposedPorts": {
                    "3306/tcp": {}
                },
                "Tty": true,
                "OpenStdin": true,
                "StdinOnce": false,
                "Env": [
                    "MYSQL_ROOT_PASSWORD=passwd",
                    "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                    "GOSU_VERSION=1.7",
                    "MYSQL_MAJOR=5.7",
                    "MYSQL_VERSION=5.7.18-1debian8"
                ],
                "Cmd": [
                    "mysqld"
                ],
                "ArgsEscaped": true,
                "Image": "hub.c.163.com/library/mysql",
                "Volumes": {
                    "/var/lib/mysql": {}
                },
                "WorkingDir": "",
                "Entrypoint": [
                    "docker-entrypoint.sh"
                ],
                "OnBuild": null,
                "Labels": {}
            },
            "NetworkSettings": {
                "Bridge": "",
                "SandboxID": "6e0d9e9be9cedec3320f329bc20e63511a533eca962e37bd7670d9feca162ecc",
                "HairpinMode": false,
                "LinkLocalIPv6Address": "",
                "LinkLocalIPv6PrefixLen": 0,
                "Ports": {
                    "3306/tcp": null
                },
                "SandboxKey": "/var/run/docker/netns/6e0d9e9be9ce",
                "SecondaryIPAddresses": null,
                "SecondaryIPv6Addresses": null,
                "EndpointID": "9bb1d214046771a79cd61942e4ebc7a1b6ebc8cc34712a1d50d662f4c8529891",
                "Gateway": "172.17.0.1",
                "GlobalIPv6Address": "",
                "GlobalIPv6PrefixLen": 0,
                "IPAddress": "172.17.0.2",
                "IPPrefixLen": 16,
                "IPv6Gateway": "",
                "MacAddress": "02:42:ac:11:00:02",
                "Networks": {
                    "bridge": {
                        "IPAMConfig": null,
                        "Links": null,
                        "Aliases": null,
                        "NetworkID": "44088b20045266ff36b1054608dbae06239eb573d66da6909eb2e0f36bb792cd",
                        "EndpointID": "9bb1d214046771a79cd61942e4ebc7a1b6ebc8cc34712a1d50d662f4c8529891",
                        "Gateway": "172.17.0.1",
                        "IPAddress": "172.17.0.2",
                        "IPPrefixLen": 16,
                        "IPv6Gateway": "",
                        "GlobalIPv6Address": "",
                        "GlobalIPv6PrefixLen": 0,
                        "MacAddress": "02:42:ac:11:00:02"
                    }
                }
            }
        }
    ]
    [root@ccx ~]# 
    

    docker参数说明

    • 获取命令帮助:docker --help
      下面是对一些参数做一些说明
      使用方式,直接跟在docker后面
    参数说明
    –api-cors-header=开放远程API调用的CORS头信息。这个接口开关对想进行二次开发的上层应用提供了支持
    -b, --bridge=挂载以存在的网桥设备到Docker容器里。注意,使用none可以停用容器里的网络
    –bip=使用CIDR地址来设定网桥的IP。注意,此参数和-b不能一起使用
    -D, --debug=false开启Debug模式。如docker -d -D
    -d, --daemon=false开启Daemon模式
    –default-gateway=容器默认网关IPv4地址
    –default-gateway=容器默认网关IPv4地址
    –default-gateway-v6=容器默认网关IPv6地址
    –default-ulimit=[]容器设置默认ulimits
    –dns=[]强制容器使用DNS服务器。例如:docker -d --dns 8.8.8.8
    –dns-search=[]强制容器使用指定的DNS搜索域名。例如:docker -d --dns-search example.com
    -e, --exec-driver=native强制容器使用指定的运行时驱动。例如:docker -d -e lxc
    –exec-opt=[]设置执行驱动选项
    –exec-root=/var/run/docker配置docker执行驱动的根目录
    –fixed-cidr=IPv4 子网设置掩码(ex:10.20.0.0.0/16),这个子网必须嵌套于网桥子网内(由-b或者–bip定义)
    –fixed-cidr-v6=IPv6子网设置掩码
    -G, --group=docker在后台运行模式下,赋予指定的Group到相应的unix socket上。当参数–group赋予空字符串时,将去除组信息
    -g, --graph=/var/lib/docker配置Docker 运行时根目录
    -H, --host=[]在后台模式下指定socket绑定,可以绑定一个或多个tcp://host:port,unix:///path/to/socket,fd://*或fd://socketfd.例如:docker -H tcp://0.0.0.0:2375 ps
    -h, --help=false帮助
    –icc=true启用内联容器的通信
    –insecure-registry=[]对于特定注册启用非安全通信(对于HTTPS没有证书校验,启用HTTP启用fallback)
    –ip=0.0.0.0容器绑定IP时使用的默认IP地址
    –ip-forward=true启用容器的net.ipv4.ip_forward
    –ip-masq=true对于网桥的IP段启用ip伪装
    –iptables=true启用Docker容器自定义的iptable规则
    –ipv6=false启用IPv6网络
    -l, --log-level=info设置日志级别
    –label=[]为守护进程设置标签
    –log-driver=json-file默认容器驱动日志
    –log-opt=map[]设置日志驱动选项
    –mtu=0设置容器网络的MTU值,如果没有这个参数,选用默认route MTU,如果没有默认route,就设置常量值1500
    -p, --pidfile=/var/run/docker.pid后台进程PID文件路径
    –registry-mirror=[]指定优先使用的Docker registry镜像
    -s, --storage-driver=强制容器运行时使用指定的存储驱动。例如:指定使用devicemapper, docker -d -s devicemapper
    –selinux-enabled=false启用selinux支持
    –storage-opt=[]配置存储驱动的参数
    –tls=false启用TLS默认开关
    –tlscacert=~/.docker/ca.pem通过CA认证过的certificate文件路径
    –tlscert=~/.docker/cert.pemTLS的certificate文件路径
    –tlskey=~/.docker/key.pemTLS的key文件路径
    –tlsverify=false使用TLS并做后台进程与客户端通讯的验证
    –userland-proxy=true回路使用用户代理
    -v, --version=false显示版本信息

    docker run 参数说明

    • 使用方式:放在 docker run后面
    参数说明
    -a=map[]附加标准输入、输出或者错误输出
    -c=0共享CPU格式(相对重要)
    -cidfile="":将容器的ID标识写入文件
    -d=false分离模式,在后台运行容器,并且打印出容器ID
    -e=[]设置环境变量
    -h=""容器的主机名称
    -i=false保持输入流开放即使没有附加输入流
    -privileged=false给容器扩展的权限
    -m=""内存限制 (格式:, unit单位 = b, k, m or g)
    -n=true允许镜像使用网络
    -p=匹配镜像内的网络端口号,端口映射也是-p,格式是 -p 物理端口:容器端口
    -rm=false当容器退出时自动删除容器 (不能跟 -d一起使用)
    -t=false分配一个伪造的终端输入
    -u=""用户名或者ID
    -dns=[]自定义容器的DNS服务器
    -v=[]创建一个挂载绑定:[host-dir]:[container-dir]:[rw
    -volumes-from=""挂载容器所有的卷
    -entrypoint=""覆盖镜像设置默认的入口点
    -w=""工作目录内的容器
    -lxc-conf=[]添加自定义-lxc-conf=“lxc.cgroup.cpuset.cpus = 0,1”
    -sig-proxy=true代理接收所有进程信号(even in non-tty mode)
    -expose=[]让你主机没有开放的端口
    -link=""连接到另一个容器(name:alias)
    -name=""分配容器的名称,如果没有指定就会随机生成一个
    -P=falsePublish all exposed ports to thehost interfaces 公布所有显示的端口主机接口

    容器创建及使用

    • docker运行原理,是需要依赖一个bash【终端】进程,如果bash【终端】进程结束,那么docker也就停了,所以要让docker一直保持运行,就需要一直有一个bash【终端】进程在使用中,而这个容器就挂在在这个进程上面。
      所以每当有一个容器运行,就会产生一个bash【终端】进程。
    • 创建容器的前提是需要有镜像哈。
    [root@ccx ~]# docker images
    REPOSITORY                        TAG                 IMAGE ID            CREATED             SIZE
    docker.io/nginx                   latest              d1a364dc548d        3 weeks ago         133 MB
    hub.c.163.com/library/wordpress   latest              dccaeccfba36        3 years ago         406 MB
    hub.c.163.com/library/centos      latest              328edcd84f1b        3 years ago         193 MB
    hub.c.163.com/library/mysql       latest              9e64176cd8a2        4 years ago         407 MB
    [root@ccx ~]# 
    

    创建一个最简单的容器

    • 这种方式创建的容器是没有运行的,所以只能通过docker ps -a 查看到。
      如果把进程【cmd】比喻成人的灵魂,那么容器就是人的肉体,现在仅仅是创建了人的肉体,但没有灵魂,这也肉体【容器】也就是个摆设而已。
    • 命令: docker run REPOSITORY名称【名称用docker images查看】
    • 如,我创建镜像中的centos镜像,代码如下
    [root@ccx ~]# docker images
    REPOSITORY                        TAG                 IMAGE ID            CREATED             SIZE
    docker.io/nginx                   latest              d1a364dc548d        3 weeks ago         133 MB
    hub.c.163.com/library/wordpress   latest              dccaeccfba36        3 years ago         406 MB
    hub.c.163.com/library/centos      latest              328edcd84f1b        3 years ago         193 MB
    hub.c.163.com/library/mysql       latest              9e64176cd8a2        4 years ago         407 MB
    [root@ccx ~]# 
    [root@ccx ~]# docker run hub.c.163.com/library/centos
    [root@ccx ~]# docker ps -a
    CONTAINER ID        IMAGE                          COMMAND             CREATED             STATUS                      PORTS               NAMES
    58fda0018860        hub.c.163.com/library/centos   "/bin/bash"         24 seconds ago      Exited (0) 12 seconds ago                       lucid_ardinghelli
    [root@ccx ~]# 
    

    删除一个已创建的容器

    • 删除未使用中的命令:docker rm CONTAINER ID 或 NAMES【docker ps查看】
      若使用CONTAINER ID进行删除,如果运行容器少,我们可以只使用ID签2位即可【前提是该ID具有唯一辨识】
    • 如,我删除centos进程
    [root@ccx ~]# docker ps -a
    CONTAINER ID        IMAGE                          COMMAND             CREATED             STATUS                      PORTS               NAMES
    58fda0018860        hub.c.163.com/library/centos   "/bin/bash"         24 seconds ago      Exited (0) 12 seconds ago                       lucid_ardinghelli
    [root@ccx ~]# docker rm 58
    58
    [root@ccx ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    [root@ccx ~]# 
    
    • 删除一个使用中的容器命令:docker rm CONTAINER ID 或 NAMES --force【- -force可以写成-f】【docker ps查看NAMES】
      force参数就是强制删除的意思
    • 如,我删除一个正在使用中的容器,如果不加参数就直接报错了,加上参数才可以正常删除
    [root@ccx ~]# docker ps
    CONTAINER ID        IMAGE                          COMMAND             CREATED             STATUS              PORTS               NAMES
    5a2339146b8e        hub.c.163.com/library/centos   "/bin/bash"         3 minutes ago       Up 3 minutes                            frosty_payne
    [root@ccx ~]# docker rm 5a
    Error response from daemon: You cannot remove a running container 5a2339146b8ef64a60e1892a1d2e1d4a0e2ce1c5d80f811d80a18e7f3f90154a. Stop the container before attempting removal or use -f
    [root@ccx ~]# docker rm 5a --force
    5a
    [root@ccx ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    [root@ccx ~]# 
    

    删除所有容器

    • 删除全部容器:docker rm -f $(docker ps -aq)【固定的】
      docker ps -aq 这是查看全部容器的con ID,所以这样就可以直接全部删除拉。
    • 如下,我有2个容器,直接一下子就全给干掉了
    [root@ccx ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
    e300b79fce1b        docker.io/busybox   "sh"                     9 minutes ago       Up 9 minutes                            c1
    ab8cc63f0c17        docker.io/nginx     "/docker-entrypoin..."   14 minutes ago      Up 14 minutes                           web
    [root@ccx ~]# docker rm -f $(docker ps -aq)
    e300b79fce1b
    ab8cc63f0c17
    [root@ccx ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    [root@ccx ~]# 
    

    创建一个带终端的容器

    • 从下面开始,就会使用到docker run 的各种参数了,对这个不清楚的,看上面的docker run 参数说明。
    • 带终端就是创建一个带模拟终端且允许交互的一个容器,在docker中,自动进入是attach
      注:带终端一般是it一起使用,如果仅仅使用d模拟终端,那么这个终端是没办法操作的,并且该终端无法停止,只能重新打开一个终端删除这个容器。

    一次性容器

    • 命令:docker run -it REPOSITORY名称【名称用docker images查看】
    • 一次性容器的意思就是,当我们创建成功且进入该容器以后,如果我们exit退出容器,该容器就停止运行了,不能通过attach重新进入,需要重新启动该容器后才能attach进入,或者删除重新建。
    • 如,我创建了一个带终端且能进入交互的centos容器
      可以看到路径变成一串数字了,这是容器的终端,并且现在这个容器命令很少的,连基本的 ip a 这些命令都没。
    [root@ccx ~]# docker run -it hub.c.163.com/library/centos
    [root@5a2339146b8e /]# ip a 
    bash: ip: command not found
    [root@5a2339146b8e /]# ifconfig
    bash: ifconfig: command not found
    [root@5a2339146b8e /]# ls
    anaconda-post.log  dev  home  lib64       media  opt   root  sbin  sys  usr
    bin                etc  lib   lost+found  mnt    proc  run   srv   tmp  var
    [root@5a2339146b8e /]# 
    

    一直运行的容器【含重新进入容器】

    • 创建一个一直运行的容器就是创建成功后即使退出当前容器,容器状态依然是运行中,可以通过attach重新进入该容器里面
    • 查看容器是否运行的方式为:
      • 执行命令:docker ps
      • 其中有一个参数是,STATUS,下面显示的为UP即该容器在运行中
    • 创建命令:docker run -it --restart=always --name=自定义名称 REPOSITORY名称【名称用docker images查看】
      参数 --restart=always表示一直运行,但我们一般结合–name=自定义名称使用,这样方便我们再次进入时使用自定义名称,而不是系统自动生成的名称了
    • 进入正在运行的容器命令:docker attach NAMES【ps可以查看NAMES】
    • 如,我创建一个一直运行的centos容器,以及退出并重新进入操作
    [root@ccx ~]# docker run -it --restart=always --name=d1 hub.c.163.com/library/centos
    [root@b943f071db6b /]# ls
    anaconda-post.log  dev  home  lib64       media  opt   root  sbin  sys  usr
    bin                etc  lib   lost+found  mnt    proc  run   srv   tmp  var
    [root@b943f071db6b /]# exit #退出容器
    exit
    [root@ccx ~]# docker ps
    CONTAINER ID        IMAGE                          COMMAND             CREATED             STATUS              PORTS               NAMES
    b943f071db6b        hub.c.163.com/library/centos   "/bin/bash"         18 seconds ago      Up 10 seconds                           d1
    [root@ccx ~]# docker attach d1
    [root@b943f071db6b /]# ls
    anaconda-post.log  dev  home  lib64       media  opt   root  sbin  sys  usr
    bin                etc  lib   lost+found  mnt    proc  run   srv   tmp  var
    [root@b943f071db6b /]# 
    
    • 如果我们不想每次创建成功都进入到终端,可以加一个参数d,配合it使用就是docker run -dit ...
      创建成功以后使用 docker attach NAMES进入
      如下
    [root@ccx ~]# docker rm -f d1 #删除之前创建的
    d1
    [root@ccx ~]# docker run -dit --restart=always --name=d1 hub.c.163.com/library/centos
    dcfb1bd778a2021ff2889653dc955954721c928b75a3646cb74cbfd2c19a6247
    [root@ccx ~]# docker attach d1 #手动进入d1容器
    [root@dcfb1bd778a2 /]# exit #退出容器
    exit
    [root@ccx ~]# 
    

    创建一个退出容器后自动删除的容器

    • 这个更多用于测试使用,免去了自己手动删容器的步骤
    • 参数:--rm
      注:这个不能和 --restart=always共同存在。
    • 如,我创建一个centos镜像,进入后自动删除
    [root@ccx ~]# docker run -it --rm --name=d1 -e ccx=hero hub.c.163.com/library/centos
    [root@6ecf6a164b75 /]# echo $ccx
    hero
    [root@6ecf6a164b75 /]# exit
    exit
    [root@ccx ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    [root@ccx ~]# 
    

    创建自定义cmd的容器

    • 如果我们不指定cmd,则运行的是镜像默认的cmd,默认cmd查看命令: docker histrory 镜像名称
      选项中 CMMENT内容就是默认运行的cmd了
    [root@ccx ~]# docker history hub.c.163.com/library/centos | head -n 2
    IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
    328edcd84f1b        3 years ago         /bin/sh -c #(nop)  CMD ["/bin/bash"]            0 B                 
    [root@ccx ~]# 
    
    • 自定义cmd方式:直接在创建容器的最后面加上想运行cmd的命令即可
    • 如,我就用上面创建一个带终端的命令,让cmd变成 sleep 1000
    [root@ccx ~]# docker run -dit --restart=always --name=d1 hub.c.163.com/library/centos sleep 1000
    47003712cf729e77cfe464f0c991320ffab0e41562feef2e459a861b079a797b
    [root@ccx ~]# 
    [root@ccx ~]# docker attach d1
    ^C
    ^C
    
    ^C
    
    # 因为在睡眠中,所以进入交互后是不能做任何操作的,必须重新打开一个终端,删掉这个容器才可以提前结束睡眠。
    # 不能看到提示符的原因是,我们如果想看到提示符的话,前提是容器有有终端有shell。
    # 下面内容是在一个新终端中看到的,
    #可以看到状态是UP,COMMAND 的内容变成自定义了
    [root@ccx ~]# docker ps 
    CONTAINER ID        IMAGE                          COMMAND             CREATED              STATUS              PORTS               NAMES
    47003712cf72        hub.c.163.com/library/centos   "sleep 1000"        About a minute ago   Up About a minute                       d1
    [root@ccx ~]# 
    [root@ccx ~]# docker rm -f d1
    d1
    [root@ccx ~]# 
    

    创建指定端口的容器【含端口映射】

    不指定映射端口号

    • 指定端口的参数是 -p 容器端口号 【虽然nginx默认端口就是80,但如果要映射到物理端口,这个就必须加,如果不加的话就没办法自动生成物理端口映射对应容器端口】
    • 如果我们不指定物理端口号,就会自动生成一个端口号用来映射
    • 我们用nginx做一个实验
    [root@ccx ~]# docker images
    REPOSITORY                        TAG                 IMAGE ID            CREATED             SIZE
    docker.io/nginx                   latest              d1a364dc548d        3 weeks ago         133 MB
    hub.c.163.com/library/wordpress   latest              dccaeccfba36        3 years ago         406 MB
    hub.c.163.com/library/centos      latest              328edcd84f1b        3 years ago         193 MB
    hub.c.163.com/library/mysql       latest              9e64176cd8a2        4 years ago         407 MB
    [root@ccx ~]# docker run -dit --name=web --restart=always -p 80 docker.io/nginx
    ade92da1f9d587792f740bf62e520c099ca062b7b4003537509742f7c9c2137d
    [root@ccx ~]# docker ps 
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   NAMES
    ade92da1f9d5        docker.io/nginx     "/docker-entrypoin..."   10 seconds ago      Up 8 seconds        0.0.0.0:32769->80/tcp   web
    [root@ccx ~]# 
    
    • 上面使用docker ps可以看到PORTS中32769对应的80端口
      此时我们使用浏览器访问ip:32768【ip是运行这个容器的ip】可以看到到nginx内容了
      因为nginx未配置任何内容,所以访问后显示的是下面内容
    Welcome to nginx!
    If you see this page, the nginx web server is successfully installed and working. Further configuration is required.
    
    For online documentation and support please refer to nginx.org.
    Commercial support is available at nginx.com.
    
    Thank you for using nginx.
    

    指定映射端口号

    • 指定映射端口的参数是 -p 物理端口号:容器端口号
    • 注,物理端口不能和主机现有的端口冲突,比如现在想映射到物理的81端口,则在主机上执行下面命令,没有结果就证明该端口没有被占用[root@ccx ~]# netstat -ntlp | grep 81
    • 我们用nginx做一个实验
    [root@ccx ~]# netstat -ntlp | grep 81
    [root@ccx ~]# 
    [root@ccx ~]# docker rm -f web
    web
    [root@ccx ~]# docker run -dit --name=web --restart=always -p 81:80 docker.io/nginx
    82e3a85f1e2e4a0bf31d8d5a67aee16e1088487f565f536683c3235131e3d336
    [root@ccx ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
    82e3a85f1e2e        docker.io/nginx     "/docker-entrypoin..."   6 seconds ago       Up 4 seconds        0.0.0.0:81->80/tcp   web
    [root@ccx ~]# 
    
    • 如上,我们可以看到81端口已经映射到80上了
      此时我们使用浏览器访问ip:81【ip是运行这个容器的ip】可以看到到nginx内容了
      因为nginx未配置任何内容,所以访问后显示的是下面内容
    Welcome to nginx!
    If you see this page, the nginx web server is successfully installed and working. Further configuration is required.
    
    For online documentation and support please refer to nginx.org.
    Commercial support is available at nginx.com.
    
    Thank you for using nginx.
    

    创建指定变量的容器

    设置自定义变量

    • 参数是 -e 变量
      注: 每个参数前面都需要加上 -e,多个参数有空格隔开。
    • 如,我们现在创建一个变量 a=111 b=222的容器
    [root@ccx ~]# docker images| grep centos
    hub.c.163.com/library/centos      latest              328edcd84f1b        3 years ago         193 MB
    [root@ccx ~]# docker run -dit --restart=always --name=d1 -e a=111 -e b=222 hub.c.163.com/library/centos
    952082ef20cb263a302801c0cc958945163c2cf17b35a0368388b02a16206336
    [root@ccx ~]# docker ps
    CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS              PORTS                NAMES
    952082ef20cb        hub.c.163.com/library/centos   "/bin/bash"              10 seconds ago      Up 7 seconds                             d1
    82e3a85f1e2e        docker.io/nginx                "/docker-entrypoin..."   4 minutes ago       Up 4 minutes        0.0.0.0:81->80/tcp   web
    [root@ccx ~]# docker attach d1
    [root@952082ef20cb /]# echo $a
    111
    [root@952082ef20cb /]# echo $b
    222
    [root@952082ef20cb /]# 
    

    通过变量指定参数

    • 参数是 -e 参数=
      注: 每个参数前面都需要加上 -e,多个参数有空格隔开。
    • 很多镜像,都需要通过变量来指定一些参数
      你去镜像官网看的时候,有很多默认参数,如果想修改这些默认参数,就需要通过变量的方式来修改,比如 mysql
    • 参数名称查看:我们创建一个mysql的容器,我们是不知道mysql的root密码的,我们就需要通过变量来指定密码,那么我们如何知道这个镜像指定密码的参数呢?
      去镜像官网搜索你现在使用的镜像,下拉,找到Environment Variables ,下面就有对各个参数的作用及默认值做出说明==【我博客中有一篇文章为:docker镜像下载及管理的文章,里面有详细说明如何搜索docker镜像及网址这些信息】==
      在这里插入图片描述
    • 并且mysq镜像创建的时候必须指定密码,否则该容器是无法创建成功的,现在我们就以指定mysql容器密码创建为例
    [root@ccx ~]# docker run -dit --name=db -e MYSQL_ROOT_PASSWORD=passwd hub.c.163.com/library/mysql
    14b470f19d9ed3185b11250af892087ace84dff301eb73049424956532b4903f
    [root@ccx ~]# docker ps
    CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS               NAMES
    14b470f19d9e        hub.c.163.com/library/mysql   "docker-entrypoint..."   8 seconds ago       Up 5 seconds        3306/tcp            db
    

    不进入容器执行命令及给容器新增bash进程

    下面我以mysql容器做测试,因为mysql是一个比较特殊的镜像,她默认的cmd进程是mysqld,没有bash,所以我们不能直接进入该容器,需要先手动创建一个bash才行。

    不进入容器执行命令

    • 命令:docker exec NAMES 命令【docker ps 查看NAMES】
      这个就不多做解释了,就是不进入容器执行指定命令罢了
      注:如果执行报错,是因为容器里面没有这个命令。
    [root@ccx ~]# docker ps
    CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS               NAMES
    879d21c0931d        hub.c.163.com/library/mysql   "docker-entrypoint..."   8 minutes ago       Up 8 minutes        3306/tcp            db
    [root@ccx ~]# docker exec db ip a 
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    41: eth0@if42: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
        link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
        inet 172.17.0.2/16 scope global eth0
           valid_lft forever preferred_lft forever
        inet6 fe80::42:acff:fe11:2/64 scope link 
           valid_lft forever preferred_lft forever
    [root@ccx ~]# 
    [root@ccx ~]# docker exec db ifconfig
    rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:235: starting container process caused "exec: \"ifconfig\": executable file not found in $PATH"
    
    [root@ccx ~]# 
    

    给容器新增bash进程

    • 新建bash进程和创建docker时带的参数一样,都是-it
      命令:dicjer exec -it BANES 进程名称

    • 如,我给db容器新增一个bash进程
      命令:docker exec -it db bash 【注:这个是一次性的,退出候该bash就结束了,后面要重新进入,必须再次执行该命令】

    [root@ccx ~]# docker ps
    CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS               NAMES
    879d21c0931d        hub.c.163.com/library/mysql   "docker-entrypoint..."   14 minutes ago      Up 14 minutes       3306/tcp            db
    [root@ccx ~]# docker exec -it db bash
    root@879d21c0931d:/# 
    root@879d21c0931d:/# 
    root@879d21c0931d:/# 
    root@879d21c0931d:/# ip a 
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    41: eth0@if42: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
        link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
        inet 172.17.0.2/16 scope global eth0
           valid_lft forever preferred_lft forever
        inet6 fe80::42:acff:fe11:2/64 scope link 
           valid_lft forever preferred_lft forever
    root@879d21c0931d:/# exit
    exit
    [root@ccx ~]# docker top db
    UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
    polkitd             34719               34699               0                   17:51               pts/4               00:00:04            mysqld
    [root@ccx ~]# 
    

    容器的停止启动操作

    我们先创建一个自动启动的容器d1

    [root@ccx ~]# docker run -dit --restart=always --name=d1 hub.c.163.com/library/centos
    f1881049e6fb472a4b1f6ca819d45734b231ca5adcd33f30c5b190bdee3a044d
    [root@ccx ~]# docker ps
    CONTAINER ID        IMAGE                          COMMAND             CREATED             STATUS              PORTS               NAMES
    f1881049e6fb        hub.c.163.com/library/centos   "/bin/bash"         8 seconds ago       Up 7 seconds                            d1
    [root@ccx ~]# 
    

    停止一个容器

    • 停止命令:docker stop NAMES 【docker ps 查看names】
      注:即使在创建容器的时候添加了自动重启的参数[–restart=always],但是人为的关闭容器,她是不会再给你启动了。
    • 如,我现在关闭一个自动启动的容器d1,看status状态会发现不是run了
    [root@ccx ~]# docker ps
    CONTAINER ID        IMAGE                          COMMAND             CREATED             STATUS              PORTS               NAMES
    f1881049e6fb        hub.c.163.com/library/centos   "/bin/bash"         15 hours ago        Up 5 seconds                            d1
    [root@ccx ~]# docker stop d1
    d1
    [root@ccx ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    [root@ccx ~]# docker ps -a
    CONTAINER ID        IMAGE                          COMMAND             CREATED             STATUS                        PORTS               NAMES
    f1881049e6fb        hub.c.163.com/library/centos   "/bin/bash"         15 hours ago        Exited (137) 10 seconds ago                       d1
    [root@ccx ~]# 
    

    启动或重启一个的容器

    • 启动命令:docker start NAMES 【docker ps 查看names】
    • 重启命令:docker restart NAMES 【docker ps 查看names】
    [root@ccx ~]# docker ps -a
    CONTAINER ID        IMAGE                          COMMAND             CREATED             STATUS                            PORTS               NAMES
    f1881049e6fb        hub.c.163.com/library/centos   "/bin/bash"         15 hours ago        Exited (137) About a minute ago                       d1
    [root@ccx ~]# docker start d1
    d1
    [root@ccx ~]# docker ps
    CONTAINER ID        IMAGE                          COMMAND             CREATED             STATUS              PORTS               NAMES
    f1881049e6fb        hub.c.163.com/library/centos   "/bin/bash"         15 hours ago        Up 2 seconds                            d1
    [root@ccx ~]# 
    
    • 这种启动是可以对一个一次性的容器生效的,就是创建时候不加restart=always这个参数,但当用attach重新进入容器退出以后该容器又停止了
    [root@ccx ~]# docker run -it --name=test hub.c.163.com/library/centos
    [root@214b3aca1174 /]# exit
    exit
    [root@ccx ~]# docker ps -a | grep test
    214b3aca1174        hub.c.163.com/library/centos   "/bin/bash"         16 seconds ago      Exited (0) 11 seconds ago                       test
    [root@ccx ~]# docker start test
    test
    [root@ccx ~]# docker ps
    CONTAINER ID        IMAGE                          COMMAND             CREATED             STATUS              PORTS               NAMES
    214b3aca1174        hub.c.163.com/library/centos   "/bin/bash"         34 seconds ago      Up 8 seconds                            test
    f1881049e6fb        hub.c.163.com/library/centos   "/bin/bash"         15 hours ago        Up About a minute                       d1
    [root@ccx ~]# docker attach test
    [root@214b3aca1174 /]# exit
    exit
    [root@ccx ~]# docker ps
    CONTAINER ID        IMAGE                          COMMAND             CREATED             STATUS              PORTS               NAMES
    f1881049e6fb        hub.c.163.com/library/centos   "/bin/bash"         15 hours ago        Up About a minute                       d1
    [root@ccx ~]# 
    

    容器和主机间文件互相拷贝

    我先创建一个名为db的mysql容器,做后面的测试使用

    [root@ccx ~]# docker run -dit --name=db -e MYSQL_ROOT_PASSWORD=passwd hub.c.163.com/library/mysql
    e3f4ca9e2486b90cc95fece843c8772fa58d5acfc94ca21c78ebe3b1c28bcb2e
    [root@ccx ~]# 
    

    主机拷贝文件到容器

    • 命令:docker cp 主机文件 容器名:容器存放路径
    • 如我将本机的/etc/issue文件拷贝到db容器中的/tmp中
    [root@ccx ~]# docker exec db ls /tmp
    [root@ccx ~]# docker cp /etc/issue db:/tmp
    [root@ccx ~]# docker exec db ls /tmp
    issue
    [root@ccx ~]# 
    

    容器文件拷贝到主机

    • 命令:docker cp 容器名:文件 主机路径
    • 如:我将容器的/etc/hosts文件拷贝到主机的当前路径
    [root@ccx ~]# ls | grep hosts
    [root@ccx ~]# docker cp db:/etc/hosts .
    [root@ccx ~]# ls | grep hosts
    hosts
    [root@ccx ~]# cat 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      e3f4ca9e2486
    [root@ccx ~]# 
    

    docker日志查看

    查看之前的日志

    • 命令: docker logs NAMES 【docker ps查看names】
    • 如:我们现在创建一个不指定密码的mysql镜像,这时候创建的镜像是有问题的,我们就可以通过日志查看报错内容
      如下代码,我们可以看到该镜像报错的原因是没有指定密码
    [root@ccx ~]# docker run -dit --name=db hub.c.163.com/library/mysql
    cc73e818141f2c0877863b7823f80b144a75b17646087b11dc87accad6830b18
    [root@ccx ~]# docker attach db
    You cannot attach to a stopped container, start it first
    [root@ccx ~]# docker logs db
    error: database is uninitialized and password option is not specified 
      You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
    [root@ccx ~]# 
    

    动态查看日志

    • 命令:docker logs -f NAMES【docker ps查看names】
      注:这种情况需要2个终端,一个终端执行上面的动态查看日志命令,另一个终端对容器进行操作,然后容器的日志就会动态显示出来了

    容器的排错思路

    如果容器启动不起来,或者运行错误这些,排错思路就是看日志,最好是看动态日志。

    展开全文
  • docker容器管理,OOM,内存溢出,dump文件堆栈信息分析一、dump文件(.hprof)日志生成方式二、OOM时,dump文件分析 一、dump文件(.hprof)日志生成方式 1.方式一: order.jar 包运行时候加参数,当服务OOM的时候会...

    docker容器管理,OOM,内存溢出,dump文件堆栈信息分析

    一、dump文件(.hprof)日志生成方式

    1.方式一: order.jar 包运行时候加参数,当服务OOM的时候会自动导出dump文件

    -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=目录
    
    1. 方式二: 根据进程PID,手动导出进程文件
    jmap -dump:live,format=b,file=m.hprof PID //在docker容器内执行
    

    执行图示

    注意:因为docker容器管理导出的文件在容器中,需要保重容易与宿主机之间挂载有目录挂载,实现宿主机与容器之间实心文件共享docke容器与宿主机之间目录挂载

    二、OOM时,dump文件分析

    1. 把文件从服务器上下载

    在这里插入图片描述

    1. 使用dump文件分析工具MAT

    2. 下载MAT
      在这里插入图片描述

    3. 看下要分析的.hprof文件的大小,修改mat/MemoryAnalyzer.ini中 -Xmx1024m的大小,爆保证修改之后的大小大于要分析的文件大小

    4. 点击MemoryAnalyzer.exe,出现工具界面

    5. 点击file/Open Heap Dump…,打开下载到本地的.hprof文件
      在这里插入图片描述

    6. 打开之后,点击finish,分析过程比较慢需要一段时间。

    在这里插入图片描述
    8. 点击Leak suspects

    9. 查看第一个占用内存大的问题的堆栈信息
    在这里插入图片描述
    10. 具体的堆栈信息,此信息跟idea和eclipse的控制台报错信息一致,可自己分析代码问题
    在这里插入图片描述

    1. 也可以看问题详情
      在这里插入图片描述
      12,具体信息
      在这里插入图片描述
    展开全文
  • 文章目录docker容器管理docker私有仓库搭建docker数据管理数据卷备份与恢复 docker容器管理 通过镜像创建容器: [root@linux01 ~]# docker images #查看镜像 REPOSITORY TAG IMAGE ID CREATED SIZE centos_net ...
  • Docker容器资源管理

    千次阅读 2018-09-03 16:28:27
    前言 在进行集群实验时,由于物理机不够...那么,使用docker创建的容器与物理机之间的资源占用是怎样的呢?下面我们来具体说明。 1.基础概念 Docker使用cgroups归类运行在容器中的进程。这使得可以管理一组进程...
  • 优点不言而喻,你既可以将你的具体需求容器化部署,又不用直接在宿主机上安装(假设我们没有办法在docker中操作宿主机的docker,那么我们只能将这样的软件程序直接安装到宿主机上,这样显然是不利于管理和维护的)。...
  • 项目6 容器服务管理平台Rancher任务6.1 Rancher安装Rancher是是开源的Docker全栈容器服务管理平台,通过提供“应用商店”可以部署各种应用,提供CaaS容器服务。默认支持通过整合Cattle、Swarm、Hubernetes、MesOS...
  • docker-compose-rule, 使用 Docker 组成管理 Docker 容器的JUnit规则 Docker 编写JUnit规则这是一个用于执行与 Docker 交互的JUnit测试的库组成托管容器。 它支持以下内容:在测试之前启动 docker-compose.yml 中...
  • Docker容器连接 端口映射并不是唯一把docker连接到另一个容器的方法。docker有一个连接系统允许将多个容器连接在一起,共享连接信息。docker连接会创建一个父子关系,其中父容器可以看到子容器的信息。 容器命名 ...
  • Docker容器中用户权限管理

    千次阅读 2019-09-30 10:39:12
    在Linux系统中有一部分知识非常重要,就是关于权限的...同样,在docker容器中主机上运行的所有容器共享同一个内核也可以理解为共享权限管理方式。 Docker容器的权限管理方式分为了三种情况:1.默认使用的root权限...
  • Docker容器集群管理主流方案

    千次阅读 2020-09-08 20:13:16
    目前,Docker容器集群管理主流方案有3种,分别是Swarm、Kubernetes、Mesos。 Swarm是Docker公司自研发的集群管理系统。 Kubernetes是Google开源的一个容器集群管理系统,用于自动化部署、扩展和管理容器应用。也...
  • 如果平常有在玩 Docker 的用户肯定知道透过 docker command 启动的容器预设是使用 root 用户来当作预设使用者及群组的。这样就会遇到一个问题,当主机环境你拥有 ro...
  • 美团点评Docker容器管理平台

    千次阅读 2017-01-23 19:19:00
    本文介绍美团点评的Docker容器集群管理平台(以下简称“容器平台”)。该平台始于2015年,是基于美团云的基础架构和组件而开发的Docker容器集群管理平台。目前该平台为美团点评的外卖、酒店、到店、猫眼等十几个事业...
  • 一个易于使用的远程访问面板来管理现有的Docker容器。 无需设置,只需添加一个 docker 容器即可。 专门用于使用 docker-compose 运行 Minecraft 服务器,但当然也可以用于其他容器。 特点和设计原则 启动和停止 ...
  • 在“漫步云端:CoreOS实践指南”系列的前几篇文章中,ThoughtWorks的软件工程师林帆主要介绍了CoreOS及其相关组件和使用。说到CoreOS,不得不提Docker。...本文将主要介绍在具体的场景下,如何在CoreOS中恰当的管理Doc
  • 项目1Docker容器简介任务1.1 了解Docker历史1.1.1 什么是 DockerDocker 最初是dotCloud 公司创始人 Solomon Hykes在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于2013 年 ...
  • docker容器日志管理(清理)

    万次阅读 2018-11-26 19:47:40
    在使用docker容器时候,其日志的管理是我们不得不考虑的事情。因为docker容器的日志文件会占据大量的磁盘空间。下面介绍的就是对docker容器日志的管理docker容器日志清理 docker容器的日志一般存放在/...
  • 修改docker容器端口映射的方法

    万次阅读 2019-06-27 19:00:02
    大家都知道docker run可以指定端口映射,但是容器一旦生成,就没有一个命令可以直接修改。通常间接的办法是,保存镜像,再创建一个新的容器,在创建时指定新的端口映射。 有没有办法不保存镜像而直接修改已有的这个...
  • docker容器详解(入门必看)(一)

    万次阅读 多人点赞 2018-07-22 16:08:39
    本篇文章不会涉及到复杂的名词,不会涉及到复杂的实现过程,这篇文章的一个基本目的是让你明白docker是干嘛的,它这样做与之前相比有什么进步,哪些地方有优化。希望能用最简单的语言让你明白,这种技术带来的利弊。...
  • docker容器中部署Web项目

    千次阅读 2017-04-06 19:43:06
    系统选用Centos或者Ubuntu都可以。 大致步骤: 安装docker 启动docker服务service start docker 或者systemctl start docker 拉取镜像,由于网络原因...根据镜像启动一个容器(可配置网络),然后在容器中安装Java环境,
  • docker容器技术基础

    千次阅读 2018-10-24 15:56:48
    什么是容器 容器是对应用程序及其依赖关系的封装。 容器的优点 容器与主机的操作系统共享资源,提高了效率,性能损耗低 容器具有可移植性 容器是轻量的,可同时运行数十个容器,模拟分布式系统 ...
  • 如何在docker容器中运行docker命令

    千次阅读 2020-03-25 12:23:10
    Docker作为目前炙手可热的容器运行环境,越来越多的应用到应用的部署当中。这种一次打包,随处运行的模式备受好评,也节约了很多环境配置的麻烦。很多软件运行时都提供了docker的镜像部署方式,我们可以看到常用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 123,940
精华内容 49,576
关键字:

docker容器管理