方法文档 Overview of Docker Compose | Docker Documentation
安装
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
授权
chmod +x /usr/local/bin/docker-compose
使用说明:
Dockerfile 文件内容:
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["python", "app.py"]
这告诉 Docker:
- 从 Python 3.7 映像开始构建映像。
- 将工作目录设置为
/code
. - 设置命令使用的环境变量
flask
。 - 复制
requirements.txt
并安装 Python 依赖项。 - 向镜像添加元数据以描述容器正在侦听端口 5000
- 将项目中的当前目录复制
.
到镜像中的workdir.
。 - 将容器的默认命令设置为python app.py
docker-compose.yml
version: "3.9"
services:
web:
build: . # 此处的budil . 是使用当前docker-compose.yml目录下的Dockerfile文件构建镜像,并使用
ports:
- "8000:5000"
redis:
image: "redis:alpine" # 使用官方的redis镜像
docker-compose up -d 会运行当前目录下的docker-compose.yml文件
-d 表示守护进程方式运行
docker-compose logs 容器名或容器ID 查看日志
df -f docker-compose-dev up -d 可以运行不是docker-compose.yml名称的文件, -f 为文件的路径
案例:
version: '3'
services:
db:
image: mariadb:latest # 使用的镜像
restart: always
environment:
MYSQL_DATABASE: xxx
MYSQL_ROOT_PASSWORD: xxx
MYSQL_USER: xxx
MYSQL_PASSWORD: xxx
volumes:
- ./docker/sql/mysql:/docker-entrypoint-initdb.d # 将宿主机上的文件同步到镜像中
ports:
- "3306:3306" # 映射到宿主机的端口
web:
build:
context: . # 表示使用docker-compose.yml同级目录下的Dockerfile文件构建镜像
args:
USER_ID: ${USER_ID:-1000}
command: gunicorn config.wsgi:application -c /opt/pro/code/docker/gunicorn_config.py
volumes:
- .:/opt/pro/code
ports:
- "8000:8000"
depends_on: # 依赖的服务
- db # 用docker-compose启动,这里可直接写db的服务名
env_file:
- .env
master:
build:
context: ./docker
dockerfile: Dockerfile-master # 表示使用路径为 ./docker/Dockerfile-master 文件构建镜像
command: honcho start
depends_on:
- web
environment:
- PYTHONUNBUFFERED=true
ports:
- "8080:8080"
参考:Docker:Docker Compose 详解 - 简书
解决docker通过volumes挂载文件,宿主机修改后容器内不同步,重启服务才能同步_夏夜迷的博客-CSDN博客_docker volumes 文件
docker容器之间免密登录
FROM ubuntu:18.04
MAINTAINER userl
RUN ssh-keygen -t rsa -f ~/.ssh/id_rsa -P '' && cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys \
&& sed -i 's/PermitEmptyPasswords yes/PermitEmptyPasswords no /' /etc/ssh/sshd_config \
&& sed -i 's/PermitRootLogin without-password/PermitRootLogin yes /' /etc/ssh/sshd_config \
&& echo " StrictHostKeyChecking no" >> /etc/ssh/ssh_config \
&& echo " UserKnownHostsFile /dev/null" >> /etc/ssh/ssh_config \
&& echo "root:root" | chpasswd \
CMD [ "sh", "-c", "sudo service ssh start; bash"]