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