Docker Image 的发布和 Container 端口映射

本文介绍了Docker Image的两种发布方法,包括保存为tar包和推送到Docker Hub,并详细讲解了Container端口映射的实战操作,通过-p参数将容器的80端口映射到物理机,实现服务对外访问。最后,通过查看物理机端口状态和浏览器测试,验证了端口映射的正确性。
在按照本文档的步骤操作前,需要安装好 Docker

Docker Image 的发布

方法1:保存 Image 到 tar 包

语法:docker save -o 导出的镜像名.tar 本地镜像名:镜像标签

[root@Docker docker-build]# docker save -o centos-httpd-docker-image.tar centos:httpd
[root@Docker docker-build]# ll -h
total 275M
-rw-r--r--. 1 root root  154 May 17 23:19 Dockerfile
-rw-------. 1 root root 275M May 17 23:37 centos-httpd-docker-image.tar
-rw-r--r--. 1 root root   37 May 17 23:27 index.html
-rwxr-xr-x. 1 root root   29 May 17 23:25 start.sh

使用导入本地镜像

[root@Docker docker-build]# docker rmi -f centos:httpd #删除镜像,这里写自己镜像的 ID 或名称
[root@Docker docker-build]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              apache              b8822ec8a7bb        27 minutes ago      280MB
centos              latest              470671670cac        4 months ago        237MB
[root@Docker docker-build]# docker load -i centos-httpd-docker-image.tar
Loaded image: centos:httpd
[root@Docker docker-build]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              httpd               85b4a3657ced        8 minutes ago       280MB
centos              apache              b8822ec8a7bb        29 minutes ago      280MB
centos              latest              470671670cac        4 months ago        237MB

方法 2:Push Image To Docker Hub 发布到外网

1、Signup on docker hub & create repo 注册一个帐号
https://hub.docker.com/
2、Login to docker hub
# docker login -u userabc -p abc123 -e jaking@gmail.com
3、Push image to docker hub #上传镜像
# docker push centos:httpd
4、Pull image from docker hub #下载镜像
# docker pull userabc/centos:httpd # 用户名/镜像名

Container 容器端口映射

实战:Container 端口映射

启动 container

[root@Docker ~]# docker run -d -p 80:80 centos:httpd /bin/bash -c /usr/local/bin/start.sh
cf183879c15bd06523ecb6b5e19aec561d679fa5f3bd1842cb2d2994f0d79b04

注: -p 物理机的 80 端口:容器实例的 80 端口 ,把容器中的 80 端口映射到物理机上的 80 端口

另一种启动方式

[root@Docker ~]# cd /docker-build
[root@Docker docker-build]# docker run -d -p 80:80 centos:httpd /bin/bash -c start.sh

在物理机上查看容易状态

[root@Docker ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
cf183879c15b        centos:httpd        "/bin/bash -c /usr/l…"   24 seconds ago      Up 23 seconds       0.0.0.0:80->80/tcp   happy_mahavira

查看物理机上开启的 80 代理端口

[root@Docker ~]# netstat -pantu | grep 80
tcp6       0      0 :::80                   :::*                    LISTEN      10870/docker-proxy  
udp6       0      0 fe80::c43:91ff:fe1a:123 :::*                                7829/ntpd           
udp6       0      0 fe80::42:deff:fe9c::123 :::*                                7829/ntpd           
udp6       0      0 fe80::250:56ff:fe35:123 :::*                                7829/ntpd      

测试

在浏览器输入 http://192.168.10.7
Docker Image 的发布和 Container 端口映射Docker Image 的发布和 Container 端口映射

总结

以上就是 Docker Image 的发布和 Container 端口映射的操作过程,希望能帮助到大家。

### 动态为运行中的Docker容器添加端口映射Docker 中,默认情况下,`docker run` 命令用于创建并启动一个新的容器,并允许通过 `-p` 参数指定端口映射关系。然而,在某些场景下,可能需要对已经运行的容器动态添加新的端口映射。 #### 方法概述 尽管 `docker run` 是最常见的端口映射方式[^3],但对于已经在运行的容器,可以借助 `docker port` `docker update` 的组合来间接实现动态端口映射的效果。不过需要注意的是,Docker 并未提供直接修改已运行容器端口映射的功能,因此通常采用以下替代方案: --- #### 方法一:重启容器以应用新的端口映射 如果容器支持重新启动而不会影响服务状态,则可以通过以下步骤完成端口映射更新: 1. **停止正在运行的容器** 使用以下命令停止目标容器: ```bash docker stop <container_id> ``` 2. **删除旧容器实例** 删除当前容器以便重建它(注意保存数据卷以防丢失重要数据): ```bash docker rm <container_id> ``` 3. **基于原镜像重新创建容器并附加新端口映射** 创建带有额外端口映射的新容器: ```bash docker run -d --name=<new_container_name> \ -p <existing_host_port>:<existing_container_port> \ -p <new_host_port>:<new_container_port> \ <original_image_name> ``` 4. **验证端口映射是否生效** 运行以下命令确认新增加的端口已被正确绑定到宿主机上: ```bash docker ps | grep <new_container_name> ``` 此方法适用于大多数情况下的生产环境调整需求。 --- #### 方法二:利用网络模式共享宿主机端口 另一种解决办法是切换至 `--network="host"` 模式运行容器。在这种模式下,容器会直接继承宿主机上的所有开放端口,无需显式声明任何特定范围内的映射规则。但是要注意该选项仅限 Linux 系统可用,并且可能会带来潜在的安全隐患由于缺乏隔离机制所致[^2]。 执行如下指令即可启用 Host Networking Mode : ```bash docker run -it --net=host alpine ash ``` 对于已有处于其他默认桥接网卡 (bridge network) 下工作的实例来说 , 可尝试将其迁移到自定义 bridge 或者 macvlan 类型子网里去 ,从而获得更灵活可控权限分配策略的同时保留原有功能特性不变 。 --- #### 注意事项 无论采取哪种途径都需要权衡利弊得失 。 如果频繁变更端口设置的话建议考虑自动化工具如 Kubernetes 来简化流程提高效率 同时也要记得做好充分测试工作确保改动无误后再推广上线正式环境中使用 [^4]. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值