Docker docker-compose

缺乏、安全感 2022-02-28 06:00 319阅读 0赞

compose是docker容器进行编排的工具,通过定义一个配置文件(默认docker-compose.yml),管理多个容器的运行

安装

因为装了Python3环境,使用pip3命令安装,然后创建软连接即可;

  1. [root@Python ~]# pip3 -V
  2. pip 10.0.1 from /usr/local/python3/lib/python3.7/site-packages/pip (python 3.7)
  3. [root@Python ~]# pip3 install docker-compose
  4. [root@Python ~]# ln -s /usr/local/python3/bin/docker-compose /usr/local/bin/docker-compose
  5. [root@Python ~]# docker-compose version
  6. docker-compose version 1.23.2, build 1110ad0
  7. docker-py version: 3.7.1
  8. CPython version: 3.7.0
  9. OpenSSL version: OpenSSL 1.0.2k-fips 26 Jan 2017

由于 docker-compose 托管在 github 上,也可以到 github 上下载,然后给予执行权限即可:

  1. [root@test-101 ~]# curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
  2. % Total % Received % Xferd Average Speed Time Time Time Current
  3. Dload Upload Total Spent Left Speed
  4. 100 617 0 617 0 0 100 0 --:--:-- 0:00:06 --:--:-- 128
  5. 100 15.4M 100 15.4M 0 0 39911 0 0:06:45 0:06:45 --:--:-- 37669
  6. [root@test-101 ~]# chmod +x /usr/local/bin/docker-compose
  7. [root@test-101 ~]# docker-compose --version
  8. docker-compose version 1.24.1, build 4667896b

上面下载的是 1.24.1 版本的 docker-compose,访问 releases 页面可以查看最新版本的 docker-compose。

简单使用

举个栗子

用 Python 来建立一个能够记录页面访问次数的 web 网站:

  1. [root@python syztoo]# ls
  2. app.py docker-compose.yml Dockerfile

app.py文件内容:

  1. [root@python syztoo]# cat app.py
  2. from flask import Flask
  3. from redis import Redis
  4. app = Flask(__name__)
  5. redis = Redis(host='redis', port=6379)
  6. @app.route('/')
  7. def hello():
  8. count = redis.incr('hits')
  9. return 'Hello World! 该页面已被访问 {} 次。\n'.format(count)
  10. if __name__ == "__main__":
  11. app.run(host="0.0.0.0", debug=True)

Dockerfile文件内容:

  1. [root@python syztoo]# cat Dockerfile
  2. FROM python:3.7-alpine
  3. ADD . /code
  4. WORKDIR /code
  5. RUN pip install redis flask
  6. CMD ["python", "app.py"]

docker-compose.yml文件内容:

  1. [root@python syztoo]# cat docker-compose.yml
  2. version: '3'
  3. services:
  4. web:
  5. build: .
  6. ports:
  7. - "5000:5000"
  8. redis:
  9. image: "redis:alpine"

启动容器:

  1. [root@python syztoo]# docker-compose up -d

登陆浏览器验证,也可使用curl进行本地验证

  1. [root@python syztoo]# curl '127.0.0.1:5000'
  2. Hello World! 该页面已被访问 1 次。
  3. [root@python syztoo]# curl '127.0.0.1:5000'
  4. Hello World! 该页面已被访问 2 次。
  5. [root@python syztoo]# curl '127.0.0.1:5000'
  6. Hello World! 该页面已被访问 3 次。

命令格式

  1. docker-compose [options] [COMMAND] [ARGS...]
  2. options
  3. -f filename 指定使用的模板文件,默认docker-compose.yml
  4. -p projectname 指定项目名字,默认以当前目录作为项目名字
  5. COMMAND
  6. up 启动项目
  7. up -d 启动并后台运行
  8. down 停止项目并移除网络
  9. config 验证compose文件格式是否正确
  10. exec 进入指定的容器
  11. images 列出项目中所包含的容器
  12. kill 强制停掉某容器
  13. logs 查看容器日志
  14. port 查看某容器映射的端口
  15. pause 暂停某容器运行
  16. unpause 恢复暂停状态的容器
  17. start 运行停止状态的容器
  18. stop 停止运行状态的容器

docker-compose.yml

默认的模板文件名称为 docker-compose.yml ,格式为 YAML 格式。

举栗子说明

  1. version: "3"
  2. services:
  3. webapp:
  4. image: nginx
  5. ports:
  6. - "80:80"
  7. volumes:
  8. - "/home/nginx/html:/usr/share/nginx/html"
  9. - "/home/nginx/conf:/etc/nginx"

image,指定镜像;

ports,指定映射端口;

volumes,数据卷所挂载路径设置;

  1. version: '3'
  2. services:
  3. web:
  4. build: ./syztoo
  5. version: '3'
  6. services:
  7. web:
  8. build:
  9. context:/home/syztoo
  10. dockerfile:Dockerfile-web

build,直接指定Dockerfile文件所在目录,也可以配合context、dockerfile指令,指定Dockerfile文件位置。每个服务中必须包含基础镜像,可通过image指令指定,也可通过build结合Dockerfile构建。


  1. version: "3"
  2. services:
  3. mysql:
  4. image:mysql
  5. ports
  6. - "3306:3306"
  7. environment:
  8. MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_password
  9. secrets:
  10. - db_root_password
  11. - my_other_secret
  12. networks:
  13. - some-network
  14. secrets:
  15. my_secret:
  16. file: ./my_secret.txt
  17. my_other_secret:
  18. external: true
  19. networks:
  20. some-network:

networks,指定网络;

environment,直接指定环境变量;也可通过env_file指向环境变量文件指定;

secret,存储敏感数据,比如数据库密码;

其他指定

expose,暴露服务端口,但不映射到主机,只被连接的服务访问;

labels,为容器添加元数据信息;

depends_on,指定依赖关系,关系容器的启动顺序;

deploy,configs 配合 docker swarm 使用。

发表评论

表情:
评论列表 (有 0 条评论,319人围观)

还没有评论,来说两句吧...

相关阅读