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 相关配置是否被映射到容器内
容器间网络通信
实验架构图例
实验步骤
[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