赞
踩
Docker Compose是一个用来定义和运行复杂应用的Docker工具。一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose不再需要使用shell脚本来启动容器。
Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。
创建并启动容器
docker-compose up -d # 创建并启动容器
查看当前compose进程
docker-compose ps # 查看当前compose进程
启动容器
docker-compose start # 启动容器
关闭容器
docker-compose stop # 关闭容器
关闭并移除容器
docker-compose down # 关闭并移除容器
[root@long mysql-service]# tree
.
├── conf (存放配置文件)
│ |
│ └── my.conf (MySQL配置)
├── db (数据库文件)
│ ├──
|
├── docker-compose.yml (docker-compose文件)
└── init
└── init.sql (mysql初始化文件sql语句)
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
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");
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
docker-compose up -d
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
如果我们对外访问的时候直接访问主机的IP地址加上端口号6606就可以。
使用Docker-Compose
的搭建Java运行环境,MySQL+Redis+Jdk
运行Springboot
的Jar
包。
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
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 # 启动容器的时候执行的命令
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。