当前位置:   article > 正文

Docker之Docker-compose使用案例_docker-compose的小案例

docker-compose的小案例

Docker-Compose使用案例

1. Docker-Compose简介

Docker Compose是一个用来定义和运行复杂应用的Docker工具。一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose不再需要使用shell脚本来启动容器。

Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。

2. Docker-Compose使用命令

创建并启动容器

docker-compose up -d # 创建并启动容器
  • 1

查看当前compose进程

docker-compose ps # 查看当前compose进程
  • 1

启动容器

docker-compose start # 启动容器
  • 1

关闭容器

docker-compose stop  # 关闭容器
  • 1

关闭并移除容器

docker-compose down   # 关闭并移除容器
  • 1

3. Docker-Compose安装MySQL

3.1 目录结构
[root@long mysql-service]# tree
.
├── conf (存放配置文件)|
│   └── my.conf (MySQL配置)
├── db (数据库文件)
│   ├── 
|
├── docker-compose.yml (docker-compose文件)
└── init
    └── init.sql  (mysql初始化文件sql语句)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
3.2 my.cnf 文件
[root@long conf]# cat my.cnf 
[mysqld]
user=mysql
default-storage-engine=INNODB
character-set-server=utf8
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
3.3 init.sql文件
[root@long init]# cat init.sql 
use mysql;
# 为root用户授权
grant all privileges on *.* to 'root'@'%' identified by '123456';
# 刷新权限
flush privileges;
# 创建数据库
create database mytest;
use mytest;
# 创建表
create table user (
    id int auto_increment primary key,
    username varchar(64) unique not null,
    email varchar(120) unique not null,
    password_hash varchar(128) not null,
    avatar varchar(128) not null;
)
# 插入表数据
insert into user values(1, "zhangsan", "zhangsan123@qq.com", "password", "avaterpath"); 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
3.4 Docker-Compose.yaml文件
[root@long mysql-service]# cat docker-compose.yml 
version: '3'  # 使用Docker-Compose版本
services:
    mysql: 
    	image: mysql:5.7  # 使用mysql:5.7镜像
    	restart: always
    	container_name: mysql_db  # mysql最后的容器名
        environment:
            MYSQL_ROOT_PASSWORD: 123456  # 设置root用户的密码
            MYSQL_USER: test             # 设置另一个用户 test
            MYSQL_PASS: test             # 设置test用户的密码
        networks:
            extnetwork:
            	ipv4_address: 175.20.0.4 # 分配ip地址
        volumes:                         # 将自己顶一个数据和配置文件映射到mysql容器对应的文件
            - './db:/var/lib/mysql'
            - './conf/my.cnf:/etc/my.cnf'
            - './init:/docker-entrypoint-initdb.d/'
        ports:
            - '6606:3306'                # 将3306端口映射到主机的6606
networks:                                # 定义网络地址
    extnetwork:
        ipam:
            config:
            - subnet: 175.20.0.0/16
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
3.5 启动容器
docker-compose up -d
  • 1
3.6 注意点

mysql容器的IP地址是可以不配置的,但是每次启动的时候ip地址都会变化。所以最好配置成静态的。

docker会在系统中生成一个虚拟的网卡。

docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:caff:fe3f:93db  prefixlen 64  scopeid 0x20<link>
        ether 02:42:ca:3f:93:db  txqueuelen 0  (Ethernet)
        RX packets 82535  bytes 3383930 (3.2 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 122388  bytes 384976398 (367.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

如果我们对外访问的时候直接访问主机的IP地址加上端口号6606就可以。

4. 实例

使用Docker-Compose的搭建Java运行环境,MySQL+Redis+Jdk运行SpringbootJar包。

Docker-Compose.yaml文件

[root@long java-jar-web-project-docker]# cat docker-compose.yml 
version: '3'                                     # Docker-Compose版本
services: 
    web:
        build:                                   # Jdk运行环境使用Dockerfile文件
            context: ./web-service
            dockerfile: Dockerfile
        ports:                                   # 端口映射  9999 -> 9999
            - '9999:9999'
        container_name: web_db                	 # 容器名
        volumes:
            - './jar:/home/jar_home'             # 映射路径, 将主机的 ./jar 路径映射到容器内的/home/jar_home
        depends_on:       						 # 执行顺序
            - 'redis'
            - 'mysql'
        networks:								 # 绑定ip地址
            extnetwork:
                ipv4_address: 175.20.0.4
    mysql:       								 # mysql 同上
        environment:
            MYSQL_ROOT_PASSWORD: 123456
            MYSQL_USER: test
            MYSQL_PASS: test
        image: mysql:5.7
        networks:
            extnetwork:
                ipv4_address: 175.20.0.2
        container_name: mysql_db
        restart: always
        volumes:
            - './mysql-service/db:/var/lib/mysql'
            - './mysql-service/conf/my.cnf:/etc/my.cnf'
            - './mysql-service/init:/docker-entrypoint-initdb.d/'
        ports:
            - '6606:3306'
    redis:  									 # redis 
        restart: always
        image: redis 							 # redis镜像
        container_name: redis_db    			 # redis容器名字
        command: redis-server --requirepass 123456 --appendonly yes    # redis容器密码,开启持久化
        networks:								 # 绑定ip地址
            extnetwork:
                ipv4_address: 175.20.0.3
        ports:									 # 端口映射
            - '6609:6379'
        volumes:   								 # 将本地 ./redis-service/db 映射到 容器中的 /data 目录
            - './redis-service/db:/data'
networks:
    extnetwork:
        ipam:
            config:
            - subnet: 175.20.0.0/16
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52

Dockerfile文件

[root@long web-service]# cat Dockerfile 
FROM centos:7
RUN yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel -y  # 安装jdk1.8
ENV JAVA_HOME /usr/lib/jvm/java      # 设置变量
RUN echo "export JAVA_HOME=$JAVA_HOME" >> /etc/profile   
ENV PATH $JAVA_HOME/bin:$PATH
RUN echo "export PATH=$PATH" >> /etc/profile # 设置环境变量
VOLUME /home/jar_home    # 挂载数据卷
EXPOSE 9999              # 映射端口
CMD sleep 10s && cd /home/jar_home && java -jar sso-client-server-1.0.0.jar >> sso.log && tail -f /dev/null        # 启动容器的时候执行的命令
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

5. 实例的码云地址:

https://gitee.com/molonglove/docker_compose_java.git

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/644114
推荐阅读
相关标签
  

闽ICP备14008679号