docker compose基本使用
原创大约 3 分钟
基本语法结构。
version: "3.8"
services: # 容器
servicename1: # 容器名,例如redis,这也是内部bridge可以使用的DNS名称
image: # 镜像名
command: # 可选,如果设置,则会覆盖默认镜像里的CMD命令
environment: # 可选,相当于docker run里的 --env
volumes: # 可选,相当于docker run里的 -v
networks: # 可选,相当于docker run里的 --network
ports: # 可选,相当于docker run里的 -p
servicename2:
volumes: # 可选,相当于docker volume create
networks: # 可选,相当于docker network create
可以将如下脚本。
docker image pull redis
docker image build -t flask-demo .
docker network create -d bridge demo-network
docker container run -d --name redis-server --network demo-network redis
docker container run -d --network demo-network --name flask-demo --env REDIS_HOST=redis-server -p 5000:5000 flask-demo
转换为docker-compose.yml
文件。
version: "3.8"
services:
flask-demo:
image: flask-demo:latest
environment:
- REDIS_HOST=redis-server
networks:
- demo-network
ports:
- 8080:5000
redis-server:
image: redis:latest
networks:
- demo-network
networks:
demo-network:
以守护进程的方式启动容器。
> docker-compose up -d
默认情况下,Docker Compose会将docker-compose.yml
所在文件夹的名称添加到容器名称和网络名称前。
root_redis
:当仅指定servicename
而没有指定container_name
时。root_mydocker
:网络名,即使指定了网络名,前面仍然会添加前缀。
可以通过以下方式指定容器名称。
> docker-compose -p [名称前缀] up -d
但这样会很麻烦,因为以后每次使用Docker Compose命令时,都需要加上-p [名称前缀]
才行。
例如,如果之前执行过docker-compose -p [名称前缀] up -d
,那么当执行docker-compose ps
时如果不带-p [名称前缀]
,就会找不到已经启动了的容器。
如果想持续看容器的日志输出。
> docker-compose logs -f
查看已启动的容器。
> docker-compose ps
停止所有已启动的容器。
> docker-compose stop
删除所有已停止的容器。
> docker-compose rm
停止并删除所有已启动的容器
、数据卷
和网络
。
# docker-compose down
从指定的Dockerfile
文件中构建镜像。
version: "3.8"
services:
flask-demo:
build:
context: ./flask
dockerfile: Dockerfile-dev
image: flask-demo:latest
......
然后使用下面的命令构建镜像。
> docker-compose build .
如果是默认的
Dockerfile
文件名,就可以添加context
和dockerfile
。加上
image: flask-demo:latest
是用来指定构建好的镜像的名称。
如果之前已经通过docker-compose up -d
启动了容器,那么依然可以通过下面的命令完成容器内的服务更新操作。
> docker-compose up -d --build
如果docker-compose.yml
文件发生了更新,添加了新的容器,那么再次执行命令。
> docker-compose up -d
就可以拉取镜像并启动容器,添加一个--remove-orphans
参数可以检查被删除的部分容器并且将它们清理掉。
重新启动容器,如果资源发生更新也会一并更新。
# docker-compose restart
感谢支持
更多内容,请移步《超级个体》。