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