zoukankan      html  css  js  c++  java
  • 3、Docker 基础安装和基础使用 二

    Docker 网络

    启动了nginx容器,但却不知道从哪里进行访问nginx。

    启动nginx容器,并附加网络映射

    在启动nginx容器的时候,增加一个-P大写的P的参数

    表示随机映射一个端口

    [root@node ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    docker.io/centos    latest              5182e96772bf        2 weeks ago         200 MB
    docker.io/nginx     latest              c82521676580        4 weeks ago         109 MB
    [root@node ~]# docker run -P -d --name mynginx1 nginx
    b477b9acaae66b61adf60fe80e26e724b2894774b536925e5bfa0e40679edc5c
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   NAMES
    b477b9acaae6        nginx               "nginx -g 'daemon ..."   26 seconds ago      Up 25 seconds       0.0.0.0:32768->80/tcp   mynginx1
    

    从ps查看的容器来看,随机映射了一个32768端口到内网的80端口

    然后通过浏览器试一下:

    我虚拟机的IP是:10.0.0.101,所以访问的地址是:10.0.0.101:32768

    可以看到可以正常访问了;

    因为-P的参数,是随机映射一个端口,这样也不会使映射的端口重复,但也很麻烦

    手动指定映射的端口

    下面使用-p小写的P的参数,来指定映射的端口

    测试指定 91 端口来映射nginx容器的 80 端口

    [root@node ~]# docker run -d -p 91:80 --name mynginx2 nginx
    f5e8a227d18bff2ca0b253209cd3892991b1c29368e4087a4575e78a91bf3f25
    [root@node ~]# docker ps -l
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                NAMES
    f5e8a227d18b        nginx               "nginx -g 'daemon ..."   6 seconds ago       Up 5 seconds                0.0.0.0:91->80/tcp   mynginx2
    

    可以看到,映射正常,下面测试访问

    可以正常访问,映射没问题;

    映射端口相关参数使用解释:

    参数和使用 解释
    -P 随机映射一个端口
    -p hostPort:containerPort 指定一个端口
    -p ip:hostPort:containerPort 指定IP上的一个端口;表示机器有多个IP的时候
    -p ip::containerPort 随机一个端口
    -p hostPort:containerPort   -p hostPort:containerPort 可以一次性映射多个指定的端口,使用多个 -p 参数,以空格区分

    Docker 数据管理

    数据卷:

    • -v /data
    • -v src:dst

    数据卷容器

    • --volumes-from

    命令:docker run -d -it --name volume-test1 -h nginx -v /data centos

    -h 表示指定一个主机名
    -v /data 表示在启动的容器中,挂在一个/data磁盘

    [root@node ~]# docker run -d -it --name volume-test1 -h nginx -v /data centos
    9bdd7385e218275c662b6e98dfc28f674101ba2cd1c7d75f8514eba1b5553c63
    [root@node ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    9bdd7385e218        centos              "/bin/bash"         13 seconds ago      Up 12 seconds                           volume-test1
    [root@node ~]# docker ps -l
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    9bdd7385e218        centos              "/bin/bash"         19 seconds ago      Up 18 seconds                           volume-test1
    [root@node ~]# ./in.sh  volume-test1
    # 这里可以看到有data目录
    [root@nginx /]# ls -ld /data/
    drwxr-xr-x 2 root root 6 Aug 23 03:03 /data/
    

    -v 把让容器直接把数据卸载对应的物理磁盘下,那数据到底卸载什么地方吗?

    下面让来测试验证一下

    [root@node ~]# docker inspect volume-test1 | grep Mounts -A 10
            "Mounts": [
                {
                    "Type": "volume",
                    "Name": "8cce49ca0e2cb266737376697ee19010c1b0565766ee6f5ab293ac011af36b7e",
                    "Source": "/var/lib/docker/volumes/8cce49ca0e2cb266737376697ee19010c1b0565766ee6f5ab293ac011af36b7e/_data",
                    "Destination": "/data",
                    "Driver": "local",
                    "Mode": "",
                    "RW": true,
                    "Propagation": ""
                }
    # 上面的命令可以看到data映射的宿主机的目录是:
    # /var/lib/docker/volumes/8cce49ca0e2cb266737376697ee19010c1b0565766ee6f5ab293ac011af36b7e/_data
    # 下面进入这个目录下,创建一个test文件,然后在容器中查看是否一致
    

    在宿主机操作:

    [root@node ~]# cd /var/lib/docker/volumes/8cce49ca0e2cb266737376697ee19010c1b0565766ee6f5ab293ac011af36b7e/_data
    [root@node _data]# touch test
    [root@node _data]# ls -l
    total 0
    -rw-r--r-- 1 root root 0 Aug 23 11:12 test
    

    回到容器中查看:

    [root@nginx /]# ls /data/
    test
    

    正常,这样就自然懂了。

    上面的是随机映射容器上的目录到宿主机的一个很深程度的目录

    下面来进行映射指定目录到容器中

    使用/opt 来挂在,查看宿主机的/opt 下有什么文件

    [root@node ~]# ls /opt/
    scripts
    

    创建容器:

    [root@node ~]# docker run -it --name volume-test2 -h nginx -v /opt:/opt centos
    [root@nginx /]# ls /opt/
    scripts
    

    可以看到,正产挂载。

    注意:

    -v 指定挂载目录/opt:/opt 两个目录后面不能有/,否则会出错

    挂在一个只读目录

    就是在创建容器挂在目录的后增加:ro

    命令:docker run -it --name volume-test2 -h nginx -v /opt:/opt:ro centos

    这里就不测试了;

    数据卷容器使用

    特意创建一个容器,该容器只是存储数据
    然后在创建一个容器的时候指定

    注意:存储的容器,无所谓是停止的状态还是运行的状态,都可以被新的容器来进行引入挂在

    [root@node ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
    da780039c311        centos              "/bin/bash"         2 hours ago         Exited (0) 20 seconds ago                       volume-test2
    9bdd7385e218        centos              "/bin/bash"         3 hours ago         Up 3 hours                                      volume-test1
    [root@node ~]# docker run -d -it --name volume-test4 --volumes-from volume-test1 centos 
    5d1a237482dca43589973bdbd7e0456426cba0e7cfab4c5d92eed3549ff43d14
    [root@node ~]# ./in.sh volume-test4
    [root@5d1a237482dc /]# ls /data/
    test
    # 这里可以掩饰可以看到,/data 已经被挂在成功了
    
  • 相关阅读:
    Drawing points
    Drawing text
    Drag & drop a button widget
    Simple drag and drop
    QtGui.QComboBox
    QtGui.QSplitter
    QtGui.QLineEdit
    Java-java中的有符号,无符号操作以及DataInputStream
    Android Studio-设置override及getter/setter方法
    Android Studio-设置switch/case代码块自动补齐
  • 原文地址:https://www.cnblogs.com/winstom/p/9522499.html
Copyright © 2011-2022 走看看