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

docker镜像封装与发布微服务

镜像封装

Dockerfile语法

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

制作apache镜像

httpd.service 文件路径:/lib/systemd/system/httpd.service

拷贝测试网页文件 public/info.php 到 /root/ 目录下

dockerfile 复制代码
[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
验证镜像
shell 复制代码
[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镜像

dockerfile 复制代码
[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
验证镜像
shell 复制代码
[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镜像

编译软件包
shell 复制代码
[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
制作镜像
dockerfile 复制代码
[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
验证镜像
shell 复制代码
[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 宿主机端口:容器端口 镜像名称:标签

shell 复制代码
# 把 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 宿主机对象:容器内对象 镜像名称:标签

共享网页目录
shell 复制代码
[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
修改配置文件
shell 复制代码
[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.conf
        location ~ \.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 进入容器查看

shell 复制代码
[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 共享网卡 用户

实验步骤

shell 复制代码
[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
相关推荐
.Eyes17 分钟前
OBCP第二章 OceanBase 存储引擎高级技术学习笔记
笔记·学习·oceanbase
redwingz1 小时前
kolla安装openstack
docker·openstack
真的想上岸啊1 小时前
学习STC51单片机43(芯片为STC89C52RCRC)智能小车9(语音识别小车)
单片机·嵌入式硬件·学习
蓝胖子不会敲代码2 小时前
跟着AI学习C# Day26
开发语言·学习·c#
卜及中2 小时前
【Python】数据处理工具:Pandas详细指南
开发语言·python·学习·pandas
Moonnnn.2 小时前
【51单片机】串口通信
笔记·嵌入式硬件·学习·51单片机
来两个炸鸡腿3 小时前
【Datawhale组队学习202506】YOLO-Master task03 IOU总结
python·学习·yolo
KIKU啊4 小时前
Docker+PyCharm+ssh部署深度学习docker环境
docker·pycharm·ssh
Quine_f5 小时前
模拟IC设计基础系列8-版图设计基础
学习·模拟ic设计