• docker 网络原理+用ssh终端和filezilla ftp工具连接docker容器


     docker指令参考:https://www.runoob.com/docker/docker-command-manual.html

    一、docker网络

    docker有bridge, host,none三种网络模式

       #查看

       docker network ls

    # 查看那些container用了bridge桥接模式(默认使用bridge模式。)
    docker network inspect bridge

    # docker container run -d --ne
    docker run可以指定端口映射,但是容器一旦生成,就没有一个命令可以直接修改。
    通常间接的办法是,保存镜像,再创建一个新的容器,在创建时指定新的端口映射。

    如下:不加参数,--network bridge,默认也是bridge模式

      宿主机的808端口,映射容器的80端口

    lxg@lxg-opt:/bin$ docker container run -d --network bridge --name my-nginx-bridge -p 808:80 nginx:alpine
    8e4e4d2499c34f13b49412f8e82cbeb5c535ada7c3aa2742fae9682862a464ca
    lxg@lxg-opt:/bin$ docker ps
    WARNING: Error loading config file: /home/lxg/.docker/config.json: stat /home/lxg/.docker/config.json: permission denied
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                 NAMES
    8e4e4d2499c3        nginx:alpine        "nginx -g 'daemon of…"   6 seconds ago       Up 3 seconds        0.0.0.0:808->80/tcp   my-nginx-bridge
    e7b5b96a7149        ubuntu              "/bin/bash"              42 hours ago        Up 29 minutes                             hopeful_davinci
    lxg@lxg-opt:/bin$ 

    #查看bridge

     docker network inspect bridge

    刚才创建的container被被赋予了ip, 具体ip其实是无关紧要的,通过接口,对外服务映射。

     #端口映射是容器生成(run)时候确定的,stop后再次start,port映射关系不变。

    要查询端口映射关系

    lxg@lxg-opt:/etc/apt$ docker port 8e4e4d2499c3 
    80/tcp -> 0.0.0.0:808
    lxg@lxg-opt:/etc/apt$ 

    在启动容器时,如果不配置宿主机器与容器的端口映射,外部程序是无法访问容器的,因为没有端口

    四 支持的格式有三种
    ip:hostPort:containerPort:映射指定地址的指定端口到容器的指定端口(不常用)
    如:127.0.0.1:3306:3306,映射本机的3306端口到容器的3306端口。
    ip::containerPort:映射指定地址的任意端口到容器的指定端口。(不常用)
    如:127.0.0.1::3306,映射本机的3306端口到容器的3306端口。
    hostPort:containerPort:映射本机的指定端口到容器的指定端口。(常用)
    如:3306:3306,映射本机的3306端口到容器的3306端口。

    #宿主机安装docker后,会自动产生桥接ip,  docker0

    lxg@lxg-opt:/bin$ ifconfig
    docker0   Link encap:以太网  硬件地址 02:42:99:f8:7d:94  
              inet 地址:172.17.0.1  广播:172.17.255.255  掩码:255.255.0.0
              inet6 地址: fe80::42:99ff:fef8:7d94/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  跃点数:1
              接收数据包:5417 错误:0 丢弃:0 过载:0 帧数:0
              发送数据包:10340 错误:0 丢弃:0 过载:0 载波:0
              碰撞:0 发送队列长度:0 
              接收字节:391664 (391.6 KB)  发送字节:15089435 (15.0 MB)

    示意图:

    
    
    lxg@lxg-opt:~/docker images

    REPOSITORY TAG IMAGE ID CREATED SIZE
    pyt_ora             v1                  7408cf026370        17 hours ago        623MB
    my_alpine_py        latest              a21502aa20ce        7 days ago          56.8MB
    lxg@lxg-opt:~/dockertest/py_oracle$ docker run -it -p 8888:80 pyt_ora:v1
    root@56957bf9e068:/# 

    容器的80端口映射到host机的8888端口

    二、向容器安装ssh服务,用putty shell终端和filezilla工具连接容器

    参考:https://blog.csdn.net/ypbsyy/article/details/80529101

    linux整体分为2个系列,找基础镜像时候要注意用的是什么系列。我用的debian系列

      (1)debian系列  ( apt管理软件包),如ubuntu

      (2)红帽系列 (yum  管理软件包),如centos,红旗linux

    1.运行、进入容器container,安装ssh服务

    root@8cdd3a88548c:/opt/data/oracle-instantclient# apt install openssh-server

    配置

    root@8cdd3a88548c:/opt/data/oracle-instantclient# vim /etc/ssh/sshd_config 
    Port 22 前面的注释去掉(开启22号端口)
    PermitRootLogin yes UsePAM no

    启动ssh服务

    root@8cdd3a88548c:/# /usr/sbin/sshd -D &
    [2] 120   (返回的是进程号)
    或者:root@8cdd3a88548c:/#service ssh start

    修改root密码
    root@8cdd3a88548c:/ passwd
    123456xxxx

    保存成新的镜像文件,删除旧的镜像

    docker commit container_id  new_image_name:tag_version

    保存新镜像
    lxg@lxg-opt:~/dockertest/py_oracle$ docker commit 56957bf9e068 pyth_ora:v2

    运行新镜像

    lxg@lxg-opt:~/$ docker run -it --name pyth_oracle -p 8888:22 pyth_ora:v2

    容器名称:pyth_oracle, 宿主机端口8888映射容器的22端口。

    lxg@lxg-opt:~/dockertest/py_oracle/oracle-instantclient$ docker psCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                          NAMES
    8cdd3a88548c        pyth_ora:v2         "/bin/bash"         About an hour ago   Up About an hour    80/tcp, 0.0.0.0:8888->22/tcp   pyth_oracle

    从其他机器,用putty和filezilla登入容器

    (1)直接ssh

    lxg@lxg-opt:~/dockertest/py_oracle/oracle-instantclient$ ssh -p 8888 root@localhost
    The authenticity of host '[localhost]:8888 ([::1]:8888)' can't be established.
    ECDSA key fingerprint is SHA256:rfHRmew75FymQIIxYUYspwkjgVkqQQycI9fXSE2dwXs.
    Are you sure you want to continue connecting (yes/no)?

    (2)远程putty

     

     

      

    (3)远程filezilla

     

  • 相关阅读:
    #ifdef的用法
    修改WordPress中上传附件2M大小限制的方法/php+iis上传附件默认大小修改方法
    没有找到libufun.lib,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题。
    JAVA安卓和C# 3DES加密解密的兼容性问题
    使用 Repeater 控件,每隔N条数据输出另外的格式
    Forms表单登陆,动态获取web.config里面的cookies配置
    SQL Server中索引使用及维护
    动态绑定easyui datagrid列名
    Spring Hibernate多数据源配置
    SSH异常处理
  • 原文地址:https://www.cnblogs.com/lxgbky/p/12985911.html
Copyright © 2020-2023  润新知