【docker】構建ssh+nginx+fpm鏡像並經過supervisor實現開機自啓動

寫在前面php

docker 容器編排可能更合適的是 Docker Compose 和 Kubernetes。平常開發,每每也不想要這麼複雜,就丟一個容器裏得了。mysql

建立鏡像nginx

建立鏡像有兩種方式
1.從已經建立的容器中更新鏡像
2.使用 Dockerfile 指令來建立一個新的鏡像c++

這裏咱們選用第一種方式,並選用 centos7 官方鏡像做爲初始鏡像。web

拉取初始鏡像(Centos7)sql

docker pull centos:7

啓動容器docker

docker run -itd centos:7 /bin/bash
  • -i 表示交互示操做
  • -t 表示打開一個終端
  • -d 後臺運行
  • centos:7 是咱們鏡像名稱
  • /bin/bash 指定一個交互窗口,啓動容器一個要有一個窗口,不然容器會自動關閉

進入容器centos

docker exec -it ab3d851192b2 /bin/bash
  • ab3d851192b2 是咱們剛纔啓動的 CONTAINER ID

開始安裝軟件瀏覽器

安裝軟件以前咱們先更新一下系統bash

yum update -y

安裝一些經常使用的工具,下面用的着

yum -y install wget bzip2 gcc gcc-c++  pcre pcre-devel zlib zlib-devel openssl openssl-devel libxml2 libxml2-devel curl curl-devel

安裝 ssh (服務端和客戶端)

yum -y install passwd openssh-server openssh-clients

修改配置文件

vi /etc/ssh/sshd_config

找到 PermitRootLogin yes 把前面的註釋符號 # 去掉,容許 root 用戶登陸,由於是平常開發用,就用root吧,能夠省不少事

爲 root 用戶設置一個密碼

passwd root

測試一下服務能不能正常啓動

/usr/sbin/sshd -D

哦,報錯了

Could not load host key: /etc/ssh/ssh_host_rsa_key
Could not load host key: /etc/ssh/ssh_host_ecdsa_key
Could not load host key: /etc/ssh/ssh_host_ed25519_key
sshd: no hostkeys available -- exiting.

提示缺乏可用的 hotskeys,不要緊,建立它們

ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key

再試下,就能夠了

安裝 nginx

建立一個程序用戶

useradd nginx

咱們用源碼安裝的方式,下載源碼

cd /usr/local/src
wget  http://nginx.org/download/nginx-1.18.0.tar.gz

tar -xvf nginx-1.18.0.tar.gz

cd nginx-1.18.0

./configure --prefix=/usr/local/nginx --with-http_ssl_module 

make && make install

修改環境變量

echo 'export PATH=/usr/local/nginx/sbin:$PATH' >> /etc/profile 

source /etc/profile

修改 nginx 配置

cd /usr/local/nginx/conf

mkdir conf.d​ # 建立這個目錄,用來放咱們的配置文件

vi nginx.conf

修改以下三處
image.png

user nginx;
daemon off;
include /usr/local/nginx/conf/conf.d/*.conf;

安裝 php

cd /usr/local/src
wget https://www.php.net/distributions/php-7.3.18.tar.bz2

tar -xvf php-7.3.18.tar.bz2

cd php-7.3.18

./configure --prefix=/usr/local/php --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --enable-inline-optimization --enable-shared --enable-soap --enable-pdo --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-libzip --with-zlib --with-openssl --with-curl --enable-mbstring

make && make install

修改環境變量

echo 'export PATH=/usr/local/php/bin:$PATH' >> /etc/profile 

source /etc/profile

修改 php 配置

cd /usr/local/php/etc
cp php-fpm.conf.default php-fpm.conf
vi php-fpm.conf

# 找到下面這行,把前面的註釋打開
pid = run/php-fpm.pid

cd /usr/local/php/etc/php-fpm.d/
cp www.conf.default www.conf

安裝 supervisor

直接用 yum 安裝的方式

yum install -y epel-release
yum install -y supervisor

修改配置文件

vi /etc/supervisord.conf

# 以下幾行註釋打開,這了是爲了做 web 的方式管理 supervisor,修改port爲 port=0.0.0.0:9001 ,username 和 password 修改成你本身的
[inet_http_server]         ; inet (TCP) server disabled by default
port=0.0.0.0:9001        ; (ip_address:port specifier, *:port for all iface)
username=user              ; (default is no username (open server))
password=123               ; (default is no password (open server))

# 找到 nodaemon ,改成 true (由於 docker 自己就是個服務,裏面不容許再說其餘常駐服務,全部的應用同理)
nodaemon=true

配置 sshd 啓動服務

cd /etc/supervisord.d/

vi sshd.ini

# 填加以下內容,保存就好
[program:sshd]
command=/usr/sbin/sshd -D

配置nginx + fpm 啓動服務

vi webserver.ini

# 填加以下內容,保存
[program:nginx]
command=/usr/local/nginx/sbin/nginx
stopsignal=QUIT

[program:php-fpm]
command=/usr/local/php/sbin/php-fpm  --nodaemonize
stopsignal=QUIT

提交鏡像

到這裏咱們鏡像就更新徹底了,咱們把這個容器做爲鏡像保存

docker commit -m="nginx+fpm" -a="actors315" ab3d851192b2 actors315/webdev:v1
  • -m 提交的描述信息
  • -a 做者
  • ab3d851192b2 咱們的 CONTAINER ID
  • actors315/nginx-fpm:v1 鏡像名稱
docker images

會發現咱們的鏡像已經建好了

使用鏡像

docker run --name lingyin-dev -p 9001:9001 -p 2222:22 -p 80:80 -p 443:443 -v F:\www:/data/www -itd actors315/webdev:v1 /usr/bin/supervisord
  • --name 指定容器名稱
  • -p 本機和容器端口映射,能夠有多個
  • -v 掛載目錄,能夠有多個

查看一下效果

docker exec -it /bin/bash
ps -ef|grep sshd
ps -ef|grep nginx
ps -ef|grep php-fpm

瀏覽器訪問 http://127.0.0.1:9001/ 也能夠看到服務都正常啓動了

訪問 http://127.0.0.1/ 熟悉的 nginx 歡迎頁面。

到這裏就大功告成了。

若是你想共享鏡像,也能夠提交到公共倉庫

docker push actors315/webdev:v1
相關文章
相關標籤/搜索