文章目录
注意
Dockerfile是用来构建镜像;
docker-compose是用来运行容器;
https://blog.csdn.net/pushiqiang/article/details/78682323
例子
创建docker-compose.yml
version: '3'
services:
ppp-redis: #这个名称随意,一般是 项目名称-服务名
image: redis:5.0.9
container_name: redis
networks:
- ppp #使用下面创建的网络ppp
restart: always
volumes:
- /opt/data:/var/lib/mysql
ports:
- "6378:6379"
tty: true
networks:
ppp:
#使用外部网络
external: true
使用
docker-compose up -d <servicename>
一个docker-compose文件里面可以有多个service,可以指定某个service,不指定则默认运行全部service
常用标签
version
指定 compose 文件的版本
compose文件格式版本 | docker版本 |
---|---|
3.4 | 17.09.0+ |
3.3 | 17.06.0+ |
3.2 | 17.04.0+ |
3.1 | 1.13.1+ |
3.0 | 1.13.0+ |
2.3 | 17.06.0+ |
2.2 | 1.13.0+ |
2.1 | 1.12.0+ |
2.0 | 1.10.0+ |
1.0 | 1.9.1.+ |
services
一个service代表一个container(这个container可以从docker hub上拉取的image创建也可以用Dockerfile build出来的image创建)
services的下级名称随意,一般是 项目名称-服务名
image
指定以哪个镜像启动容器;
build
除了可以基于指定的镜像,还可以基于一份 Dockerfile来构建服务
build指向一个保存了docker-compose.yml文件的目录
# . 表示dockerfile在当前目录下;
build: .
注意
build如果和image一起使用,那么Compose 会构建镜像并且把镜像命名为 image 后面的那个名字;
那么Dockerfile构建的镜像将会被命名为myredis
build: .
image: myredis
VOLUME
用法跟docker run 的-v一样,同时指定宿主机目录和容器目录
volumes:
- /opt/data:/var/lib/mysql
左边宿主机:右边容器
VOLUME命令(docker -v)注意事项
- 容器目录不可以为相对路径
- 宿主机目录如果不存在,则会自动生成
- 如果宿主机目录为相对路径,则对应的目录在宿主机/var/lib/docker/volumes/下
- 例如 docker run -it -v -v test1:/soft centos /bin/bash,则容器内的/soft目录挂载的是宿主机上的/var/lib/docker/volumes/test1/_data目录
- 如果volume(或者docker -v)命令只指定一个路径,那么这个路径是容器路径且挂载到 宿主机/var/lib/docker/volumes/容器id/_data目录
- 例如 docker run -it -v /test2 centos /bin/bash 将会把容器/test2目录挂在到宿主机/var/lib/docker/volumes/96256232eb74edb139d652746f0fe426e57fbacdf73376963e3acdb411b3d73a/_data目录 ,中间的一长串是容器完整id
restart: always
当 Docker 重启时,容器自动启动。当容器自动关闭时也能自动启动;
container_name
指定 容器的名字
command
command:覆盖容器启动后默认执行的命令
command: bundle exec thin -p 3000
或
command: [bundle,exec,thin,-p,3000]
environment
添加环境变量。同docker run -e。可以是数组或者字典格式
例如 docker-mysql时 docker run需要使用-e指定数据库密码
environment:
MYSQL_ROOT_PASSWORD: "password"
docker-compose中配置网络
docker-compose中创建并使用网络
version: '3'
services:
myredis:
...
#使用下面定义的mynet
networks:
- mynet
...
#创建网络,这里的networks和上面的services平级
networks:
mynet:
driver: bridge #指定网络类型
# 假如是在myApp目录下运行的docker-compose up命令,那么这个网络的名字就是myApp_mynet
---
docker-compose中使用外部用网络
先创建网络mynet
version: '3'
services:
ppp-redis:
...
networks:
- mynet
...
networks:
mynet:
#申明使用外部网络
external: true