最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

Docker 部署TCP Server服务

XAMPP案例 admin 317浏览 0评论

#苟有恒,何必三更眠五更起;最无益,莫过一日曝十日寒。

友情提示:

阅读本文,能收获Docker容器内外交互的方法,docker容器的端口映射方法,以及端口状态监测的方法。

之前成功在docker容器内编译运行程序,部署可执行程序,今天尝试在容器内部署一个TCP Server服务,并让外部用户够访问到docker容器内的server服务。

要想实现Docker内容器的服务被外部用户访问,需要做端口映射。

 

端口映射:

将外网主机的IP地址的一个端口映射到内网中的一台机器上,提供相应的服务。

docker的端口映射并不是在docker中实现的,而是通过宿主机的iptables来实现的,通过控制网桥来做端口映射,类似于设置路由端口映射,出去的流量是做SNAT原地址转发,进来的浏览是做DNAT目标地址转发。

 

端口映射有两类情况:

随机映射

1.将容器的端口随机映射为宿主机的一个端口

特定映射

1.将容器端口映射为宿主机的特定端口

2.将容器端口映射为宿主机特定网卡的随机端口

3.将容器端口映射为宿主机特定网卡的特定端口

 

如果docker容器已经启用,需要新增容器对主机端口映射,主要是分为三种。

# 通过修改配置文件修改docker容器端口映射

# 将运行中的容器生成新的镜像,再新建容器

# 修改主机iptables端口映射

本次是删除原本的容器,再新建容器!

 

# 静态编译程序

gcc -static server.c -o server

# 创建Dockerfile

#以ubuntu为docker镜像
FROM ubuntu     
#在容器内部创建 TCP_Agent目录
RUN cd /home/ && mkdir -p racobit/jiafeng/TCP_Agent
#以TCP_Agent为工作目录
WORKDIR /home/racobit/jiafeng/TCP_Agent
#将本地静态编译的可执行文件server,拷贝到容器内TCP_Agent目录下 
COPY server /home/racobit/jiafeng/TCP_Agent
#运行 server可执行文件
ENTRYPOINT ["/home/racobit/jiafeng/TCP_Agent/server"]

 

# 创建docker镜像

sudo docker build -t server .
输出:
[sudo] password for racobit: 
Sending build context to Docker daemon    855kB
Step 1/5 : FROM ubuntu
latest: Pulling from library/ubuntu
a31c7b29f4ad: Pull complete 
Digest: sha256:b3e2e47d016c08b3396b5ebe06ab0b711c34e7f37b98c9d37abe794b71cea0a2
Status: Downloaded newer image for ubuntu:latest
 ---> c29284518f49
Step 2/5 : RUN cd /home/ && mkdir -p racobit/jiafeng/TCP_Agent
 ---> Running in 40585fb2eaaa
Removing intermediate container 40585fb2eaaa
 ---> cdef5a330dcc
Step 3/5 : WORKDIR /home/racobit/jiafeng/TCP_Agent
 ---> Running in 64602a4433ad
Removing intermediate container 64602a4433ad
 ---> fbd85b422e71
Step 4/5 : COPY server /home/racobit/jiafeng/TCP_Agent
 ---> 201092887760
Step 5/5 : ENTRYPOINT ["/home/racobit/jiafeng/TCP_Agent/server"]
 ---> Running in 88e2869dec09
Removing intermediate container 88e2869dec09
 ---> 67c9846837e0
Successfully built 67c9846837e0
Successfully tagged server:latest

 

# 查看docker镜像是否生成

 docker images
 输出:
REPOSITORY        TAG       IMAGE ID       CREATED         SIZE
server            latest    67c9846837e0   4 minutes ago   73.6MB
rancher/rancher   stable    d7329a56a8e4   5 days ago      1.06GB
ubuntu            latest    c29284518f49   6 days ago      72.8MB

# 以进入容器方式运行docker镜像

docker run -it server:latest /bin/bash
输出:
Accepting connections ...

发现已经打印了程序的等待链接语句。

 

# 查看运行的docker容器

docker ps
输出
CONTAINER ID   IMAGE                    COMMAND                  CREATED         STATUS         PORTS                            NAMES
8dce225733be   server:latest            "/home/racobit/jiafe…"   2 minutes ago   Up 2 minutes           condescending_shaw
dde862fbcfee   rancher/rancher:stable   "entrypoint.sh"          23 hours ago    Up 6 hours     
0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   thirsty_blackburn

server容器已经在运行,同是还有另一个rancher容器在运行。

我们可以看到,server容器PORTS端口是没有内容的,但rancher的PORTS端口是有映射的。

#将TCP_Server服务端口映射到本地宿主机器

# 停止/删除容器
docker stop 8dce225733be
docker rm 8dce225733be

# 创建docker容器,并将容器内部8000端口映射到宿主机的7203上
docker run -it -p 192.168.12.200:7203:8000 server /bin/bash
输出:
Accepting connections ...

# 检测端口是否被映射

# 在宿主机上使用netstate
netstate ap | grep 7203
# 在本地的另一台电脑使用telnet
telnet 192.168.12.200 7203
# 用docker ps 查看POETS
docker ps
# 在另一台电脑开启一个TCP client连接 TCP server

# 端口映射成功,但无法连接的可能

#检查防火墙是否关闭
sudo ufw status   #查看防火墙的状态, inactive(关闭状态) active(开启状态)
sudo ufw disable  #关闭防火墙
sudo ufw enanble  #开启防护墙
#检查是否端口映射错误,
docker run -p 宿主机ip:映射端口:docker要映射的端口 server
# 查看自己的服务是否有问题,在本地进行测试无误后,再部署到docker容器内部。

 

#End 2021/8/23 11:09

说到更要努力做到!

关注即可收获更多linux相关知识

转载请注明:XAMPP中文组官网 » Docker 部署TCP Server服务

您必须 登录 才能发表评论!