编程知识 cdmana.com

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]所创,转载请带上原文链接,感谢

Scroll to Top