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

 

原文地址:https://www.cnblogs.com/lxgbky/p/12985911.html