当前位置: 首页 > news >正文

docker镜像封装与发布微服务学习

docker镜像封装与发布微服务

    • 镜像封装
      • Dockerfile语法
      • 制作apache镜像
        • 验证镜像
      • 制作phpfpm镜像
        • 验证镜像
      • 制作nginx镜像
        • 编译软件包
        • 制作镜像
        • 验证镜像
    • 微服务
      • 对外发布服务
      • 容器共享卷
        • 共享网页目录
        • 修改配置文件
      • 容器间网络通信

镜像封装

Dockerfile语法

语法指令语法说明
FROM基础镜像
RUN制作镜像时执行的命令,可以有多个
ADD复制文件到镜像,自动解压
COPY复制文件到镜像,不解压
EXPOSE声明开放的端口
ENV设置容器启动后的环境变量
WORKDIR定义容器默认工作目录(等于cd)
CMD容器启动时执行的命令,仅可以有一条CMD

制作apache镜像

httpd.service 文件路径:/lib/systemd/system/httpd.service
拷贝测试网页文件 public/info.php 到 /root/ 目录下

[root@docker-0002 ~]# mkdir apache
[root@docker-0002 ~]# cp info.php apache/
[root@docker-0002 ~]# echo 'Welcome to The Apache.' >apache/index.html
[root@docker-0002 ~]# cd apache
[root@docker-0002 apache]# tar czf myweb.tar.gz index.html info.php
[root@docker-0002 apache]# vim Dockerfile
FROM mycentos:latest
RUN  yum install -y httpd php && yum clean all
ENV  LANG=C
ADD  myweb.tar.gz /var/www/html/
WORKDIR /var/www/html/
EXPOSE 80
CMD  ["/usr/sbin/httpd", "-DFOREGROUND"]
[root@docker-0002 apache]# docker build -t myapache:latest .
Successfully tagged myapache:latest
验证镜像
[root@docker-0002 apache]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED              SIZE
myapache     latest    da2fdea05a45   6 seconds ago        363MB
[root@docker-0002 apache]# docker rm -f $(docker ps -aq)
[root@docker-0002 apache]# docker run -itd --name myhttpd myapache:latest
[root@docker-0002 apache]# curl http://172.17.0.2/
Welcome to The Apache.
[root@docker-0002 apache]# docker rm -f myhttpd
myhttpd

制作phpfpm镜像

[root@docker-0002 ~]# mkdir phpfpm
[root@docker-0002 ~]# cd phpfpm
[root@docker-0002 phpfpm]# vim Dockerfile
FROM mycentos:latest
RUN  yum install -y php-fpm && yum clean all
EXPOSE 9000
CMD ["/usr/sbin/php-fpm", "--nodaemonize"]
[root@docker-0002 phpfpm]# docker build -t phpfpm:latest .
Successfully tagged phpfpm:latest
验证镜像
[root@docker-0002 phpfpm]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED              SIZE
phpfpm       latest    133187726285   30 minutes ago       352MB
[root@docker-0002 phpfpm]# docker run -itd --name myphp phpfpm:latest
6eeff6af4a6469c298944b2bdd2ba69f32ebcbc6cb683a0a05af4eefbf90e8c1
[root@docker-0002 phpfpm]# docker exec -it myphp ss -ltun
Netid State      Recv-Q Send-Q       Local Address:Port      Peer Address:Port
tcp   LISTEN     0      128              127.0.0.1:9000                 *:*
[root@docker-0002 phpfpm]# docker rm -f myphp
myphp

制作nginx镜像

编译软件包
[root@docker-0002 ~]# useradd nginx
[root@docker-0002 ~]# yum install -y gcc make pcre-devel openssl-devel
[root@docker-0002 ~]# tar zxf nginx-1.17.6.tar.gz
[root@docker-0002 ~]# cd nginx-1.17.6/
[root@docker-0002 nginx-1.17.6]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module
[root@docker-0002 nginx-1.17.6]# make && make install
[root@docker-0002 nginx-1.17.6]# echo 'Nginx is running !' >/usr/local/nginx/html/index.html
制作镜像
[root@docker-0002 ~]# mkdir nginx
[root@docker-0002 ~]# cd nginx
[root@docker-0002 nginx]# tar czf nginx.tar.gz -C /usr/local nginx
[root@docker-0002 nginx]# vim Dockerfile 
FROM mycentos:latest
RUN  yum install -y pcre openssl && useradd nginx && yum clean all
ADD  nginx.tar.gz /usr/local/
WORKDIR /usr/local/nginx/html
EXPOSE 80
CMD  ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]
[root@docker-0002 nginx]# docker build -t mynginx:latest .
Successfully tagged mynginx:latest
验证镜像
[root@docker-0002 nginx]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
mynginx      latest    f5cadb8aac31   10 minutes ago   323MB
[root@docker-0002 nginx]# docker run -itd --name mynginx mynginx:latest
e440b53a860a93cc2b82ad0367172c344c7207def94c4c438027c60859e94883
[root@docker-0002 nginx]# curl http://172.17.0.2/
Nginx is running !
[root@docker-0002 nginx]# docker rm -f mynginx
mynginx

微服务

对外发布服务

docker run -itd -p 宿主机端口:容器端口 镜像名称:标签

# 把 docker-0002 绑定 apache 服务
[root@docker-0002 ~]# docker run -itd --rm -p 80:80 myapache:latest
# 在 docker-0002 上访问验证
[root@docker-0002 ~]# curl http://192.168.1.32/
Welcome to The Apache.# 把 docker-0002 绑定 nginx 服务,删除 apache 的容器
[root@docker-0002 ~]# docker rm -f $(docker ps -aq)
[root@docker-0002 ~]# docker run -itd --rm -p 80:80 mynginx:latest
# 在 docker-0002 上访问验证
[root@docker-0002 ~]# curl http://192.168.1.32/
Nginx is running !

容器共享卷

docker run -itd -v 宿主机对象:容器内对象 镜像名称:标签

共享网页目录
[root@docker-0002 ~]# mkdir /var/webroot
[root@docker-0002 ~]# echo "hello world" >/var/webroot/index.html
[root@docker-0002 ~]# cp info.php /var/webroot/
[root@docker-0002 ~]# docker rm -f $(docker ps -aq)
[root@docker-0002 ~]# docker run -itd --rm --name mynginx \-v /var/webroot:/usr/local/nginx/html mynginx:latest 
[root@docker-0002 ~]# curl http://172.17.0.2
hello world
[root@docker-0002 ~]# docker run -itd --rm --name myhttpd \-v /var/webroot:/var/www/html myapache:latest
[root@docker-0002 ~]# curl http://172.17.0.3
hello world
修改配置文件
[root@docker-0002 ~]# mkdir /var/webconf
[root@docker-0002 ~]# docker cp mynginx:/usr/local/nginx/conf/nginx.conf /var/webconf/
[root@docker-0002 ~]# vim /var/webconf/nginx.conflocation ~ \.php$ {root           html;fastcgi_pass   127.0.0.1:9000;fastcgi_index  index.php;include        fastcgi.conf;}
[root@docker-0002 ~]# docker rm -f $(docker ps -aq)
[root@docker-0002 ~]# docker run -itd --name mynginx -p 80:80 \-v /var/webconf/nginx.conf:/usr/local/nginx/conf/nginx.conf \-v /var/webroot:/usr/local/nginx/html mynginx:latest

验证方式: 使用 exec 进入容器查看

[root@docker-0002 ~]# docker exec -it mynginx /bin/bash
[root@e440b53a860a html]# cat /usr/local/nginx/conf/nginx.conf
[root@e440b53a860a html]# # 查看 php 相关配置是否被映射到容器内

容器间网络通信

实验架构图例

docker-0002
容器1
容器2
共享存储卷
PHP
Nginx
共享网卡
用户

实验步骤

[root@docker-0002 ~]# docker run -itd --rm --name myphp --network=container:mynginx \-v /var/webroot:/usr/local/nginx/html phpfpm:latest
[root@docker-0002 ~]# docker exec -it mynginx ss -ltun
Netid  State      Recv-Q    Send-Q     Local Address:Port
tcp    LISTEN     0         128            127.0.0.1:9000
tcp    LISTEN     0         128                    *:80
[root@docker-0002 ~]# curl http://172.17.0.2/info.php
<pre>
Array
([REMOTE_ADDR] => 172.17.0.1[REQUEST_METHOD] => GET[HTTP_USER_AGENT] => curl/7.29.0[REQUEST_URI] => /info.php
)
php_host:       f705f89b45f9
1229
http://www.lryc.cn/news/573619.html

相关文章:

  • NotePad++ 怎么没有找到插件管理?
  • Python打卡DAY34
  • 【科研绘图系列】R语言绘制论文组合图形(multiple plots)
  • Redis快的原因
  • 【单调栈】-----【小A的柱状图】
  • 大零售生态下开源链动2+1模式、AI智能名片与S2B2C商城小程序的协同创新研究
  • 如何用AI开发完整的小程序<7>—让AI微调UI排版
  • Spring AI 项目实战(十):Spring Boot + AI + DeepSeek 构建智能合同分析技术实践(附完整源码)
  • opencv 之双目立体标定算法核心实现
  • C#控制Button单击事件指定时间间隔触发
  • 计算鱼眼相机的内参矩阵和畸变系数方法
  • 风险矩阵与灰色综合评价
  • AMAT P5000 CVDFDT CVDMAINT Precision 5000 Mark 操作 电气原理 PCB图 电路图等
  • git 如何忽略某个文件夹文件
  • NW896NW859美光固态闪存NW893NX764
  • 激活函数为何能增强神经网络的非线性表达能力?
  • 【node】Mac m1 安装nvm 和node
  • WEB3合约开发以太坊中货币单位科普
  • 【数据结构与算法】数据结构核心概念系统梳理
  • go excel解析库xuri/excelize中的SAX
  • 【人工智能基础】初识神经网络
  • 2.jupyter切换使用conda虚拟环境的最佳方法
  • Flink SQL Connector Kafka 核心参数全解析与实战指南
  • Windows防火墙指南大全:安全红线与科学替代方案
  • 通俗理解物联网中的APN
  • Vmware WorkStation 17.5 安装 Ubuntu 24.04-LTS Server 版本
  • 【机器学习】数学基础——张量(进阶篇)
  • 九联UNT403G/UNT413G-国科GK6323V100C-2+8G/4+16G-安卓9.0-优盘短接强刷固件包
  • 抖音小程序开发:ttml和传统html的区别
  • 深入解析C#数组协变与克隆机制