Docker-Compose概述
Posted 礁之
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker-Compose概述相关的知识,希望对你有一定的参考价值。
文章目录
一、Docker-Compose简介
-
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
-
Compose是一个定义和管理多容器的工具,也是一种容器编排工具,前身是Pig,使用Python语言编写。使用Compose配置文件描述多个容器应用的架构,build使用什么镜像,数据卷,映射端口等;然后一条命令管理所有服务,比如启动,停止,重启。简化部署多个容器的操作。
-
Docker-compose是一个定义和管理多容器的工具,主要用来编排相关联的容器。
-
Compose 使用的三个步骤:
- 使用 Dockerfile 定义应用程序的环境。
- 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
- 最后,执行 docker-compose up 命令来启动并运行整个应用程序。
二、Docker-Compose安装
最新下载地址:https://docs.docker.com/compose/install/
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UqxwTgA8-1639386266673)(F:\\个人文档\\markdown图片\\image-20210729171211798.png)]
(1)下载二进制文件安装Compose
[root@Centos7 ~]# curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 633 100 633 0 0 86 0 0:00:07 0:00:07 --:--:-- 131
100 12.1M 100 12.1M 0 0 32848 0 0:06:27 0:06:27 --:--:-- 81655
[root@Centos7 ~]# cd /usr/local/bin/
[root@Centos7 bin]# ll | grep docker-compose
-rw-r--r-- 1 root root 12737304 7月 29 17:20 docker-compose
[root@Centos7 bin]# chmod a+x docker-compose
[root@Centos7 bin]# docker-compose -version #查看版本
docker-compose version 1.29.2, build 5becea4c
(2)使用pip下载Compose
******(1)配置yum源,下载pip
# 更新yum源
yum update
# 安装扩展yum源
yum -y install epel-release
# 下载python pip
yum -y install python-pip
******(2)安装Docker Compose
pip install docker-compose
• 软件版本:pip版本8.1.2,但是版本18.1是可用的。
• 可以通过:pip install—upgrade pip'命令进行升级。
三、Docker-Compose常用命令
(1)Compose常用选项
- SERVICE是Compose文件中定义的,类似于ansible的主机组,SERVICE中定义的是镜像的名称
-docker-compose
#docker-compose主命令后面跟其他命令
语法:docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
选项:
-f 指定Compose配置文件,默认docker-compose.yml
-p 指定项目名称,默认目录名
--verbose 显示更多的输出
-build
#重新构建服务
语法:build [options] [--build-arg key=val...] [SERVICE...]
选项:
--no-cache 不使用缓存构建镜像
--build-arg key=val 指定镜像构建时的变量
-config
#验证和查看Compose文件语法是否正确
语法:config [options]
选项:
-q, --quiet 只验证不打印
--services 只打印服务名称,每行一个
--volumes 打印数据卷名称,每行一个
-exec
#在运行的容器里运行命令
语法:exec [options] SERVICE COMMAND [ARGS...]
选项:
-d 在后台运行命令
--privileged 给这个进程赋予特权权限
-u, --user USER 作为该用户运行该命令
-T 禁用分配伪终端,默认分配一个终端
--index=index 多个容器时的索引数字,默认1
-port
#打印绑定的开放端口
语法:port [options] SERVICE PRIVATE_PORT
选项:
--protocol=proto tcp或udp,默认tcp
--index=index 多个容器时的索引数字,默认1
-ps
#列出容器
语法:ps [options] [SERVICE...]
选项:
-q 只显示ID
-rm
#删除停止的服务容器
语法:rm [options] [SERVICE...]
选项:
-f, --force 强制删除
-s, --stop 删除容器时如果需要先停止容器
-v 删除与容器相关的任何匿名卷
-scale
#指定一个服务启动容器
语法:scale [options] [SERVICE=NUM...]
-up
#创建和启动容器
语法:up [options] [--scale SERVICE=NUM...] [SERVICE...]
选项:
-d 在后台运行容器
-t 指定超时时间
-no-deps 不启动连接服务
--no-recreate 如果容器存在,不重建他们
--no-build 不构建镜像,即使它丢失
--build 启动容器下构建镜像
--scale SERVICE=NUM 指定一个服务(容器)的启动数量
-stop、start、restart
#停止服务
语法:stop [SERVICE...]
#启动服务
语法:start [SERVICE...]
#重启服务
语法:restart [options] [SERVICE...]
-top
#显示容器运行进程
语法:top [SERVICE...]
-logs
#显示容器的输出
-f, --follow 实时输出日志
-t, --timestamps 显示时间戳
--tail="all" 从日志末尾显示行数
其他选项
停止容器和删除容器、网络、数据卷和镜像:down
创建一个服务:create
接收容器输出的事件:events
查看命令帮助:help
列出本地Docker的镜像:images
杀死一个容器,可以发送信号:kill
挂起容器:pause
指定发布绑定的端口:port
下载镜像:pull
推送镜像:push
注意事项
- 通常docker-compose命令只在含有docker-compose.yml文件目录下执行。只去找该文件内的服务,所以当批量部署服务时尽量将所有服务器写入到一个目录结构下
(2)Docker Compose 配置文件常用指令
-YAML文件格式及编写注意事项
- YAML是一种标记语言很直观的数据序列化格式,可读性高。类似于XML数据描述语言,语法比XML简单的很多。
- YAML数据结构通过缩进来表示,连续的项目通过减号来表示,键值对用冒号分隔,数组用中括号括起来,hash用花括号括起来。
-YAML文件格式注意事项
- 不支持制表符tab键缩进,需要使用空格缩进
- 通常开头缩进2个空格
- 字符后缩进1个空格
-build
#构建镜像的上下文路径
两种写法都可以
build
build: ./dir #路径是从docker-compose.yml文件目录下开始的相对路径,一般都是./,后面写目录
build:
context: ./dir
-Dockerfile
#指定Dockerfile文件名称
build:
context: . #这个就是指定路径在当前目录
dockerfile: Dockerfile-alternate #指定dockerfile的文件名称
-images
#选择基础镜像
image: redis #镜像名称,没有版本名称默认版本为latest
image: ubuntu:14.04 #镜像名称+版本名称
image: tutum/influxdb
image: example-registry.com:4000/postgresql #指定镜像仓库的镜像
image: a4bc65fd #指定镜像id号
-args
#构建参数,在Dockerfile中指定的参数(定义变量,可以一次指定多个变量)
下面两种写法不管是:还是=都可以
build:
context: .
args:
buildno: 1 #定义变量buildno为1
gitcommithash: cdc3b19
build:
context: .
args:
- buildno=1
- gitcommithash=cdc3b19
-command
#指定命令,会覆盖默认命令
command: bundle exec thin -p 3000
command: ["bundle", "exec", "thin", "-p", "3000"]
-container_name
#自定义容器名称。如果自定义名称,则无法将服务scale到1容器之外
container_name: my-web-container #默认使用compose创建的镜像名称都是以compose_开头的,而这个可以指定镜像的名称
-deploy
#指定与部署和运行相关的配置。限版本3
version: '3'
services:
redis: #创建镜像为redis
image: redis:alpine #指定基础镜像
deploy:
replicas: 6
update_config: #用于配置滚动更新配置
parallelism: 2 #一次性更新的容器数量
delay: 10s #更新一组容器之间的间隔时间
restart_policy: #定义容器重启策略, 用于代替 restart 参数
condition: on-failure #只有当容器内部应用程序出现问题才会重启
#要注意空行,每个选项的内容都会空两个字符串的位置
-depends_on
#服务之间的依赖,控制服务启动顺序。正常是按顺序启动服务,例如构建lnmp这种,就需要排序一下启动的顺序
version: '3'
services:
web: #创建镜像web
build: . #指定构建镜像获取dockerfile的目录
depends_on:
- db #指定顺序等待db和redis都启动之后,web才会启动
- redis
redis: #创建镜像redis
image: redis
db: #创建镜像db
image: postgres
-dns
#自定义DNS服务器,可以使单个值或者列表
单个值:
dns: 8.8.8.8
列表:
dns:
- 8.8.8.8
- 9.9.9.9
-entrypoint
#在 Dockerfile 中有一个指令叫做 ENTRYPOINT 指令,用于指定接入点
entrypoint: /code/entrypoint.sh
entrypoint:
- php
- -d
- zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so
- -d
- memory_limit=-1
- vendor/bin/phpunit
-env_file
#冲文件中添加环境变量,可以是单个值或者列表
单个值:
env_file: .env
列表:
env_file:
- ./common.env
- ./apps/web.env
- /opt/secrets.env
-environment
#添加环境变量,可以是数组或者字典,布尔值需要使用括号括起来,可以指定默认值也可以不指定默认值
下面两种方法都可以
environment:
RACK_ENV: development
SHOW: 'true'
SESSION_SECRET:
environment:
- RACK_ENV=development
- SHOW=true
- SESSION_SECRET
-expose
#声明容器的服务端口,可以声明多个
expose:
- "3000"
- "8000"
-links
#连接到另一个容器,解决容器连接问题
web:
links: #表示web会连接到db、db:database、redis
- db
- db:database
- redis
#db:database,其中database是别名,使用的别名将会自动在服务容器中的/etc/hosts里创建相应的环境变量也将被创建
-external_links
#连接Compose之外的容器
external_links:
- redis_1
- project_db_1:mysql
- project_db_1:postgresql
-extra_hosts
#添加主机名映射,与—addhost相同,也就是添加主机名的标签,往hosts文件中添加这些记录
extra_hosts:
- "somehost:162.242.195.82"
- "otherhost:50.31.209.229"
-logging
#记录该服务的日志。与—logdriver相同
logging:
driver: syslog
options:
syslog-address: "tcp://192.168.0.42:123"
-network_mode
#指定网络模式,与—net相同
network_mode: "bridge"
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"
network_mode: "container:[container name/id]"
-networks
#要加入的网络,即表示创建的镜像加入的网络模式
services:
some-service:
networks:
- some-network
- other-network
#关于这个标签还有一个特别的子标签aliases,这是一个用来设置服务别名的标签,例如:
services:
some-service:
networks:
some-network:
aliases:
- alias1
- alias3
other-network:
aliases:
- alias2
#相同的服务可以在不同的网络有不同的别名。
-ipv4_address,ipv6_address
#在加入网络时为该服务指定容器的静态IP地址
version: '2.1'
services:
app:
image: busybox
command: ifconfig
networks:
app_net:
ipv4_address: 172.16.238.10 #设置ipv4地址
networks:
app_net:
driver: bridge
enable_ipv6: true
ipam:
driver: default
config:
-
subnet: 172.16.238.0/24 #设置网段
-pid
#将PID模式设置为主机PID模式,与宿主机共享PID地址空间。
pid: "host"
-ports
#指定容器与主机映射的端口,端口不低于60
ports:
- "3000"
- "3000-3005"
- "8000:8000"
- "9090-9091:8080-8081"
- "49100:22"
- "127.0.0.1:8001:8001"
- "127.0.0.1:5000-5010:5000-5010"
- "6060:6060/udp"
-sysctls
#在容器内设置内核参数,值可以是数组或字典
两种方法都可以
sysctls:
net.core.somaxconn: 1024
net.ipv4.tcp_syncookies: 0
sysctls:
- net.core.somaxconn=1024
- net.ipv4.tcp_syncookies=0
-ulimits
#使用此选项会覆盖容器的默认ulimits
ulimits:
nproc: 65535
nofile:
soft: 20000
hard: 40000
-volumes
#挂载一个目录或一个已经存在的数据卷容器到容器
#source:是宿主机的目录
#target:容器的目录
version: "3.2"
services:
web:
image: nginx:alpine
volumes: #挂载
- type: volume #类型选择挂载
source: mydata #和compose文件同一目录的目录挂载到容器的/data目录
target: /data
volume:
nocopy: true
- type: bind
source: ./static
target: /opt/app/static
NFS持久化
version: '3.3'
services:
redis:
image: 192.168.1.81:5000/redis:4.0.6
volumes:
- type: volume
source: redis-nfs
target: /usr/local/redis-4.0.9/data
volume:
nocopy: true
volumes:
redis-nfs:
driver: local
driver_opts:
type: "nfs" #类型选择nfs
o: "addr=192.168.1.81,vers=4,soft,timeo=180,bg,tcp,rw" #nfs的命令
device: "192.168.1.81:/data"
-restart
#重新启动容器,此选项默认为no,值有always|onfailure|unless-stopped
restart: "no"
restart: always
restart: on-failure
restart: unless-stopped
no:是默认的重启策略,在任何情况下都不会重启容器。
always:容器总是重新启动。
on-failure:在容器非正常退出时(退出状态非0),才会重启容器。
unless-stopped:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
-hostname
#指定主机名
domainname: foo.com
hostname: foo
ipc: host
mac_address: 02:42:ac:11:65:43
-working_dir
#指定工作目录
user: postgresql #指定用户
working_dir: /code
四、使用Docker-Compose示例
- Docker Compose文件使用格式版本需要与Docker版本对应可在官网内查找
- 查找地址:https://docs.docker.com/compose/compose-file/compose-file-v2/#compose-and-docker-compatibility-matrix
(1)步骤
提前安装并启动docker(略)
******(1)创建compose目录
[root@Centos7 ~]# mkdir -p /compose-test/compose #创建compose目录
[root@Centos7 ~]# cd /compose-test/compose/
******(2)编写compose文件
[root@Centos7 compose]# vim docker-compose.yml #编写compose文件
version: '3' #docker对应的compose版本
services: #容器组
web: #镜像容器服务的标识
build: . #指定构建镜像上下文的目录,. 表示在当前目录
ports: #指定容器映射的端口
- "8080:80"
#保存退出
******(3)创建Dockerfile文件
[root@Centos7 compose]# vim Dockerfile
FROM centos:7.4 #指定基础镜像
MAINTAINER rzy #指定作者
RUN rm -rf /etc/yum.repos.d/* #RUN指定命令
COPY centos.repo /etc/yum.repos.d/ #COPY指定复制文件
RUN yum -y install httpd
RUN echo "aaaaaaaa" > /var/www/html/index.html
CMD ["/usr/sbin/httpd","-D","FOREGROUND"] #CMD容器开启后执行的命令,这个命令是把httpd放到前台运行使容器不会退出
EXPOSE 80 #指定端口
#保存退出
******(4)配置yum源,因为centos镜像的yum源是网络yum源,所以可以修改一下为本地yum源
[root@Centos7 compose]# cp /etc/yum.repos.d/centos.repo . #复制一下yum源文件
[root@Centos7 compose]# ll
总用量 12
-rw-r--r-- 1 root root 56 7月 30 13:57 centos.repo
-rw-r--r-- 1 root root 72 7月 30 13:50 docker-compose.yml
-rw-r--r-- 1 root root 220 7月 30 13:55 Dockerfile
[root@Centos7 compose]# vim centos.repo #编写yum源文件
[aaa]
name=aaa
baseurl=ftp://192.168.100.202/aaa #修改为ftp
enabled=1
gpgcheck=0
#保存退出
[root@Centos7 compose]# yum -y install vsftpd #安装ftp服务
。。。。。。
完毕!
[root@Centos7 compose]# systemctl start vsftpd
[root@Centos7 compose]# nkdir /var/ftp/aaa #创建目录
[root@Centos7 compose]# mount /dev/cdrom /var/ftp/aaa #挂载光盘
******(5)执行 docker-compose.yml 执行命令
# compose命令指定yml文件,后面可以跟SERVICE项中的服务,如web
docker-compose up
# 查看构建容器启用情况
compose命令:docker-compose ps
# 查看构建容器启用情况
docker命令:docker ps
[root@Centos7 compose]# docker-compose up -d #创建并启动,-d是放到后台
。。。。。。
WARNING: Image for service web was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating compose_web_1 ... done
[root@Centos7 compose]# docker ps #查看所有容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f7ac5df20bd4 compose_web "/usr/sbin/httpd -D …" About a minute ago Up About a minute 0.0.0.0:8080->80/tcp compose_web_1 #可以看到名称是意compose开头的
[root@Centos7 compose]# docker images #查看镜像,也是以compose开头的
REPOSITORY TAG IMAGE ID CREATED SIZE
compose_web latest b6757aa739f9 2 minutes ago 268MB
httpd latest bd29370f84ea 3 weeks ago 138MB
使用浏览器访问测试,成功访问!!
五、Docker Compose 一键部署LNMP
(1)目录结构
(2)实验步骤(手动装LNMP)
- 提前在本地搭建好vsftpd服务:
[root@Centos7 ~]# yum -y install vsftpd #安装ftp服务
。。。。。。
完毕!
[root@Centos7 ~]# systemctl start vsftpd
[root@Centos7 ~]# nkdir /var/ftp/aaa #创建目录
[root@Centos7 ~]# mount /dev/cdrom /var/ftp/aaa #挂载光盘
[root@Centos7 ~]# vim centos.repo #编写yum源文件,下面的每个服务都需要穿这个文件
[aaa]
name=aaa
baseurl=ftp://192.168.100.202/aaa #修改为ftp
enabled=1
gpgcheck=0
[root@Centos7 compose-lnmp]# tree #最终目录所需要的软件和文件
.
├── docker-compose.yml
├── mysql
│ ├── centos.repo
│ ├── cmake-2.8.6.tar.gz
│ ├── conf
│ │ └── my.cnf
│ ├── Dockerfile
│ └── mysql-5.6.36.tar.gz
├── nginx
│ ├── centos.repo
│ ├── Dockerfile
│ ├── nginx-1.12.0.tar.gz
│ └── nginx.conf
├── php
│ ├── centos.repo
│ ├── Dockerfile
│ ├── Dockerfile[root@Centos7
│ ├── php-5.5.38.tar.gz
│ └── php.ini
└── wwwroot
└── test.php
******(1)创建compose目录,以及各服务的子目录
[root@Centos7 ~]# mkdir /compose-lnmp
[root@Centos7 ~]# cd /compose-lnmp/
[root@Centos7 compose-lnmp]# mkdir nginx mysql php wwwroot
[root@Centos7 compose-lnmp]# tree
.
├── mysql
├── nginx
├── php
└── wwwroot
4 directories, 0 files
******(2)在各服务目录上传源码包
[root@Centos7 compose-lnmp]# tree
.
├── mysql
│ ├── cmake-2.8.6.tar.gz
│ └── mysql-5.6.36.tar.gz
├── nginx
│ ├── nginx-1.12.0.tar.gz
├── php
│ ├── php-5.5.38.tar.gz
└── wwwroot
5 directories, 8 files
******(3)编写Nginx的Dockerfile和nginx.conf文件
[root@Centos7 compose-lnmp]# cd nginx/
[root@Centos7 nginx]# vim Dockerfile
FROM centos:7.4
MAINTAINER rzy
RUN rm -rf /etc/yum.repos.d/*
COPY centos.repo /etc/yum.repos.d/
RUN yum install -y gcc gcc-c++ make openssl-devel pcre-devel
ADD nginx-1.12.0.tar.gz /tmp
RUN cd /tmp/nginx-1.12.0 && ./configure --prefix=/usr/local/nginx && make -j 2 && make install
RUN rm -f /usr/local/nginx/conf/nginx.conf
COPY nginx.conf /usr/local/nginx/conf
EXPOSE 80
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]
#保存退出
[root@Centos7 nginx]# vim nginx.conf
worker_processes 1;
events
worker_connections 1024;
http
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server
listen 80;
server_name localhost;
location /
root html;
index index.html index.htm;
location ~\\.php
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
error_page 500 502 503 504 /50x.html;
location = /50x.html
root html;
#保存退出
******(4)编写Mysql的Dockerfile和my.cnf文件
[root@Centos7 nginx]# cd ..
[root@Centos7 compose-lnmp]# cd mysql/
[root@Centos7 mysql]# vim Dockerfile #如果在执行compose的时候显示安装yum源文件时报错,就把本地yum源那段删除,使用自带的网络yum源安装
FROM centos:7.4
MAINTAINER rzy
RUN rm -rf /etc/RUN rm -rf /etc/yum.repos.d/*
COPY centos.repo /etc/yum.repos.d/
ADD cmake-2.8.6.tar.gz /usr/src/
ADD mysql-5.6.36.tar.gz /usr/src/
WORKDIR /usr/src/cmake-2.8.6
RUN yum -y install ncurses-devel gcc gcc-c++ make perl perl-devel autoconf && ./configure && gmake && gmake install && groupadd mysql && useradd -M -s /sbin/nologin mysql -g mysql && cd /usr/src/mysql-5.6.36/ && cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/etc -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all && make && make install && chown -R mysql:mysql /usr/local/mysql && rm -rf /etc/my.cnf && cp /usr/src/mysql-5.6.36/support-files/my-default.cnf /etc/my.cnf && /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/ && ln -s /usr/local/mysql/bin/* /usr/local/bin/
CMD ["sh","-c","mysqld_safe"]
#保存退出
[root@Centos7 mysql]# mkdir conf
[root@Centos7 mysql]# cd conf/
[root@Centos7 conf]# vim my.cnf
[mysqld]
user=mysql
port=3306
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
pid-file=/var/run/mysqld/mysqld.pid
log_error=/var/log/mysql/error.log
character_set_server = utf8
max_connections=3600
#保存退出
******(4)编写php的Dockerfile和php.ini文件
[root@Centos7 mysql]# cd ../php/
[root@Centos7 php]# vim Dockerfile
FROM centos:7.4
MAINTAINER rzy
RUN rm -rf /etc/RUN rm -rf /etc/yum.repos.d/*
COPY centos.repo /etc/yum.repos.d/
RUN yum install -y gcc gcc-c++ gd-devel libxml2-devel libcurl-devel libjpeg-devel libpng-devel openssl-devel make
ADD php-5.5.38.tar.gz /tmp/
RUN cd /tmp/php-5.5.38 && \\
./configure --prefix=/usr/local/php \\
--with-config-file-path=/usr/local/php/etc \\
--with-mysql --with-mysqli \\
--with-openssl --with-zlib --with-curl --with-gd \\
--with-jpeg-dir --with-png-dir --with-iconv \\
--enable-fpm --enable-zip --enable-mbstring && \\
make -j 4 && make install && \\
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf && \\
sed -i "s/127.0.0.1/0.0.0.0/" /usr/local/php/etc/php-fpm.conf && \\
cp ./sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm && \\
chmod +x /etc/init.d/php-fpm
COPY php.ini /usr/local/php/etc
EXPOSE 9000
CMD /etc/init.d/php-fpm start && tail -F /var/log/messages
#保存退出
[root@Centos7 php]# vim php.ini
。。。。。。太长了,复制即可,路径在F:\\源代码包\\roles安装lnmp\\php.ini
******(5)创建DockerCompose文件
[root@Centos7 php]# cd ..
[root@Centos7 compose-lnmp]# vim docker-compose.yml
version: '3'
services:
nginx:
hostname: nginx
build:
context: ./nginx
dockerfile: Dockerfile
ports:
- "80:80"
links:
- "php:php-cgi"
volumes:
- ./wwwroot:/usr/local/nginx/html
php:
hostname: php
build: ./php
links:
- mysql:mysql-db #用来链接容器的,:前面指定服务名称,后面是别名
volumes:
- ./wwwroot:/usr/local/nginx/html
mysql:
hostname: mysql
build: ./mysql
command: --default-authentication-plugin=mysql_native_password #这行代码解决无法访问的问题,如果这行报错,就先把这行注释
ports:
- "3306:3306"
#volumes:
# #- ./mysql/conf:/etc/mysql/conf.d
# #- ./mysql/data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_USER: user
MYSQL_PASSWORD: user123
#保存退出
******(6)创建项目
[root@Centos7 compose-lnmp]# cd wwwroot/
[root@Centos7 wwwroot]# vim test.php
<?php phpinfo()?>
#保存退出
******(7)执行docker-compose一键部署lnmp
[root@Centos7 compose-lnmp]# docker-compose up -d
。。。。。。
#等待部署完成
[root@Centos7 compose-lnmp]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4f07585e7670 compose-lnmp_nginx "/usr/local/nginx/sb…" 9 seconds ago Up 5 seconds 0.0.0.0:80->80/tcp compose-lnmp_nginx_1
051d965f5c74 compose-lnmp_php "/bin/sh -c '/etc/in…" 10 seconds ago Up 8 seconds 9000/tcp compose-lnmp_php_1
7fe2780aaf48 compose-lnmp_mysql "sh -c mysqld_safe" 10 seconds ago Up 9 seconds 0.0.0.0:3306->3306/tcp compose-lnmp_mysql_1
[root@Centos7 compose-lnmp]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
compose-lnmp_nginx latest 746296c1205d 4 minutes ago 331MB
compose-lnmp_php latest 701308588742 5 minutes ago 825MB
compose-lnmp_mysql latest ff67075ea79e 11 minutes ago 4.16GB
httpd latest bd29370f84ea 3 weeks ago 138MB
centos 7.4 196e0ce0c9fb 3 years ago 197MB
可以访问静态页面
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3Xjqwb51-1639386266677)(F:\\个人文档\\markdown图片\\image-20210730182855941.png)]
(3)直接下载镜像部署LNMP
拉取镜像直接部署,这个比上面的方便的多
https://blog.csdn.net/weixin_44848382/article/details/106995188?
******(1)下载镜像
[root@Centos7 ~]# docker pull nginx
[root@Centos7 ~]# docker pull mysql:5.7
[root@Centos7 ~]# docker pull cytopia/php-fpm-5.6
[root@Centos7 lnmp]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 8cf625070931 8 days ago 448MB
以上是关于Docker-Compose概述的主要内容,如果未能解决你的问题,请参考以下文章