2020年3月26日木曜日

Docker network rm --driver=null

删除不掉 driver=null的网络,
Error response from daemon: none is a pre-defined network and cannot be removed
好像也不算是异常,只能无视他。

Alter Oracle Table Add/Modify/Rename/Drop Columns

Oracle Table Columns 変更

  1. カラムの追加 / ALTER TABLE ADD column(s)
    表定義の最後にのみ追加可能。表の途中への挿入や列の順番の変更や入れ替えはできない。
    ALTER TABLE my_table ADD ( time_col TIMESTAMP(3) ) ;

  2. カラムの定義の変更 / ALTER TABLE MODIFY column(s)

    データが存在する場合、直接MODIFYは出来ない、DROPしてから、ADD
    ALTER TABLE IAMGE_INFO DROP COLUMN IMAGE_DATA 
    ALTER TABLE IMAGE_INFO ADD (IMAGE_DATA LONG RAW)

    NULL 制約の設定と解除
    ALTER TABLE table_name MODIFY ( char_col NULL )
    ALTER TABLE my_table MODIFY ( char_col  NOT NULL ) ;
    

    デフォルト値の変更と削除
    ALTER TABLE my_table MODIFY ( char_col  DEFAULT 'abc' ) ;

    カラムの長さ、桁数、スケール、精度の変更
    ALTER TABLE my_table MODIFY (
        char_col    VARCHAR2(50),
        number_col  NUMBER(14)
    );

  3. テーブル名、カラム名の変更 / ALTER TABLE RENAME [column]

    列名の変更
    ALTER TABLE my_table RENAME COLUMN time_col TO date_col ;

    列の削除 (DROP)
    ALTER TABLE my_table DROP (
        char_col , number_col
    )
    -- 以下はオプションなので必須ではない
    CASCADE CONSTRAINT INVALIDATE;
    CASCADE CONSTRAINT : 列に付随する制約(主キー、ユニークキー、チェックなど)を削除する。INVALIDATE : 依存関係にあるオブジェクトに対し再帰的に無効化マーク(INVALID) を付ける。CHECKPOINT : UNDO に蓄積されるログを抑制するため、指定行数毎に チェックポイント を発生させる。

  4. ALTER TABLE PRIMARY KEY

    主キー、プライマリキー制約の追加
    ALTER TABLE table_name ADD
        [ CONSTRAINT primary_key_name ]
        PRIMARY KEY (col_name, colname2 ..) ;

  5. ADD PRIMARY KEY と USING INDEX
    ALTER TABLE table_name ADD CONSTRAINT primary_key_name 
      PRIMARY KEY  (col_name, colname2 ..) 
        USING INDEX -- インデックス作成時の属性情報
        PCTFREE 10 INITRANS 2 
        STORAGE( INITIAL 64K )
        TABLESPACE USERS ;

  6. 主キー、プライマリキー制約の削除
    ALTER TABLE table_name DROP PRIMARY KEY;
     or
    ALTER TABLE table_name DROP CONSTRAINT primary_key_name ;

  7. プライマリキーの確認をするための SQL
    select 
      c.table_name, c.constraint_name, c.status cc_status,
      cc.position, cc.column_name, 
      ix.index_name, ix.uniqueness, ix.tablespace_name, ix.visibility, ix.status
    from user_indexes ix,
      user_constraints c, user_cons_columns cc
    where
      ix.table_name in ('MY_TABLE') and c.constraint_type = 'P'
      and ix.index_name = c.index_name and c.constraint_name = cc.constraint_name
    order by cc.constraint_name, cc.position;


Docker Network 運用

Docker支持3种网络形式:none,host, bridge(默认模式)。


docker network ls  #显示当前docker的默认网卡状况
ip address #宿主机的网卡状态
  • none模式
    容器和宿主机之间无法网络通信。
    使用场景:不明。如果无法和外部通信,容器就是个孤岛。
  • host模式
    容器共享宿主机的网卡,利于和外部网络通信。
    使用场景:作为本宿主机上的一个服务,供宿主机之外,或外部网络机器访问。
    注意事项:默认的端口可能被宿主机占用,需要分配其他端口。
    如:80端口已经被宿主机的IIS占用,Docker容器内的Tomcat就无法使用80。
  • bridge模式(Docker容器的默认启动模式)
    安装docker后,默认会产生一张docker0的网卡,默认ip:172.17.0.1/16。
    备注:/16代表16个1的子网掩码255.255.0.0。
    使用场景:虚拟内部网络,内部网络间可以相互通信,模拟分布式计算。

Docker容器的IP地址确认:

  1. docker run 启动一个容器(比如oracle)后,通过docker exec -it containerid bash进入容器后,通过ifconfig命令,查看容器的ip, 发现以下输出
    root@a837d8deb6fb:/# ifconfig
    eth0      Link encap:Ethernet  HWaddr 02:42:ac:11:00:02
              inet addr:172.17.0.2  Bcast:172.17.255.255  Mask:255.255.0.0
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:16 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0
              RX bytes:1312 (1.3 KB)  TX bytes:0 (0.0 B)


  2. 再启动一个mysql容器,然后同样docker exec -it containerid bash进入容器,
    执行ifconfig
    root@d5cfaf9bc203:/bin# ifconfig
    bash: ifconfig: command not found
    这个容器内没ifconfig, 只好换一种方式:hostname -i
    root@d5cfaf9bc203:/# hostname -i
    172.17.0.3

    重新通过docker network ls 查看网络状况。发现网络状况没有变化
    root@linux-dxjo:~> docker network ls
    NETWORK ID          NAME                DRIVER              SCOPE
    eced4efd22c4        bridge              bridge              local
    006540679f04        host                host                local
    bb6717ea195a        none                null                local
    root@linux-dxjo:~>

新建容器网络

  1. 新建bridge网络,名称为lq01.net:
    root@linux-dxjo:~> docker network create -d bridge lq01.net
    0317a8cd7bd67758d981470ed4d8d06dccf0e52df05ffd345a5c186a160a99a9

    #查看现在的网络状况.
    root@linux-dxjo:~> docker network ls
    NETWORK ID          NAME                DRIVER              SCOPE
    eced4efd22c4        bridge              bridge              local
    006540679f04        host                host                local
    0317a8cd7bd6        lq01.net          bridge              local
    bb6717ea195a        none                null                local

    查看网络详细
    root@linux-dxjo:~> docker network inspect lq01.net
    [
        {
            "Name": "lq01.net",
            "Id": "0317a8cd7bd67758d981470ed4d8d06dccf0e52df05ffd345a5c186a160a99a9",
            "Created": "2020-03-26T03:18:35.758811904-04:00",
            "Scope": "local",
            "Driver": "bridge",
            "EnableIPv6": false,
            "IPAM": {
                "Driver": "default",
                "Options": {},
                "Config": [
                    {
                        "Subnet": "172.18.0.0/16",
                        "Gateway": "172.18.0.1"
                    }
                ]
            },
            "Internal": false,
            "Attachable": false,
            "Ingress": false,
            "ConfigFrom": {
                "Network": ""
            },
            "ConfigOnly": false,
            "Containers": {},
            "Options": {},
            "Labels": {}
        }
    ]
    root@linux-dxjo:~>
  2. 在新网络内执行开启镜像。即在创建容器时显式将该容器连接到该网络。
    先查看所有镜像
    root@linux-dxjo:~> docker image ls
    REPOSITORY                       TAG        IMAGE ID      CREATED     SIZE
    postgres                         latest     cf879a45faaa  7 weeks ago 394MB
    mysql                            latest     791b6e40940c  7 weeks ago 465MB
    martinsthiago/oraclexe-11g-fig   latest     8253c6cad9fe  4 years ago 1.93GB

    在新的网络内开启postgres的镜像,必须设定明确的IP,不然启动不起来。


    docker run --name postgres1802 -e POSTGRES_PASSWORD=mysecretpassword -d postgres --network lq01.net  --ip 172.18.0.2
    97aa95cebfca6eb84d1be09dbed66e7db6037de044540af3b41f1174745be121
    root@linux-dxjo:~> docker ps -a
    CONTAINER ID        IMAGE                            COMMAND                  CREATED             STATUS              PORTS                                            NAMES
    97aa95cebfca        postgres                         "docker-entrypoint.s…"   8 seconds ago       Up 6 seconds        5432/tcp                                         postgres1802
    4e886ce92b11        postgres                         "docker-entrypoint.s…"   15 minutes ago      Up 15 minutes       5432/tcp                                         postgresdb2
    a837d8deb6fb        martinsthiago/oraclexe-11g-fig   "/startup.sh --name …"   3 weeks ago         Up About an hour    0.0.0.0:1521->1521/tcp, 0.0.0.0:8088->8080/tcp   distracted_payne
    d5cfaf9bc203        mysql                            "docker-entrypoint.s…"   6 weeks ago         Up About an hour    0.0.0.0:3306->3306/tcp, 33060/tcp                mysql-test
    root@linux-dxjo:~>
    root@linux-dxjo:~> docker run -itd --name nginx02 --network LBSnet --ip 172.20.1.11 nginx:latest 
    root@linux-dxjo:~> docker ps -a
    CONTAINER ID        IMAGE                            COMMAND                  CREATED             STATUS              PORTS                                            NAMES
    a2558eac3579        nginx:latest                     "nginx -g 'daemon of…"   5 seconds ago       Up 3 seconds        80/tcp                                           nginx02
    8c01025fcaf3        nginx:latest                     "nginx -g 'daemon of…"   4 minutes ago       Up 4 minutes        80/tcp                                           nginx01
    4 


  • root@linux-dxjo:~> docker run -itd --name nginx01 --network LBSnet --ip 172.20.1.10 nginx:latest  
    root@linux-dxjo:~> docker ps -a
    CONTAINER ID        IMAGE                            COMMAND                  CREATED             STATUS              PORTS                                            NAMES
    a2558eac3579        nginx:latest                     "nginx -g 'daemon of…"   5 seconds ago       Up 3 seconds        80/tcp                                           nginx02
    root@linux-dxjo:~> docker run -itd --name nginx02 --network LBSnet --ip 172.20.1.11 nginx:latest  
  • 可以将容器添加到多个网络。
    既存网络:lq01.net:172.18.0.1/8
    创建新的网络:
    docker network create -d bridge --subnet 172.20.1.0/24 --gateway 172.20.1.1 LBSnet
    然后将容器链接到指定的网络。
    docker network connect lq01.net nginx01

    容器仅能在网络内通信,不能跨网络进行通信。
    一个连接到两个网络的容器可与每个网络中的成员容器进行通信。
    当一个容器连接到多个网络时,外部连接通过第一个(按词典顺序)非内部网络提供。
  •  

    随笔:大字成语


    • 大方無隅:地方至极,则看不到它的拐角。平面无限大。古人相信天圆地方。
    • 大器晩成贵至极,则要长期的打磨。时间无限长。
    • 大音希声:声音至极,回声。无限循环。
    • 大象無形:象大致及,则無具体形状。立体无限大。

    OpenSUSE中的网络查看命令

    参考自:
    https://software.opensuse.org/package/net-tools-deprecated
    Deprecated Networking Utilities
    This package contains the deprecated network utilities arp, ifconfig, netstat and route, which have been replaced by tools from the iproute2 package: 
    * arp -> ip [-r] neigh 
    * ifconfig -> ip a 
    * netstat -> ss [-r] 
    * route -> ip r
    iproute2: 
  • size 170KB,
  • openSUSE Leap 15.1
  • ITIL4 Foundation Study Guide 2 : 4 Dimensions and 6 Factors

    4  Dimensions:  Dimension1: Organizations & People Dimension2: Information & Technology Dimension3: Partners & Suppliers D...