目录
compose是一个用于定义及允许多个Docker容器的工具,主要是通过一个YAML文件进行服务配置
使用Docker Compose不再需要使用Shell脚本来启动容器
Docker Compose非常适合组合使用多个容器进行开发的场景
YAML(语言)的设计目标,就是方便人类读写,它实质上是一种通用的数据串行化格式
它的基本语法规则如下:
#表示注释
链接:docker-compose
提取码:y7c6
- cd /usr/local/bin
- curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
- chmod +x /usr/local/bin/docker-compose
- docker-compose -v
-
-
-
- ==拖入docker-compose==
- chmod +x docker-compose
- mv docker-compose /usr/bin
| 字段 | 描述 |
| build | 重新构建服务 |
| ps | 列出容器 |
| up | 创建和启动容器 |
| exec | 在容器里面执行命令 |
| scale | 指定一个服务容器启动数量 |
| top | 显示容器进程 |
| logs | 查看容器输出 |
| down | 删除容器、网络、数据卷和镜像 |
| stop/start/restart | 停止/启动/重启服务 |
| 字段 | 描述 |
| build docker context | 指定Dockerfile文件名构建镜像上下文路径 |
| image | 指定镜像 |
| command | 执行命令,覆盖默认命令 |
| container name | 指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法scale |
| environment | 添加环境变量 |
| networks | 加入网络 |
| ports | 暴露容器端口,与-p相同,但不能低于60 |
| volumes | 挂载宿主机路径或命令卷 |
| restart | 重启策略,默认no,always,no-failure,unless-stoped |
| hostname | 容器主机名 |
- [root@localhost ~]# mkdir -p /opt/compose_nginx/nginx
- [root@localhost ~]# cd /opt/compose_nginx/nginx/
- [root@localhost nginx]# rz
- [root@localhost nginx]# ls
- nginx-1.12.2.tar.gz
- vim Dockerfile
- cat Dockerfile
- FROM centos:7
- RUN yum -y update
- RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make
- RUN useradd -M -s /sbin/nologin nginx
- ADD nginx-1.12.2.tar.gz /usr/local/src
- WORKDIR /usr/local/src/nginx-1.12.2
- RUN ./configure \
- --prefix=/usr/local/nginx \
- --user=nginx \
- --group=nginx \
- --with-http_stub_status_module
- RUN make -j 4 && make install
- RUN ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
- #ENV PATH /usr/local/nginx/sbin/:PATH
- EXPOSE 80
- EXPOSE 443
- RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
- CMD ["/usr/local/nginx/sbin/nginx"]
- [root@localhost ~]# mkdir -p /opt/compose_nginx/nginx
- [root@localhost nginx]# cd ..
- [root@localhost compose_nginx]# vim docker-compose.yml
- [root@localhost compose_nginx]# cat docker-compose.yml
- version: '3'
- services:
- nginx:
- hostname: nginx
- build:
- context: ./nginx
- dockerfile: Dockerfile
- ports:
- - 1216:80
- - 1217:443
- networks:
- - lic
- volumes:
- - ./wwwroot:/usr/local/nginx/html
- networks:
- lic:
- version: '3' #compose编排版本为3
- services: #服务:
- nginx: #服务名称
- hostname: nginx #容器主机名
- build: #创建容器过程:
- context: ./nginx #所需素材都在该目录(仓库)下
- dockerfile: Dockerfile #指定Dockerfile文件
- ports: #提供端口:
- - 1216:80 #对外提供(暴露)的端口
- - 1217:443
- networks: #指定网络
- - lic #网络名称(群集名称需一致)
- volumes: #数据卷
- - ./wwwroot:/usr/local/nginx/html #将宿主机该仓库内文件与nginx首页文件相关联(容器)
- networks: #对外公开需要声明networks群集名称
- lic:
- [root@localhost nginx]# docker-compose -f docker-compose.yml up -d
- ...
- ...
- Successfully built f87b84e57bd9
- Successfully tagged compose_nginx_nginx:latest
- [root@localhost compose_nginx]# ls
- docker-compose.yml nginx wwwroot
-
- echo "hello world" > index.html
- curl 192.168.223.30:1216

- [root@localhost compose_nginx]# yum -y install tree
- [root@localhost compose_nginx]# tree ./
- ./
- ├── docker-compose.yml
- ├── nginx
- │ ├── Dockerfile
- │ └── nginx-1.12.2.tar.gz
- └── wwwroot
- └── index.html
-
- 2 directories, 4 files

- cd /opt
- mkdir compose-tomcat
- cd compose-tomcat
- mkdir tomcat
- cd tomcat
- ==拖入安装包apache-tomcat-9.0.16.tar.gz 、jdk-8u91-linux-x64.tar.gz==
-
- vim Dockerfile
- FROM centos:7
-
- ADD apache-tomcat-9.0.16.tar.gz /usr/local
- ADD jdk-8u91-linux-x64.tar.gz /usr/local
-
- WORKDIR /usr/local
-
- RUN mv apache-tomcat-9.0.16 tomcat
- RUN mv jdk1.8.0_91 java
-
- ENV JAVA_HOME /usr/local/java
- ENV CLASSPATH $JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
- ENV PATH $JAVA_HOME/bin:$PATH
-
- EXPOSE 8080
- CMD ["/usr/local/tomcat/bin/catalina.sh","run"]
-
- ====>:wq
-
- cd ..
- vim tomcat-compose.yml
-
- version: '3'
- services:
- tomcat:
- hostname: tomcat
- build :
- context: ./tomcat
- dockerfile: Dockerfile
- ports:
- - 7788:8080
- networks:
- - cluster
- networks:
- cluster:
-
- ====>:wq
-
- docker-compose -f tomcat-compose.yml up -d
-
- ==真机访问http://IP:7788==

Dockerfile 文件详情见上期博客
- [root@localhost ~]#mkdir -p /opt/compose_lnmp/nginx/
- [root@localhost ~]#mkdir -p /opt/compose_lnmp/mysql/
- [root@localhost ~]#mkdir -p /opt/compose_lnmp/php/
- [root@localhost ~]#ls /opt/compose_lnmp/nginx/
- Dockerfile nginx-1.12.0.tar.gz nginx.conf wordpress-4.9.4-zh_CN.tar.gz
- [root@localhost ~]#ls /opt/compose_lnmp/mysql/
- Dockerfile my.cnf mysql-boost-5.7.20.tar.gz
- [root@localhost ~]#ls /opt/compose_lnmp/php/
- Dockerfile php-7.1.10.tar.bz2 php-fpm.conf php.ini www.conf
- [root@localhost ~]#cat docker-compose.yml
- version: '2'
- services:
- nginx:
- hostname: nginx
- build:
- context: /opt/compose_lnmp/nginx/
- dockerfile: Dockerfile
- ports:
- - 1111:80
- - 2222:443
- container_name: nginx_server
- networks:
- lnmp:
- ipv4_address: 172.111.0.10
-
- mysql:
- hostname: mysql
- build:
- context: /opt/compose_lnmp/mysql/
- dockerfile: Dockerfile
- ports:
- - 3306:3306
- container_name: mysql_server
- networks:
- lnmp:
- ipv4_address: 172.111.0.20
-
- php:
- hostname: php
- build:
- context: /opt/compose_lnmp/php/
- dockerfile: Dockerfile
- ports:
- - 9000:9000
- container_name: php_server
- networks:
- lnmp:
- ipv4_address: 172.111.0.30
-
- networks:
- lnmp:
- driver: bridge
- ipam:
- config:
- - subnet: 172.111.0.0/16
- [root@localhost /opt/compose_lnmp]#docker-compose -f docker-compose.yml up -d
- ......
- [root@localhost /opt/compose_lnmp]#docker images
- REPOSITORY TAG IMAGE ID CREATED SIZE
- compose_lnmp_php latest 86b0447ebabd About a minute ago 1.22GB
- compose_lnmp_mysql latest 59579ca01443 5 minutes ago 9.98GB
- compose_lnmp_nginx latest 82d760d5d811 17 minutes ago 528MB
- centos 7 eeb6ee3f44bd 2 months ago 204MB
- [root@localhost /opt/compose_lnmp]#docker ps -a
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 53c87813597f compose_lnmp_php "/bin/sh -c '/usr/lo…" About a minute ago Up About a minute 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp php_server
- 2d671252967b compose_lnmp_nginx "/usr/local/nginx/sb…" About a minute ago Up About a minute 0.0.0.0:1111->80/tcp, :::1111->80/tcp, 0.0.0.0:2222->443/tcp, :::2222->443/tcp nginx_server
- 9d5428cfdf54 compose_lnmp_mysql "/usr/sbin/init" About a minute ago Up About a minute 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp mysql_server
- [root@localhost /opt/compose_lnmp]#docker exec -it mysql_server bash
- [root@mysql bin]# mysql -u root -p
- Enter password:
- #初始密码为空
- mysql> create database wordpress;
- Query OK, 1 row affected (0.00 sec)
-
- mysql> grant all privileges on wordpress.* to 'wordpress'@'%' identified by '123456';
- Query OK, 0 rows affected, 1 warning (0.00 sec)
-
- mysql> grant all privileges on *.* to 'root'@'%' identified by '123456';
- Query OK, 0 rows affected, 1 warning (0.00 sec)
-
- mysql> flush privileges;
- Query OK, 0 rows affected (0.00 sec)
访问 http://192.168.126.12:1111/wordpress/index.php