国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

使用Docker 一鍵部署 LNMP+Redis 環(huán)境

wangshijun / 1206人閱讀

摘要:使用部署環(huán)境簡(jiǎn)介是一個(gè)開源的應(yīng)用容器引擎,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個(gè)可移植的容器中,然后發(fā)布到任何流行的機(jī)器上,也可以實(shí)現(xiàn)虛擬化。命令是編寫之后使用的。后者會(huì)自動(dòng)繼承中的服務(wù)及相關(guān)的環(huán)境變量設(shè)置網(wǎng)絡(luò)模式。

使用Docker 部署 LNMP+Redis 環(huán)境 Docker 簡(jiǎn)介

Docker 是一個(gè)開源的應(yīng)用容器引擎,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個(gè)可移植的容器中,然后發(fā)布到任何流行的 Linux 機(jī)器上,也可以實(shí)現(xiàn)虛擬化。容器是完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口。推薦內(nèi)核版本3.8及以上

為什么使用Docker

加速本地的開發(fā)和構(gòu)建流程,容器可以在開發(fā)環(huán)境構(gòu)建,然后輕松地提交到測(cè)試環(huán)境,并最終進(jìn)入生產(chǎn)環(huán)境

能夠在讓獨(dú)立的服務(wù)或應(yīng)用程序在不同的環(huán)境中得到相同的運(yùn)行結(jié)果

創(chuàng)建隔離的環(huán)境來進(jìn)行測(cè)試

高性能、超大規(guī)劃的宿主機(jī)部署

從頭編譯或者擴(kuò)展現(xiàn)有的OpenShift或Cloud Foundry平臺(tái)來搭建自己的PaaS環(huán)境

目錄

安裝Docker

目錄結(jié)構(gòu)

快速使用

進(jìn)入容器內(nèi)部

PHP擴(kuò)展安裝

Composer安裝

常見問題處理

常用命令

Dockerfile語(yǔ)法

docker-compose語(yǔ)法說明

項(xiàng)目源碼地址:GitHub
安裝Docker

windows 安裝

參考

mac

docker toolbox參考

linux

# 下載安裝
curl -sSL https://get.docker.com/ | sh

# 設(shè)置開機(jī)自啟
sudo systemctl enable docker.service

sudo service docker start|restart|stop

# 安裝docker-compose
curl -L https://github.com/docker/compose/releases/download/1.23.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
目錄結(jié)構(gòu)
docker_lnmp
├── v2
├── mysql
│   └── Dockerfile
│    └── my.cnf
├── nginx
│   ├── Dockerfile
│   ├── nginx.conf
│   ├── log
│   │   └── error.log
│   └── www
│       ├── index.html
│       ├── index.php
│       ├── db.php
│       └── redis.php
├── php
│   ├── Dockerfile
│   ├── www.conf
│   ├── php-fpm.conf
│   ├── php.ini
│   └── log
│       └── php-fpm.log
└── redis
    └── Dockerfile
    └── redis.conf
創(chuàng)建鏡像與安裝
直接使用docker-compose一鍵制作鏡像并啟動(dòng)容器

版本一

該版本是通過拉取純凈的CentOS鏡像,通過Dockerfile相關(guān)命令進(jìn)行源碼編譯安裝各個(gè)服務(wù)。所以該方式很方便定制自己需要的鏡像,但是占用空間大且構(gòu)建慢。

git clone https://github.com/voocel/docker-lnmp.git
cd docker-lnmp
docker-compose up -d

版本二(推薦)

git clone https://github.com/voocel/docker-lnmp.git
cd docker-lnmp/v2
chmod 777 ./redis/redis.log
chmod -R 777 ./redis/data
docker-compose up -d

該版本是通過拉取官方已經(jīng)制作好的各個(gè)服務(wù)的鏡像,再通過Dockerfile相關(guān)命令根據(jù)自身需求做相應(yīng)的調(diào)整。所以該方式構(gòu)建迅速使用方便,因?yàn)槭腔贏lpine Linux所以占用空間很小。

測(cè)試

使用docker ps查看容器啟動(dòng)狀態(tài),若全部正常啟動(dòng)了則
通過訪問127.0.0.1、127.0.0.1/index.php、127.0.0.1/db.php、127.0.0.1/redis.php 即可完成測(cè)試
(若想使用https則請(qǐng)修改nginx下的dockerfile,和nginx.conf按提示去掉注釋即可,靈需要在ssl文件夾中加入自己的證書文件,本項(xiàng)目自帶的是空的,需要自己替換,保持文件名一致)

進(jìn)入容器內(nèi)部

使用 docker exec

docker exec -it ngixn /bin/sh

使用nsenter命令

# cd /tmp; curl https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz | tar -zxf-; cd util-linux-2.24;
# ./configure --without-ncurses
# make nsenter && sudo cp nsenter /usr/local/bin

為了連接到容器,你還需要找到容器的第一個(gè)進(jìn)程的 PID,可以通過下面的命令獲取再執(zhí)行。

PID=$(docker inspect --format "{{ .State.Pid }}" container_id)
# nsenter --target $PID --mount --uts --ipc --net --pid
PHP擴(kuò)展安裝

安裝PHP官方源碼包里的擴(kuò)展(如:同時(shí)安裝pdo_mysql mysqli pcntl gd四個(gè)個(gè)擴(kuò)展)

在php的Dockerfile中加入以下命令

RUN apk add libpng-dev 
    && docker-php-ext-install pdo_mysql mysqli pcntl gd 

注:因?yàn)樵撶R像缺少gd庫(kù)所需的libpng-dev包,所以需要先下載這個(gè)包

PECL 擴(kuò)展安裝

# 安裝擴(kuò)展
RUN pecl install memcached-2.2.0 
    # 啟用擴(kuò)展
    && docker-php-ext-enable memcached 

通過下載擴(kuò)展源碼,編譯安裝的方式安裝

# 安裝Redis和swoole擴(kuò)展
RUN cd ~ 
    && wget https://github.com/phpredis/phpredis/archive/4.2.0.tar.gz 
    && tar -zxvf 4.2.0.tar.gz 
    && mkdir -p /usr/src/php/ext 
    && mv phpredis-4.2.0 /usr/src/php/ext/redis 
    && docker-php-ext-install redis 

    && apk add libstdc++
    && cd ~ 
    && wget https://github.com/swoole/swoole-src/archive/v4.2.12.tar.gz 
    && tar -zxvf v4.2.12.tar.gz 
    && mkdir -p /usr/src/php/ext 
    && mv swoole-src-4.2.12 /usr/src/php/ext/swoole 
    && docker-php-ext-install swoole 

注:因?yàn)樵撶R像需要先安裝swoole依賴的libstdc++,否則安裝成功后無法正常加載swoole擴(kuò)展

Composer安裝

在Dockerfile中加入

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer 
常見問題處理

redis啟動(dòng)失敗問題

在v2版本中redis的啟動(dòng)用戶為redis不是root,所以在宿主機(jī)中掛載的./redis/redis.log和./redis/data需要有寫入權(quán)限。

   chmod 777 ./redis/redis.log
   chmod 777 ./redis/data

MYSQL連接失敗問題

在v2版本中是最新的MySQL8,而該版本的密碼認(rèn)證方式為Caching_sha2_password,而低版本的php和mysql可視化工具可能不支持,可通過phpinfo里的mysqlnd的Loaded plugins查看是否支持該認(rèn)證方式,否則需要修改為原來的認(rèn)證方式mysql_native_password:

    select user,host,plugin,authentication_string from mysql.user;
    ALTER USER "root"@"%" IDENTIFIED WITH mysql_native_password BY "123456";
    FLUSH PRIVILEGES;

注意掛載目錄的權(quán)限問題,不然容器成功啟動(dòng)幾秒后立刻關(guān)閉,例:以下/data/run/mysql 目錄沒權(quán)限的情況下就會(huì)出現(xiàn)剛才那種情況

docker run --name mysql57 -d -p 3306:3306 -v /data/mysql:/var/lib/mysql -v /data/logs/mysql:/var/log/mysql -v /data/run/mysql:/var/run/mysqld -e MYSQL_ROOT_PASSWORD=123456 -it centos/mysql:v5.7

需要注意php.ini 中的目錄對(duì)應(yīng) mysql 的配置的目錄需要掛載才能獲取文件內(nèi)容,不然php連接mysql失敗

# php.ini
mysql.default_socket = /data/run/mysql/mysqld.sock
mysqli.default_socket = /data/run/mysql/mysqld.sock
pdo_mysql.default_socket = /data/run/mysql/mysqld.sock

# mysqld.cnf
pid-file       = /var/run/mysqld/mysqld.pid
socket         = /var/run/mysqld/mysqld.sock

使用php連接不上redis

# 錯(cuò)誤的
$redis = new Redis;
$rs = $redis->connect("127.0.0.1", 6379);

php連接不上,查看錯(cuò)誤日志

PHP Fatal error:  Uncaught RedisException: Redis server went away in /www/index.php:7

考慮到docker 之間的通信應(yīng)該不可以用127.0.0.1 應(yīng)該使用容器里面的ip,所以查看redis 容器的ip

[root@localhost docker]# docker ps
CONTAINER ID        IMAGE                                COMMAND                  CREATED             STATUS              PORTS                                      NAMES
b5f7dcecff4c        docker_nginx                         "/usr/sbin/nginx -..."   4 seconds ago       Up 3 seconds        0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   nginx
60fd2df36d0e        docker_php                           "/usr/local/php/sb..."   7 seconds ago       Up 5 seconds        9000/tcp                                   php
7c7df6f8eb91        hub.c.163.com/library/mysql:latest   "docker-entrypoint..."   12 seconds ago      Up 11 seconds       3306/tcp                                   mysql
a0ebd39f0f64        docker_redis                         "usr/local/redis/s..."   13 seconds ago      Up 12 seconds       6379/tcp                                   redis

注意測(cè)試的時(shí)候連接地址需要容器的ip或者容器名names,比如redis、mysql.
例如nginx配置php文件解析 fastcgi_pass php:9000;
例如php連接redis $redis = new Redis;$res = $redis->connect("redis", 6379);

因?yàn)槿萜鱥p是動(dòng)態(tài)的,重啟之后就會(huì)變化,所以可以創(chuàng)建靜態(tài)ip

第一步:創(chuàng)建自定義網(wǎng)絡(luò)

#備注:這里選取了172.172.0.0網(wǎng)段,也可以指定其他任意空閑的網(wǎng)段
docker network create --subnet=172.171.0.0/16 docker-at
docker run --name redis326 --net docker-at --ip 172.171.0.20 -d -p 6379:6379  -v /data:/data -it centos/redis:v3.2.6

連接redis 就可以配置對(duì)應(yīng)的ip地址了,連接成功

$redis = new Redis;
$rs = $redis->connect("172.171.0.20", 6379);

另外還有種可能phpredis連接不上redis,需要把redis.conf配置略作修改。

bind 127.0.0.1
改為:
bind 0.0.0.0

啟動(dòng)docker web服務(wù)時(shí) 虛擬機(jī)端口轉(zhuǎn)發(fā) 外部無法訪問 一般出現(xiàn)在yum update的時(shí)候(WARNING: IPv4 forwarding is disabled. Networking will not work.)或者宿主機(jī)可以訪問,但外部無法訪問

vi /etc/sysctl.conf
或者
vi /usr/lib/sysctl.d/00-system.conf
添加如下代碼:
    net.ipv4.ip_forward=1

重啟network服務(wù)
systemctl restart network

查看是否修改成功
sysctl net.ipv4.ip_forward

如果返回為"net.ipv4.ip_forward = 1"則表示成功了

如果使用最新的MySQL8無法正常連接,由于最新版本的密碼加密方式改變,導(dǎo)致無法遠(yuǎn)程連接。

# 修改密碼加密方式
ALTER USER "root"@"%" IDENTIFIED WITH mysql_native_password BY "123456";
常用命令

docker start 容器名(容器ID也可以)

docker stop 容器名(容器ID也可以)

docker run 命令加 -d 參數(shù),docker 會(huì)將容器放到后臺(tái)運(yùn)行

docker ps 正在運(yùn)行的容器

docker logs --tail 10 -tf 容器名 查看容器的日志文件,加-t是加上時(shí)間戳,f是跟蹤某個(gè)容器的最新日志而不必讀整個(gè)日志文件

docker top 容器名 查看容器內(nèi)部運(yùn)行的進(jìn)程

docker exec -d 容器名 touch /etc/new_config_file 通過后臺(tái)命令創(chuàng)建一個(gè)空文件

docker run --restart=always --name 容器名 -d ubuntu /bin/sh -c "while true;do echo hello world; sleep 1; done" 無論退出代碼是什么,docker都會(huì)自動(dòng)重啟容器,可以設(shè)置 --restart=on-failure:5 自動(dòng)重啟的次數(shù)

docker inspect 容器名 對(duì)容器進(jìn)行詳細(xì)的檢查,可以加 --format="{(.State.Running)}" 來獲取指定的信息

docker rm 容器ID 刪除容器,注,運(yùn)行中的容器無法刪除

docker rm $(docker ps -aq) 刪除所有容器

docker rmi $(docker images -aq) 刪除所有鏡像

docker images 列出鏡像

docker pull 鏡像名:標(biāo)簽 拉鏡像

docker search 查找docker Hub 上公共的可用鏡像

docker build -t="AT/web_server:v1" 命令后面可以直接加上github倉(cāng)庫(kù)的要目錄下存在的Dockerfile文件。 命令是編寫Dockerfile 之后使用的。-t選項(xiàng)為新鏡像設(shè)置了倉(cāng)庫(kù)和名稱:標(biāo)簽

docker login 登陸到Docker Hub,個(gè)人認(rèn)證信息將會(huì)保存到$HOME/.dockercfg,

docker commit -m="comment " --author="AT" 容器ID 鏡像的用戶名/倉(cāng)庫(kù)名:標(biāo)簽 不推薦這種方法,推薦dockerfile

docker history 鏡像ID 深入探求鏡像是如何構(gòu)建出來的

docker port 鏡像ID 端口 查看映射情況的容器的ID和容器的端口號(hào),假設(shè)查詢80端口對(duì)應(yīng)的映射的端口

run 運(yùn)行一個(gè)容器, -p 8080:80 將容器內(nèi)的80端口映射到docker宿主機(jī)的某一特定端口,將容器的80端口綁定到宿主機(jī)的8080端口,另 127.0.0.1:80:80 是將容器的80端口綁定到宿主機(jī)這個(gè)IP的80端口上,-P 是將容器內(nèi)的80端口對(duì)本地的宿主機(jī)公開

http://docs.docker.com/refere... 查看更多的命令

docker push 鏡像名 將鏡像推送到 Docker Hub

docker rmi 鏡像名 刪除鏡像

docker attach 容器ID 進(jìn)入容器

docker network create --subnet=172.171.0.0/16 docker-at 選取172.172.0.0網(wǎng)段

docker build 就可以加 -ip指定容器ip 172.171.0.10 了

刪除所有容器和鏡像的命令

docker rm `docker ps -a |awk "{print $1}" | grep [0-9a-z]` 刪除停止的容器
docker rmi $(docker images | awk "/^/ { print $3 }")
Dockerfile語(yǔ)法

MAINTAINER 標(biāo)識(shí)鏡像的作者和聯(lián)系方式

EXPOSE 可以指定多個(gè)EXPOSE向外部公開多個(gè)端口,可以幫助多個(gè)容器鏈接

FROM 指令指定一個(gè)已經(jīng)存在的鏡像

#號(hào)代表注釋

RUN 運(yùn)行命令,會(huì)在shell 里使用命令包裝器 /bin/sh -c 來執(zhí)行。如果是在一個(gè)不支持shell 的平臺(tái)上運(yùn)行或者不希望在shell 中運(yùn)行,也可以 使用exec 格式 的RUN指令

ENV REFRESHED_AT 環(huán)境變量 這個(gè)環(huán)境亦是用來表明鏡像模板最后的更新時(shí)間

VOLUME 容器添加卷。一個(gè)卷是可以 存在于一個(gè)或多個(gè)容器內(nèi)的特定的目錄,對(duì)卷的修改是立刻生效的,對(duì)卷的修改不會(huì)對(duì)更新鏡像產(chǎn)品影響,例:VOLUME["/opt/project","/data"]

ADD 將構(gòu)建環(huán)境 下的文件 和目錄復(fù)制到鏡像 中。例 ADD nginx.conf /conf/nginx.conf 也可以是取url 的地址文件,如果是壓縮包,ADD命令會(huì)自動(dòng)解壓、

USER 指定鏡像用那個(gè)USER 去運(yùn)行

COPY 是復(fù)制本地文件,而不會(huì)去做文件提取(解壓包不會(huì)自動(dòng)解壓) 例:COPY conf.d/ /etc/apache2/ 將本地conf.d目錄中的文件復(fù)制到/etc/apache2/目錄中

docker-compose.yml 語(yǔ)法說明

image 指定為鏡像名稱或鏡像ID。如果鏡像不存在,Compose將嘗試從互聯(lián)網(wǎng)拉取這個(gè)鏡像

build 指定Dockerfile所在文件夾的路徑。Compose將會(huì)利用他自動(dòng)構(gòu)建這個(gè)鏡像,然后使用這個(gè)鏡像

command 覆蓋容器啟動(dòng)后默認(rèn)執(zhí)行的命令

links 鏈接到其他服務(wù)容器,使用服務(wù)名稱(同時(shí)作為別名)或服務(wù)別名(SERVICE:ALIAS)都可以

external_links 鏈接到docker-compose.yml外部的容器,甚至并非是Compose管理的容器。參數(shù)格式和links類似

ports 暴露端口信息。宿主機(jī)器端口:容器端口(HOST:CONTAINER)格式或者僅僅指定容器的端口(宿主機(jī)器將會(huì)隨機(jī)分配端口)都可以(注意:當(dāng)使用 HOST:CONTAINER 格式來映射端口時(shí),如果你使用的容器端口小于 60 你可能會(huì)得到錯(cuò)誤得結(jié)果,因?yàn)?YAML 將會(huì)解析 xx:yy 這種數(shù)字格式為 60 進(jìn)制。所以建議采用字符串格式。)

expose 暴露端口,與posts不同的是expose只可以暴露端口而不能映射到主機(jī),只供外部服務(wù)連接使用;僅可以指定內(nèi)部端口為參數(shù)

volumes 設(shè)置卷掛載的路徑。可以設(shè)置宿主機(jī)路徑:容器路徑(host:container)或加上訪問模式(host:container:ro)ro就是readonly的意思,只讀模式

volunes_from 掛載另一個(gè)服務(wù)或容器的所有數(shù)據(jù)卷

environment 設(shè)置環(huán)境變量。可以屬于數(shù)組或字典兩種格式。如果只給定變量的名稱則會(huì)自動(dòng)加載它在Compose主機(jī)上的值,可以用來防止泄露不必要的數(shù)據(jù)

env_file 從文件中獲取環(huán)境變量,可以為多帶帶的文件路徑或列表。如果通過docker-compose -f FILE指定了模板文件,則env_file中路徑會(huì)基于模板文件路徑。如果有變量名稱與environment指令沖突,則以后者為準(zhǔn)(環(huán)境變量文件中每一行都必須有注釋,支持#開頭的注釋行)

extends 基于已有的服務(wù)進(jìn)行服務(wù)擴(kuò)展。例如我們已經(jīng)有了一個(gè)webapp服務(wù),模板文件為common.yml。編寫一個(gè)新的 development.yml 文件,使用 common.yml 中的 webapp 服務(wù)進(jìn)行擴(kuò)展。后者會(huì)自動(dòng)繼承common.yml中的webapp服務(wù)及相關(guān)的環(huán)境變量

net 設(shè)置網(wǎng)絡(luò)模式。使用和docker client 的 --net 參數(shù)一樣的值

pid 和宿主機(jī)系統(tǒng)共享進(jìn)程命名空間,打開該選項(xiàng)的容器可以相互通過進(jìn)程id來訪問和操作

dns 配置DNS服務(wù)器。可以是一個(gè)值,也可以是一個(gè)列表

cap_add,cap_drop 添加或放棄容器的Linux能力(Capability)

dns_search 配置DNS搜索域。可以是一個(gè)值也可以是一個(gè)列表

注意:使用compose對(duì)Docker容器進(jìn)行編排管理時(shí),需要編寫docker-compose.yml文件,初次編寫時(shí),容易遇到一些比較低級(jí)的問題,導(dǎo)致執(zhí)行docker-compose up時(shí)先解析yml文件的錯(cuò)誤。比較常見的是yml對(duì)縮進(jìn)的嚴(yán)格要求。yml文件還行后的縮進(jìn),不允許使用tab鍵字符,只能使用空格,而空格的數(shù)量也有要求,一般兩個(gè)空格。

項(xiàng)目源碼地址:GitHub

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/28046.html

相關(guān)文章

  • 使用Docker 一鍵部署 LNMP+Redis 環(huán)境

    摘要:使用部署環(huán)境簡(jiǎn)介是一個(gè)開源的應(yīng)用容器引擎,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個(gè)可移植的容器中,然后發(fā)布到任何流行的機(jī)器上,也可以實(shí)現(xiàn)虛擬化。命令是編寫之后使用的。后者會(huì)自動(dòng)繼承中的服務(wù)及相關(guān)的環(huán)境變量設(shè)置網(wǎng)絡(luò)模式。 使用Docker 部署 LNMP+Redis 環(huán)境 Docker 簡(jiǎn)介 Docker 是一個(gè)開源的應(yīng)用容器引擎,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個(gè)可移植的容器...

    _Zhao 評(píng)論0 收藏0
  • 使用Docker 一鍵部署 LNMP+Redis 環(huán)境

    摘要:使用部署環(huán)境簡(jiǎn)介是一個(gè)開源的應(yīng)用容器引擎,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個(gè)可移植的容器中,然后發(fā)布到任何流行的機(jī)器上,也可以實(shí)現(xiàn)虛擬化。命令是編寫之后使用的。后者會(huì)自動(dòng)繼承中的服務(wù)及相關(guān)的環(huán)境變量設(shè)置網(wǎng)絡(luò)模式。 使用Docker 部署 LNMP+Redis 環(huán)境 Docker 簡(jiǎn)介 Docker 是一個(gè)開源的應(yīng)用容器引擎,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個(gè)可移植的容器...

    suxier 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<