docker composer
安装
curl -k -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version

基础概念
Docker Compose 是用于定义和运行多容器 Docker 应用的工具,以在一个 docker-compose.yml 文件中配置所有服务,从而更方便地管理和协调容器
- 服务:独立的应用程序容器,如 web 服务、数据库等
- 网络:不同的服务通过网络进行通信
- 卷:持久化数据,服务可以通过卷共享数据
基础命令
docker-compose up:启动 docker-compose.yml 文件中定义的服务
docker-compose up -d:如果加上 -d 参数,则在后台运行
docker-compose down:停止并移除 docker-compose.yml 文件中定义的所有服务及相关的网络、卷和镜像
docker-compose stop:停止 docker-compose.yml 文件中定义的服务,但不移除容器、网络或卷
docker-compose start:启动已经存在的容器(通常是通过 docker-compose stop 停止的容器)
docker-compose restart:重新启动服务
docker-compose build:根据 docker-compose.yml 文件中定义的构建选项构建或重新构建服务镜像,--no-cache nginx 不带缓存构建镜像
docker-compose logs:查看 docker-compose.yml 文件中定义的服务的日志。可以使用 -f 参数以跟随模式查看日志
docker-compose exec:在运行中的服务容器中执行命令
- docker-compose exec <service> <command>
- docker-compose exec web bash
docker-compose run:运行一个一次性命令的服务容器
- docker-compose run <service> <command>
- docker-compose run web bash
docker-compose ps:列出 docker-compose.yml 文件中定义的服务的状态
docker-compose push:将 docker-compose.yml 文件中定义的服务镜像推送到 Docker 镜像仓库
docker-compose config:验证 docker-compose.yml 文件的语法并显示其合并的配置
docker-compose.yaml 文件语法
version: '3' # 或 '3.8'、'2.4' 等,根据你的 Docker Compose 版本选择
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
app:
image: myapp:latest
depends_on:
- db
environment:
- APP_ENV=production
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
version:指定 Docker Compose 文件的版本
services:定义一组服务,每个服务代表一个容器,每个服务可以指定:
- image:使用的 Docker 镜像
- build:构建镜像的上下文和 Dockerfile
- ports:映射容器的端口到主机
- volumes:挂载主机目录或数据卷到容器内
- environment:设置环境变量
- depends_on:定义服务之间的依赖关系
- networks:指定服务使用的网络
- restart:容器的重启策略
volumes:定义 Docker 数据卷,用于持久化存储
networks:定义自定义网络配置。服务可以连接到这些网络
一些举例
简单服务定义
version: '3'
services:
web:
image: nginx:latest
ports:
- "80:80"
2
3
4
5
6
服务与数据库的链接
version: '3'
services:
web:
image: nginx:latest
ports:
- "80:80"
depends_on:
- db
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
2
3
4
5
6
7
8
9
10
11
12
13
构建自定义镜像
version: '3'
services:
app:
build:
context: .
dockerfile: Dockerfile
ports:
- "5000:5000"
volumes:
- .:/code
environment:
- DEBUG=true
2
3
4
5
6
7
8
9
10
11
12
使用自定义网络
version: '3'
services:
web:
image: nginx:latest
networks:
- mynetwork
app:
image: myapp:latest
networks:
- mynetwork
networks:
mynetwork:
2
3
4
5
6
7
8
9
10
11
12
13
14
docker-compose 发布 jpress
Dockerfile
FROM centos:7
MAINTAINER zhou@qq.com
ADD jdk-8u161-linux-x64.tar.gz /usr/local
ENV JAVA_HOME /usr/local/jdk1.8.0_161
ADD apache-tomcat-8.5.43.tar.gz /usr/local
RUN rm -rf /usr/local/*.tar.gz
WORKDIR /usr/local/apache-tomcat-8.5.43
COPY jpress.war ./webapps/
EXPOSE 8080
ENTRYPOINT ["./bin/catalina.sh","run"]
2
3
4
5
6
7
8
9
10
11
12
13
14
15
docker-compose.yaml
version: '3'
services:
jenkins:
build:
context: .
dockerfile: Dockerfile
ports:
- "8080:8080"
restart: always
2
3
4
5
6
7
8
9
docker-compose up --build -d

