Docker compose choreography

08351jos 2020-11-11 14:12:53
docker compose choreography


Docker-compose layout

 Docker-compose  layout 
#------------------------------ One : Docker Network communication 
#Docker There are four kinds of single host network communication 
 install Docker when , It will automatically create three networks ,bridge( Create a container and connect to this network by default )、none.host
1.host: The container will not create its own network card , Configure your own IP etc. , It USES the host IP And port .
2.Container: The created container will not create its own network card , Configure your own IP, Instead, it is Shared with a specified container IP、 Port range .
3.None: This mode turns off the network function of the container .
 These are all hands-free , What really needs to be configured is a custom network .
4.Bridge: This pattern is assigned to each container 、 Set up IP etc. , And connect the container to a dockerO Virtual Bridge , adopt docker Network bridge and lptables nat Table configuration and host communication .
#Docker Cross host container communication 
1) Tunnel based overlay The Internet **: According to the type of Tunnel , Different companies or organizations have different implementations .\
docker Native overlay The Internet is based on vxlan The tunnel realizes .ovn You have to go through geneve perhaps stt Tunnel to achieve \
flannel The latest version also starts to default based on vxlan Realization overlay The Internet .
2) Based on package encapsulation overlay The Internet **: be based on UDP Package, etc , stay docker Cross host network on cluster .\
 Typical implementations are **Weave、Flannel** Early versions .
3) Based on three-tier implementation SDN The Internet **: Based on three layer protocol and routing , Directly implement cross host network on three layers , And through iptables Achieve network security isolation .\
 The typical scheme is  **Calico. Three layers of routing are not supported at the same time ,Calico It also provides a IPIP Encapsulated cross host network implementation 
# Custom network fixed ip
1. First create a bridge 
docker network create --subnet=172.10.0.0/24 li-network
2. And then based on the bridge allocation container fixed ip
docker run -itd --name test --net li-network --ip 172.10.0.10 centos:7 /bin/bash
# Bridge directly to the meeting docker0 Assigning a fixed address will report an error 
docker run -itd --name test --net li-network --ip 172.17.0.10 centos:7 /bin/bash
" Default bridge 172.17.0.10"
#------------------------------- Two : Docker-compose layout 
YAML Is a markup language very intuitive data serialization format , Very suitable for expressing or editing data structures 、 Various configuration files 、 Outline of documents, etc , for example : Many email header formats and YAML Very close to 
#Docker Compose Configure common fields 
|  Field  |  describe  |
| ------------------------ | ------------------------------------------------------------ |
| build dockerfile context | Appoint Dockerfile Filename build image context path |
| image | Specify the image |
| command | Carry out orders , Override default command |
| container name | Specify the container name , Because the container name is unique , If specified Custom name , You can't scale |
| deploy | Specify deployment and run service related configuration , Only in swarm The pattern applies to |
| environment | Add environment variables |
| networks | Join the network |
| ports | Exposed container port , And -p identical , But the port cannot be lower than 60 |
| volumes | Mount the host path or command volume |
| restart | Restart strategy , Default no,always,no-failure,unless-stoped |
| hostname | Container host name |
#Docker Compose Common commands
–verbose: Output more debugging information
–version: Print the version and exit
-f、–file FILE: Use specific compose Last shift file , The default is docker-compose.yml
-p、–project-name NAME: Specify project name , The default is the directory name

|  Field  |  explain  |
| ------------------ | ---------------------------- |
| build | Rebuild Services |
| ps | List containers |
| up | Create and start the container |
| exec | Execute the command in the container |
| scale | Specify the number of service container starts |
| top | Show container process |
| logs | View container output |
| down | Delete container 、 The Internet 、 Data volumes and mirrors |
| stop/start/restart | stop it / start-up / Restart the service |

 Document format and preparation Notes 
- 1、 Tabs are not supported tab Key indent , You need to indent with spaces , Use indentation to indicate hierarchy 
- 2、 Usually indent at the beginning 2 A space , The number of indented spaces doesn't matter , Just align the elements at the same level to the left 
- 3、 Indent a space after the character , Colon 、 comma 、 cross bar (-)
- 4、 use `#` Note No 
- 5、 If it contains special characters, use single quotation marks 
- 6、 Boolean values must be enclosed in quotation marks 
- 7、compose Version number 、 The service identifier must be written in the top case 
- 8、 Attribute names and values are represented by `:`( Colons and spaces ) Separate 
- 9、 The hierarchy is represented by two spaces 
- 10、 Service properties use `-`( Blank space - Space ) Express 
#compose Three steps to use 
1、 Use Dockerfile Define the environment of the application 
2、 Use docker-compose.yml Define the services that make up the application , So they can run together in an isolated environment 
3、 Finally, execute docker-compose up Command to start and run the entire application 
version: '2' '//compose Version number '
services: '// Service identifier '
web: '// Sub service name '
image: dockercloud/hello-world '// Services depend on mirror properties '
ports: '// Service port properties '
- 8080
networks: '// Network service properties '
- front-tier
- back-tier
redis:
image: redis
links: '// Connection settings between containers '
- web
networks:
- back-tier
lb:
image: dockercloud/haproxy
ports:
- 80:80
links:
- web
networks:
- front-tier
- back-tier
volumes: '// Mount a directory or an existing data volume container '
- /var/run/docker.sock:/var/run/docker.sock
networks:
front-tier:
driver: bridge
back-tier:
driver: bridge
############ Example 
1、 Deploy Docker-Compose Environmental Science 
yum install -y docker-ce
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose '// stay Linux We can go from GitHub Download its binary package to use , This command is to download Docker Compose The current stable version of '
chmod +x /usr/local/bin/docker-compose
docker-compose -v
# Or upload files 
cp -p docker-compose /usr/local/bin
#// It's a tool , Add directly to /usr/local/bin/ Use it as a tool 
2、 Use Dockerfile Define the environment of the application 
mkdir -r /root/compose_nginx/nginx
cd /root/compose_nginx/nginx
cat > Dockerfile<<EOF
FROM centos:7
MAINTAINER this is kgc-nginx image <li>
RUN yum -y update
RUN yum install pcre pcre-devel zlib-devel gcc gcc-c++ make -y
RUN useradd -s /sbin/nologin nginx -M
ADD nginx-1.12.0.tar.gz /usr/local/src
WORKDIR /usr/local/src/nginx-1.12.0
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module && make && make install
RUN ln -s /usr/local/nginx-1.12.0/sbin/ /usr/local/bin/
EXPOSE 80
EXPOSE 443
RUN echo "daemon off;">>/usr/local/nginx/conf/nginx.conf
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]
EOF
cat > run.sh<<EOF
#!/bin/bash
/usr/local/nginx/sbin/nginx
EOF
ls
#Dockerfile nginx-1.12.0.tar.gz run.sh
3、 Use docker-compose.yml Define the services that make up the application 
cat > docker-compose.yml<<EOF
version: '3'
services: " service "
nginx: "nginx service "
hostname: nginx
build: " create mirror "
context: ./nginx
dockerfile: Dockerfile
ports: " Port mapping "
- 1216:80
- 1217:443
networks: " The Internet "
- li
volumes: " Shared host Directory "
- ./wwwroot:/usr/local/nginx/html
networks:
li:
EOF
tree
.
├── docker-compose.yml
└── nginx
├── Dockerfile
├── nginx-1.12.0.tar.gz
└── run.sh
4、 perform docker-compose up Command to start and run the entire application 
docker-compose -f docker-compose.yml up -d " Create containers with orchestration files , And start the "
tree
.
├── docker-compose.yml
├── nginx
   ├── Dockerfile
   ├── nginx-1.12.0.tar.gz
   └── run.sh
└── wwwroot
" Automatically created wwwroot"
[root@docker02 wwwroot]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82ec65e396ff compose_nginx_nginx "/run.sh" 13 minutes ago Up 13 minutes 0.0.0.0:1216->80/tcp, 0.0.0.0:1217->443/tcp compose_nginx_nginx_1
f94496351d49 centos:7 "/bin/bash" 50 minutes ago Up 50 minutes test
[root@docker02 wwwroot]# vim index.html
<h1>this is test web</h1>
[root@docker02 ~]# curl http://192.168.100.190:1216
<h1>this is test web</h1>
#-------------------------------------- 3、 ... and : Create multiple services Nginx and Tomcat
cat > docker-compose.yml<<EOF
version: '3'
services:
nginx:
hostname: nginx
build:
context: ./nginx
dockerfile: Dockerfile
ports:
- 1216:80
- 1217:443
networks:
- li
volumes:
- ./wwwroot:/usr/local/nginx/html
tomcat:
hostname: tomcat
build:
context: ./tomcat
dockerfile: Dockerfile
ports:
- 1200:8080
networks:
- li
volumes:
- ./tomcat/webapps:/usr/local/tomcat/webapps/ROOT
- ./tomcat/logs:/usr/local/tomcat/logs
networks:
li:
li:
EOF
networks:  Two services can write the same 
 Two services can be written in the same services Next 
[root@docker02 webapps]# cat index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>
</head>
<body>
<% out.println("Welcome Tomcat 01");%>
</body>
</html>
tomcat  Also support html Format 
<h1>this is tomcat web</h1>
[root@docker02 webapps]# ls
index.html index.jsp
[root@docker02 tomcat]# ls
apache-tomcat-9.0.16.tar.gz Dockerfile jdk-8u201-linux-x64.rpm logs webapps
[root@docker02 tomcat]# cat Dockerfile
FROM centos:7
MAINTAINER this is tomcat <li>
ADD jdk-8u201-linux-x64.rpm /usr/local
WORKDIR /usr/local
RUN rpm -ivh jdk-8u201-linux-x64.rpm
ENV JAVA_HOME /usr/java/jdk1.8.0_201-amd64
ENV CLASSPATH /lib/tools.jar:/lib/dt.jar
ENV PATH /bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
ADD apache-tomcat-9.0.16.tar.gz /usr/local
WORKDIR /usr/local
RUN mv apache-tomcat-9.0.16 /usr/local/tomcat
EXPOSE 8080
ENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh","run"]
[root@docker02 nginx]# ls
Dockerfile nginx-1.12.0.tar.gz run.sh
[root@docker02 nginx]# cat run.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx
[root@docker02 nginx]# cat Dockerfile
FROM centos:7
MAINTAINER this is kgc-nginx image <li>
RUN yum -y update
RUN yum install pcre pcre-devel zlib-devel gcc gcc-c++ make -y
RUN useradd -s /sbin/nologin nginx -M
ADD nginx-1.12.0.tar.gz /usr/local/src
WORKDIR /usr/local/src/nginx-1.12.0
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module && make && make install
RUN ln -s /usr/local/nginx-1.12.0/sbin/ /usr/local/bin/
EXPOSE 80
EXPOSE 443
RUN echo "daemon off;">>/usr/local/nginx/conf/nginx.conf
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]
[root@docker02 compose_nginx]# ls
docker-compose.yml nginx tomcat wwwroot
# Choreography container 
docker-compose -f docker-compose.yml up -d
版权声明
本文为[08351jos]所创,转载请带上原文链接,感谢

  1. 【计算机网络 12(1),尚学堂马士兵Java视频教程
  2. 【程序猿历程,史上最全的Java面试题集锦在这里
  3. 【程序猿历程(1),Javaweb视频教程百度云
  4. Notes on MySQL 45 lectures (1-7)
  5. [computer network 12 (1), Shang Xuetang Ma soldier java video tutorial
  6. The most complete collection of Java interview questions in history is here
  7. [process of program ape (1), JavaWeb video tutorial, baidu cloud
  8. Notes on MySQL 45 lectures (1-7)
  9. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  10. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  11. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  12. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  13. 【递归,Java传智播客笔记
  14. [recursion, Java intelligence podcast notes
  15. [adhere to painting for 386 days] the beginning of spring of 24 solar terms
  16. K8S系列第八篇(Service、EndPoints以及高可用kubeadm部署)
  17. K8s Series Part 8 (service, endpoints and high availability kubeadm deployment)
  18. 【重识 HTML (3),350道Java面试真题分享
  19. 【重识 HTML (2),Java并发编程必会的多线程你竟然还不会
  20. 【重识 HTML (1),二本Java小菜鸟4面字节跳动被秒成渣渣
  21. [re recognize HTML (3) and share 350 real Java interview questions
  22. [re recognize HTML (2). Multithreading is a must for Java Concurrent Programming. How dare you not
  23. [re recognize HTML (1), two Java rookies' 4-sided bytes beat and become slag in seconds
  24. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  25. RPC 1: how to develop RPC framework from scratch
  26. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  27. RPC 1: how to develop RPC framework from scratch
  28. 一次性捋清楚吧,对乱糟糟的,Spring事务扩展机制
  29. 一文彻底弄懂如何选择抽象类还是接口,连续四年百度Java岗必问面试题
  30. Redis常用命令
  31. 一双拖鞋引发的血案,狂神说Java系列笔记
  32. 一、mysql基础安装
  33. 一位程序员的独白:尽管我一生坎坷,Java框架面试基础
  34. Clear it all at once. For the messy, spring transaction extension mechanism
  35. A thorough understanding of how to choose abstract classes or interfaces, baidu Java post must ask interview questions for four consecutive years
  36. Redis common commands
  37. A pair of slippers triggered the murder, crazy God said java series notes
  38. 1、 MySQL basic installation
  39. Monologue of a programmer: despite my ups and downs in my life, Java framework is the foundation of interview
  40. 【大厂面试】三面三问Spring循环依赖,请一定要把这篇看完(建议收藏)
  41. 一线互联网企业中,springboot入门项目
  42. 一篇文带你入门SSM框架Spring开发,帮你快速拿Offer
  43. 【面试资料】Java全集、微服务、大数据、数据结构与算法、机器学习知识最全总结,283页pdf
  44. 【leetcode刷题】24.数组中重复的数字——Java版
  45. 【leetcode刷题】23.对称二叉树——Java版
  46. 【leetcode刷题】22.二叉树的中序遍历——Java版
  47. 【leetcode刷题】21.三数之和——Java版
  48. 【leetcode刷题】20.最长回文子串——Java版
  49. 【leetcode刷题】19.回文链表——Java版
  50. 【leetcode刷题】18.反转链表——Java版
  51. 【leetcode刷题】17.相交链表——Java&python版
  52. 【leetcode刷题】16.环形链表——Java版
  53. 【leetcode刷题】15.汉明距离——Java版
  54. 【leetcode刷题】14.找到所有数组中消失的数字——Java版
  55. 【leetcode刷题】13.比特位计数——Java版
  56. oracle控制用户权限命令
  57. 三年Java开发,继阿里,鲁班二期Java架构师
  58. Oracle必须要启动的服务
  59. 万字长文!深入剖析HashMap,Java基础笔试题大全带答案
  60. 一问Kafka就心慌?我却凭着这份,图灵学院vip课程百度云