安装前:
uname -s ,uname -m 查看下系统架构信息
Centos 安装:
sudo curl -L https://github.com/docker/compose/releases/download/
v2.7.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
//修改权限
sudo chmod +x /usr/local/bin/docker-compose
Mac OS 安装:
sudo curl -L https://github.com/docker/compose/releases/download/
v2.7.0/docker-compose-darwin-x86_64 -o/usr/local/bin/docker-compose
//修改权限
sudo chmod +x /usr/local/bin/docker-compose
安装完成:docker-compose -v查看下版本即可
docker-compose 格式官网文档:
https://compose-spec.io/
举例:
docker-compose-mysql.yml文档
version: '3'
services:
mysql:
image: mysql:8.0.21
restart: always
container_name: mysql888
volumes:
- /opt/mysql/conf:/etc/mysql/conf.d
- /opt/mysql/data:/var/lib/mysql
- /opt/mysql/log:/var/log/mysql
environment:
MYSQL_ROOT_PASSWORD: xxxx@1234xx
执行
docker-compose up docker-compose-mysql.yml -d
结果:
docker images
会发现自动pull拉了个mysql:8.0.21的镜像。
docker ps
可以看到创建了一个容器名为mysql888的容器并运行了
ed576fbc803e mysql:8.0.21 "docker-entrypoint.s…" About a minute ago Up About a minute 3306/tcp, 33060/tcp mysql888
上面用docker-compose的效果和直接使用docker run 的效果是一样的
docker run -p 33306:3306 --name mysql888 -v $PWD/conf:/etc/mysql/conf.d -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=‘xxxx@1234' -d mysql:8.0.21
共中$PWD是指当前执行命令时所在的目录。
例二,借助Dockerfile
Dockerfile
# Docker image for springboot file run
# VERSION 0.0.1
# 基础镜像使用java,具体要看自己的docker 镜像源是否有
FROM java:8
MAINTAINER fengsh998 <fengsh998@163.com>
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为upload.jar,并放在容器中的/opt目录下
ADD uploader-0.0.1-SNAPSHOT.jar /opt/upload.jar
# 运行jar包
RUN bash -c 'touch /opt/upload.jar'
#创建配置目录
RUN mkdir -p /etc/sdkServer
#创建数据存放目录,方便后面进行挂载
RUN mkdir -p sdkdata
#启动容器之后要执行的命令
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/opt/upload.jar"]
docker-compose.yml
version: '3'
services:
demo:
build: . //Dockerfile所在目录
ports:
- "8899:80"
把docker-compose.yml和Dockerfile放在同一目录下,执行
docker-compose up -d
完成后查看结果:
docker images查看可以多了一个镜像
server_demo latest 5a8834717383 13 minutes ago 721MB
再来查看容器
docker ps
d12fb211d6e0 server_demo "java -Djava.securit…" 15 minutes ago Up 15 minutes 8899/tcp, 0.0.0.0:8899->80/tcp, :::8899->80/tcp server-demo-1
上述可以通过指定image和container_name来指定生成的镜像名和容器名
依赖启动:
version: '3'
services:
backendApp:
build: . #默认查找当前目录下的Dockerfile文件
image: uploadimage #指定镜像名
restart: always
container_name: uploadserver
ports:
- "8899:80"
volumes:
- /opt/filesServer/conf:/etc/sdkServer
- /opt/filesServer/data:/sdkdata
# environment:
# - COMPOSE_PROJECT_NAME
# command: echo "I'm running ${COMPOSE_PROJECT_NAME}"
networks:
uploadapp_net:
aliases:
- uploadhost
depends_on:
- mysql80
mysql80:
image: mysql:8.0.21
restart: always
container_name: fmysql80
ports:
- "33306:3306"
volumes:
- /opt/filemgrs/conf:/etc/mysql/conf.d
- /opt/filemgrs/data:/var/lib/mysql
- /opt/filemgrs/log:/var/log/mysql
environment:
MYSQL_ROOT_PASSWORD: File@1234!~
MYSQL_DATABASE: fmysql
MYSQL_USER: fengsh
MYSQL_PASSWORD: Qwer@1234!~
networks:
uploadapp_net:
aliases:
- mysqlhost
networks:
uploadapp_net: #默认情况下会生成一个当前目录+_uploadapp_net的网络名,也可以通过改COMPOSE_PROJECT_NAME环境变量来处理
external: true #忽略网络,不自动创建