docker 容器安装conposer_docker学习笔记(二)docker-composer
一、简介
Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。
Compose 中有两个重要的概念:
服务 (service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
项目 (project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。
二、安装
Docker Desktop for Mac/Windows 自带 docker-compose 二进制文件,安装 Docker 之后可以直接使用。
$ docker-compose --version
docker-compose version 1.23.2, build 1110ad01
1
2
3
$docker-compose--version
docker-composeversion1.23.2,build1110ad01
三、composer模板文件
编写一个最简单的模板
# docker-compose.yml
version: "3"
services:
webapp:
image: nginx:v3
ports:
- "80:80"
1
2
3
4
5
6
7
8
9
# docker-compose.yml
version:"3"
services:
webapp:
image:nginx:v3
ports:
-"80:80"
version 表示模板使用的规则版本号
services表示所有服务
webapp表示服务名称
image表示镜像,nginx:v3是我们之前构建的镜像
ports表示端口映射
启动服务
$ docker-compose up -d
1
2
$docker-composeup-d
-d 表示后台常驻进程方式运行
下面我们挑选几个进行演练。
build
指定 Dockerfile 所在文件夹的路径(可以是绝对路径,或者相对 docker-compose.yml 文件的路径)。 Compose 将会利用它自动构建这个镜像,然后使用这个镜像。
version: '3'
services:
webapp:
build: ./dir
1
2
3
4
5
6
version:'3'
services:
webapp:
build:./dir
也可以使用 context 指令指定 Dockerfile 所在文件夹的路径。
使用 dockerfile 指令指定 Dockerfile 文件名。
使用 arg 指令指定构建镜像时的变量。
version: '3'
services:
webapp:
build:
context: ./dir
dockerfile: Dockerfile-alternate
args:
buildno: 1
1
2
3
4
5
6
7
8
9
10
version:'3'
services:
webapp:
build:
context:./dir
dockerfile:Dockerfile-alternate
args:
buildno:1
container_name
指定容器名称。默认将会使用 项目名称_服务名称_序号
version: "3"
services:
webapp:
container_name: my-ngxin
image: nginx:v3
ports:
- "80:80"
1
2
3
4
5
6
7
8
9
version:"3"
services:
webapp:
container_name:my-ngxin
image:nginx:v3
ports:
-"80:80"
查看服务
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
19f8fdb1f76d nginx:v3 "nginx -g 'daemon of…" 4 seconds ago Up 3 seconds 0.0.0.0:80->80/tcp my-ngxin
1
2
3
4
5
$dockerps
CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES
19f8fdb1f76dnginx:v3"nginx -g 'daemon of…"4secondsagoUp3seconds0.0.0.0:80->80/tcpmy-ngxin
depends_on
解决容器的依赖、启动先后的问题。下面为例,会先启动redis,之后再启动webapp。
version: "3"
services:
webapp:
image: nginx:v3
ports:
- "80:80"
depends_on:
- redis
redis:
image: redis:latest
1
2
3
4
5
6
7
8
9
10
11
12
version:"3"
services:
webapp:
image:nginx:v3
ports:
-"80:80"
depends_on:
-redis
redis:
image:redis:latest
env_file
从文件中获取环境变量,可以为单独的文件路径或列表。
如果通过 docker-compose -f FILE 方式来指定 Compose 模板文件,则 env_file 中变量的路径会基于模板文件路径。默认为.env模板。
version: "3"
services:
webapp:
image: nginx:v3
ports:
- "80:80"
env_file: .env
redis:
image: redis:latest
env_file:
- ./common.env
- ./apps/web.env
- /opt/secrets.env
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
version:"3"
services:
webapp:
image:nginx:v3
ports:
-"80:80"
env_file:.env
redis:
image:redis:latest
env_file:
-./common.env
-./apps/web.env
-/opt/secrets.env
environment
设置环境变量。你可以使用数组或字典两种格式。
version: "3"
services:
webapp:
image: nginx:v3
ports:
- "80:80"
environment:
RACK_ENV: development
SESSION_SECRET:
1
2
3
4
5
6
7
8
9
10
11
version:"3"
services:
webapp:
image:nginx:v3
ports:
-"80:80"
environment:
RACK_ENV:development
SESSION_SECRET:
如果变量名称或者值中用到 true|false,yes|no 等表达 布尔 含义的词汇,最好放到引号里,避免 YAML 自动解析某些内容为对应的布尔语义。这些特定词汇,包括
y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF
1
2
y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF
expose
暴露端口,但不映射到宿主机,只被连接的服务访问。
仅可以指定内部端口为参数
version: "3"
services:
webapp:
image: nginx:v3
expose:
- "3000"
ports:
- "80:80"
1
2
3
4
5
6
7
8
9
10
version:"3"
services:
webapp:
image:nginx:v3
expose:
-"3000"
ports:
-"80:80"
network_mode
设置网络模式。使用和 docker run 的 --network 参数一样的值。
network_mode: "bridge"
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"
network_mode: "container:[container name/id]"
1
2
3
4
5
6
network_mode:"bridge"
network_mode:"host"
network_mode:"none"
network_mode:"service:[service name]"
network_mode:"container:[container name/id]"
networks
配置容器连接的网络。
假设,在目录app下创建docker-compose.yml,内容如下:
version: "3"
services:
webapp:
image: nginx:v3
ports:
- "80:80"
1
2
3
4
5
6
7
8
version:"3"
services:
webapp:
image:nginx:v3
ports:
-"80:80"
使用docker-compose up启动容器后,这些容器都会被加入app_default网络中。使用docker network ls可以查看网络列表,docker network inspect可以查看对应网络的配置。
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
0a9fa5ffdf97 app_default bridge local
...
1
2
3
4
5
$dockernetworkls
NETWORKIDNAMEDRIVERSCOPE
0a9fa5ffdf97app_defaultbridgelocal
...
假设我们lnmp环境需要网络隔离,如下配置,nginx、mysql、redis都有独立的网络,相互隔离,php需要链接他们,则都可以所有网络都可以使用。
version: '3'
services:
nginx:
image: nginx:alpine
# ...
networks:
- net-php
php:
# ...
networks:
- net-php
- net-mysql
- net-redis
mysql:
image: mysql:5.7
# ...
networks:
- net-mysql
redis:
image: redis:latest
# ..
networks:
- net-redis
networks:
net-php:
net-mysql:
net-redis:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
version:'3'
services:
nginx:
image:nginx:alpine
# ...
networks:
-net-php
php:
# ...
networks:
-net-php
-net-mysql
-net-redis
mysql:
image:mysql:5.7
# ...
networks:
-net-mysql
redis:
image:redis:latest
# ..
networks:
-net-redis
networks:
net-php:
net-mysql:
net-redis:
ports
暴露端口信息。
使用宿主端口:容器端口 (HOST:CONTAINER) 格式,或者仅仅指定容器的端口(宿主将会随机选择端口)都可以。
ports:
- "3000"
- "8000:8000"
- "49100:22"
- "127.0.0.1:8001:8001"
1
2
3
4
5
6
7
ports:
-"3000"
-"8000:8000"
-"49100:22"
-"127.0.0.1:8001:8001"
注意:当使用 HOST:CONTAINER 格式来映射端口时,如果你使用的容器端口小于 60 并且没放到引号里,可能会得到错误结果,因为 YAML 会自动解析 xx:yy 这种数字格式为 60 进制。为避免出现这种问题,建议数字串都采用引号包括起来的字符串格式。
secrets
存储敏感数据,例如 mysql 服务密码。
version: "3.1"
services:
mysql:
image: mysql
environment:
MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_password
secrets:
- db_root_password
- my_other_secret
secrets:
my_secret:
file: ./my_secret.txt
my_other_secret:
external: true
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
version:"3.1"
services:
mysql:
image:mysql
environment:
MYSQL_ROOT_PASSWORD_FILE:/run/secrets/db_root_password
secrets:
-db_root_password
-my_other_secret
secrets:
my_secret:
file:./my_secret.txt
my_other_secret:
external:true
volumes
数据卷所挂载路径设置。可以设置为宿主机路径(HOST:CONTAINER)或者数据卷名称(VOLUME:CONTAINER),并且可以设置访问模式 (HOST:CONTAINER:ro)。
该指令中路径支持相对路径。
volumes:
- /var/lib/mysql
- cache/:/tmp/cache
- ~/configs:/etc/configs/:ro
1
2
3
4
5
volumes:
-/var/lib/mysql
-cache/:/tmp/cache
-~/configs:/etc/configs/:ro
如果路径为数据卷名称,必须在文件中配置数据卷。
version: "3"
services:
my_src:
image: mysql:8.0
volumes:
- mysql_data:/var/lib/mysql
volumes:
mysql_data:
1
2
3
4
5
6
7
8
9
10
11
version:"3"
services:
my_src:
image:mysql:8.0
volumes:
-mysql_data:/var/lib/mysql
volumes:
mysql_data:
本文参考地址:https://yeasy.gitbooks.io/docker_practice/compose/compose_file.html
docker 容器安装conposer_docker学习笔记(二)docker-composer相关推荐
- docker 容器安装conposer_docker和php:将依赖项(composer)放入容器中
目前我正致力于以下解决方案: 开发环境: 将整个src添加为volume: volumes: - .:/app initial composer install command docker-comp ...
- docker 容器安装conposer_Docker下用composer国内镜像安装Laravel
自己在docker拉取了composer镜像,如何在docker上启动composer容器,使用composer国内镜像安装包呢? composer国内镜像和composer安装包的命令就不多说了,我 ...
- Docker基础下(学习笔记)
5. Docker 容器数据卷 5.1 容器数据卷是什么 先来看看Docker的理念: 将运用与运行的环境打包形成容器运行 ,运行可以伴随着容器,但是我们对数据的要求希望是持久化的. 容器之间希望有可 ...
- Docker学习笔记--1.Docker原理、容器
Docker的安装 Docker的基本构成 Docker架构图 镜像(image): 1 Docker 镜像(Image)就是一个只读的模板.镜像可以用来创建 Docker 容器,一个镜像可以创建很 ...
- Docker容器技术与应用(项目2 Docker容器安装和使用)
项目2 Docker容器安装和使用 下面重点介绍Docker的安装,镜像Image.镜像仓库Registry和容器Container的使用和管理. 图2.1 Docker镜像.容器和仓库之间的主要操作 ...
- 学习笔记:Docker
推荐这里 阅读笔记 :Docker 笔记 〓 Docker - 一切在云端 B站视频地址:尚硅谷 Docker 阳哥 云原生Java 架构师的第一课K8s + Docker + KubeSphere ...
- Docker 安全问题与防护 (学习笔记)
文章目录 1. Docker面临的安全问题 1.1 Docker简介 1.2 Docker安全问题 2. Docker安全方案 2.1 Docker安全基线 2.2 Docker安全规则 2.3 Do ...
- 『中级篇』docker容器安装wordpress(37)
原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『中级篇』docker容器安装wordpress(37) 第一节的时候我就部署过wordpress,可能很多老铁一头雾水不知道 ...
- Linux下的docker容器安装教程
Linux下的docker容器安装教程 一.初始环境配置 1.yum仓库配置 2.检查yum仓库 3.关闭防火墙和selinux 二.开启内核的流量转发 三.安装docker 1.配置docker相关 ...
最新文章
- ThinkPHP学习笔记之Model操作
- 数学之美系列16(转帖)
- mysql重置auto_increment字段
- ajax请求php的过程,php如何实现ajax请求
- Android 顶部切换实现(二)
- iphone:MKMapView
- Draw Circle 沿着圆运动~
- 三星Galaxy A73显示Geekcbench:或搭载骁龙778G
- [one day one question] GIF动画为什么只动一次不能循环
- C#生成不重复随机数列表
- C语言小于n的素数,关于求N以内素数的一点小问题(N小于一亿)
- new,malloc,GlobalAlloc详解
- python re span_Python的re模块与正则表达式小结
- C语言应该增加交换值的关键字或语法
- 最长公共子串 动态规划
- 【数据结构导论】考试笔记总结(一)
- 哲学家进餐问题 C++实现
- matlab 矩阵列运算,MATLAB矩阵及其运算
- 创业者不能盲目的跟风,不然结局很凄凉
- Steve Hui:云联云是中国云计算的最好切入点(4月刊推荐)
热门文章
- 【图像】Dog(高斯差分)检测角点
- c++/cli中调用C#类库中的out参数
- C#反射技术之一动态读取和设置对象的属性值
- 在数据库什么是主键与外键
- 阻塞IO模型-数据读写
- python基础——导入模块
- 零起点学算法82——数组中查找数
- 调用函数,输出Fibonacci数列的m项至n项
- [BX] 和 loop 指令---汇编学习笔记
- shardingsphere启动的时候报错Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are required