一.安装Docker(CentOS7)
1.配置yum仓库
[root@localhost ~]# wget -P /etc/yum.repos.d/ https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
[root@localhost ~]# yum clean all
[root@localhost ~]# yum makecache
2.安装docker
[root@localhost ~]# yum -y install docker
[root@localhost ~]# systemctl start docker
[root@localhost ~]# systemctl enable docker
[root@localhost ~]# docker version
Client:
Version: 1.13.1
API version: 1.26
Package version: docker-1.13.1-204.git0be3e21.el7.x86_64
Go version: go1.10.3
Git commit: 0be3e21/1.13.1
Built: Fri Mar 19 13:57:09 2021
OS/Arch: linux/amd64
Server:
Version: 1.13.1
API version: 1.26 (minimum version 1.12)
Package version: docker-1.13.1-204.git0be3e21.el7.x86_64
Go version: go1.10.3
Git commit: 0be3e21/1.13.1
Built: Fri Mar 19 13:57:09 2021
OS/Arch: linux/amd64
Experimental: false
二、Dockfile构建LNMP环境
1.构建基础镜像
[root@localhost ~]# mkdir centos
[root@localhost ~]# cd centos
[root@localhost centos]# vi Dockerfile
[root@localhost centos]# cat Dockerfile
FROM centos:centos7.9.2009
RUN yum -y install wget epel-release \
&& mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak \
&& wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/Centos-7.repo \
&& wget -P /etc/yum.repos.d/ http://mirrors.163.com/.help/CentOS7-Base-163.repo \
&& yum clean all && yum makecache
RUN yum -y install gcc gcc-c++ glibc make autoconf openssl openssl-devel
[root@localhost centos]# docker build -t centos:v1 .
[root@localhost centos]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos v1 b5883eacef75 4 minutes ago 895 MB
docker.io/centos centos7.9.2009 8652b9f0cb4c 4 months ago 204 MB
2.构建mysql镜像
[root@localhost mysql]# tree .
.
├── business.sql
├── Dockerfile
├── galera-4-26.4.7-1.el7.centos.x86_64.rpm
├── MariaDB-client-10.5.9-1.el7.centos.x86_64.rpm
├── MariaDB-common-10.5.9-1.el7.centos.x86_64.rpm
├── MariaDB-compat-10.5.9-1.el7.centos.x86_64.rpm
├── MariaDB-server-10.5.9-1.el7.centos.x86_64.rpm
├── server.cnf
└── setup.sh
[root@localhost mysql]# cat Dockerfile
FROM centos:centos7.9.2009
COPY galera-4-26.4.7-1.el7.centos.x86_64.rpm /root/galera-4-26.4.7-1.el7.centos.x86_64.rpm
COPY MariaDB-client-10.5.9-1.el7.centos.x86_64.rpm /root/MariaDB-client-10.5.9-1.el7.centos.x86_64.rpm
COPY MariaDB-common-10.5.9-1.el7.centos.x86_64.rpm /root/MariaDB-common-10.5.9-1.el7.centos.x86_64.rpm
COPY MariaDB-compat-10.5.9-1.el7.centos.x86_64.rpm /root/MariaDB-compat-10.5.9-1.el7.centos.x86_64.rpm
COPY MariaDB-server-10.5.9-1.el7.centos.x86_64.rpm /root/MariaDB-server-10.5.9-1.el7.centos.x86_64.rpm
WORKDIR /root
RUN yum -y remove mysql-libs
RUN yum -y install *.rpm
ADD business.sql /root/business.sql
ADD server.cnf /etc/my.cnf.d/server.conf
ADD setup.sh /root/setup.sh
RUN yum clean all
RUN chmod +x /root/setup.sh
EXPOSE 3306
CMD ["/root/setup.sh"]
[root@localhost mysql]# cat business.sql
CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8;
USE mysql;
CREATE USER 'root'@'%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
FLUSH PRIVILEGES;
[root@localhost mysql]# cat server.cnf
[mysqld]
bind-address=0.0.0.0
console=1
general_log=1
general_log_file=/dev/stdout
collation-server=utf8_unicode_ci
character-set-server=utf8
[root@localhost mysql]# cat setup.sh
#!/bin/sh
chown -R mysql:mysql /var/lib/mysql
mysql_install_db --user=mysql > /dev/null
mysqld_safe --user=mysql &
sleep 5
mysql < /root/business.sql
sleep 5
ps -wef | grep mysql | grep -v grep | awk '{print $2}' | xargs kill -9
mysqld_safe --user=mysql
3.构建php镜像
[root@localhost php]# tree .
.
├── Dockerfile
├── libmcrypt-2.5.8-13.el7.x86_64.rpm
├── php-8.0.3.tar.gz
└── php-fpm.conf.default
[root@localhost php]# cat Dockerfile
FROM centos:v1
COPY libmcrypt-2.5.8-13.el7.x86_64.rpm /root/libmcrypt-2.5.8-13.el7.x86_64.rpm
WORKDIR /root
RUN yum -y install *.rpm
ADD php-8.0.3.tar.gz /usr/local/src
RUN yum -y install libxml2 libxml2-devel bzip2 bzip2-devel libjpeg-turbo libjpeg-turbo-devel libpng libpng-devel freetype freetype-devel zlib zlib-devel libcurl libcurl-devel sqlite sqlite-devel oniguruma oniguruma-devel
WORKDIR /usr/local/src/php-8.0.3
RUN ./configure --prefix=/usr/local/php --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-mysql=mysqlnd --with-openssl --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-mcrypt --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --enable-fpm --with-config-file-path=/usr/local/php/etc --with-bz2 --with-gd && make && make install
#COPY php.ini-production /usr/local/php/etc/php.ini
COPY php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
RUN mv /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
RUN useradd -M -s /sbin/nologin php
RUN sed -i -e 's@;pid = run/php-fpm.pid@pid = run/php-fpm.pid@g' -e 's@;daemonize = yes@daemonize = no@g' /usr/local/php/etc/php-fpm.conf
RUN sed -i -e 's@nobody@php@g' -e 's@listen = 127.0.0.1:9000@listen = 0.0.0.0:9000@g' /usr/local/php/etc/php-fpm.d/www.conf
EXPOSE 9000
CMD ["/usr/local/php/sbin/php-fpm"]
4.构建nginx镜像
[root@localhost nginx]# tree .
.
├── Dockerfile
├── nginx-1.18.0.tar.gz
├── nginx.conf
└── www.conf
[root@localhost nginx]# cat Dockerfile
FROM centos:v1
RUN useradd -M -s /sbin/nologin www
ADD nginx-1.18.0.tar.gz /usr/local/src
RUN yum -y install libxslt-devel gd gd-devel GeoIP GeoIP-devel pcre pcre-devel libxml2 libxml2-devel libxslt-devel
WORKDIR /usr/local/src/nginx-1.18.0
RUN ./configure --user=www --group=www --prefix=/usr/local/nginx --with-file-aio --with-ipv6 --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_image_filter_module --with-http_geoip_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_stub_status_module && make && make install
COPY nginx.conf /usr/local/nginx/conf/nginx.conf
RUN mkdir /usr/local/nginx/conf/conf.d
COPY www.conf /usr/local/nginx/conf/conf.d/www.conf
EXPOSE 80
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]
[root@localhost nginx]# cat nginx.conf
user www;
worker_processes auto;
error_log logs/error.log error;
pid logs/nginx.pid;
worker_rlimit_nofile 30000;
events {
worker_connections 1024;
use epoll;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
sendfile on;
tcp_nopush on;
underscores_in_headers on;
keepalive_timeout 65;
send_timeout 60;
types_hash_max_size 2048;
gzip on;
include /usr/local/nginx/conf/conf.d/*.conf;
server {
listen 80;
server_name localhost;
}
}
[root@localhost nginx]# cat www.conf
server {
listen 80;
root /usr/local/nginx/html;
index index.htm index.html index.php;
location ~ \.php$ {
root /usr/local/nginx/html;
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
5.构建LNMP环境
(1)先启动mysql容器, 将server.cnf配置文件和数据目录挂载到容器内部
(2)再启动php容器,使用了-v进行映射(如果这里不进行映射,那么php的程序会启动,但是遇到php结尾的文件将不会解析,出现file not found的错误),并且使用了–link与mysql关联,这样php容器就连接mysql数据库了
(3)最后启动nginx容器,同样使用-v 进行映射,将网站目录映射到宿主机,通过–link与php关联
[root@localhost ~]# docker run -d --name mysql -v /root/mysql/server.cnf:/etc/my.cnf.d/server.cnf -v /data/mysql:/var/lib/mysql -p 3306:3306 mysql:v1
[root@localhost ~]# docker run -d --name php -v /www:/usr/local/nginx/html --link=mysql:mysql php:v1
[root@localhost ~]# docker run -d --name nginx -p 80:80 -v /www:/usr/local/nginx/html --link=php:php nginx:v1
三、Docker图形化工具
Portainer ,Shipyard
1.Portainer
[root@localhost ~]# docker pull 6053537/portainer-ce #汉化版
[root@localhost ~]# docker run -itd --name portainer -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock 6053537/portainer-ce