docker compose是用來配置和運行多容器服務的工具(適用于單機惫叛,集群請使用k8s
)常空,通過docker-compose命令可輕松對多個容器進行如下操作:
(1)啟動篙螟,停止和重建服務
(2)查看正在運行的服務的狀態(tài)
(3)通過流輸出正在運行的服務的日志
(4)對某個服務執(zhí)行命令
安裝docker compose, 官方文檔:https://docs.docker.com/compose/install/
# 下載docker compose(Linux版本)
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 增加執(zhí)行權限
sudo chmod +x /usr/local/bin/docker-compose
# 成功檢查
docker-compose -v
執(zhí)行docker compose準備步驟
1系任、準備好需要修改的配置文件(比如nginx.conf等)乓旗,如果需要自己構建Dockerfile文件坪郭,也請準備好Dockerfile
2奢方、在 docker-compose.yml 中定義好各個容器的相關配置
3颁督、執(zhí)行docker-compose up -d命令单雾,docker compose會幫你完成一整套拉取鏡像/構建鏡像赚哗,啟動容器等操作她紫。
docker-compose.yml是docker compose用來配置容器應用的配置文件,默認就叫docker-compose.yml屿储,最好是放在當前操作的目錄下贿讹,當然也可以單獨指定文件路徑。
docker compose的常用命令
#啟動并后臺運行所有的服務
docker-compose up -d
#列出項目中目前的所有容器
docker-compose ps
#停止某個服務
docker-compose stop 服務名
#啟動某個服務
docker-compose start 服務名
#停止并刪除容器够掠、網(wǎng)絡民褂、卷、鏡像
docker-compose down
docker compose 搭建lnmp開發(fā)環(huán)境
nginx 準備配置文件
# nginx掛載目錄
mkdir ~/lnmp && cd ~/lnmp
mkdir nginx && cd nginx && mkdir conf && cd conf
# nginx默認配置文件
vi default.conf
nginx默認配置文件內容如下:
server {
listen 80;
root /usr/share/nginx/html;
index index.html index.htm index.php;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location / {
index index.html index.htm index.php ;
try_files $uri $uri/ /index.php?$query_string;
autoindex on;
}
location ~ \.php$ {
#php73是容器命名
fastcgi_pass php73:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name;
}
}
在docker-compose.yml文件中定義好我們需要的nginx疯潭,php和mysql相關的配置赊堪,如下:
cd ~/lnmp
vi docker-compose.yml
#定義docker compose yml版本
version: "3"
#定義我們的服務對象
services:
#自定義的服務名稱
nginx:
#鏡像名稱,默認拉取本地鏡像竖哩,沒有的話從遠程獲取
image: nginx:latest
#自定義容器的名稱
container_name: c_nginx
#將宿主機的80端口映射到容器的80端口
ports:
- "80:80"
#將宿主機的~/lnmp/www目錄和容器的/usr/share/nginx/html目錄進行綁定哭廉,并設置rw權限
#將宿主機的~/lnmp/nginx/conf/default.conf和容器的/etc/nginx/conf.d/default.conf進行綁定
volumes:
- ~/lnmp/www/:/usr/share/nginx/html/:rw
- ~/lnmp/nginx/conf/default.conf:/etc/nginx/conf.d/default.conf
#設置環(huán)境變量,當前的時區(qū)
environment:
TZ: "Asia/Shanghai"
#容器是否隨docker服務啟動重啟
restart: always
#容器加入名為lnmp的網(wǎng)絡
networks:
- lnmp
php:
image: php:7.3.29-fpm
container_name: php73
volumes:
- ~/lnmp/www/:/var/www/html/:rw
restart: always
cap_add:
- SYS_PTRACE
networks:
- lnmp
mysql:
image: mysql:5.6
container_name: mysql56
ports:
- "3306:3306"
volumes:
- ~/lnmp/mysql/data:/var/lib/mysql/:rw
restart: always
networks:
- lnmp
environment:
MYSQL_ROOT_PASSWORD: "123456"
TZ: "Asia/Shanghai"
networks:
#創(chuàng)建了一個自定義的網(wǎng)絡叫做lnmp
lnmp:
執(zhí)行docker-compose up -d命令相叁,等命令執(zhí)行完遵绰,我們的lnmp安裝完成
下面,我們來測試下安裝是否正常增淹,在~/lnmp/www/下新建一個index.html文件街立,并輸出welcome to nginx!!
在~lnmp/www/目錄下新建test.php文件,文件里面寫上phpinfo函數(shù)埠通,測試下php配置是否正常,訪問如下
在~lnmp/www/目錄下新建mysql.php文件逛犹,文件里面寫上連接mysql的代碼端辱,測試下mysql配置是否正常
需要先進入php容器安裝mysqli pdo等模塊
#宿主機
docker exec -it php73 /bin/bash
#php容器
docker-php-ext-install pdo pdo_mysql mysqli
docker-php-ext-enable pdo pdo_mysql mysqli
exit
#宿主機重啟服務
docker-compose restart
<?php
// 創(chuàng)建連接
$conn = new mysqli('mysql56','root','123456');
if($conn->connect_error){
die("連接失敗,錯誤:" . $conn->connect_error);
}
echo "connect success";
<?php
try {
$pdo = new PDO("mysql:host=mysql56","root","123456");
$pdo = null;
print "連接成功";
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}