服務器部署docker lnmp環境


一.安裝docker
Docker要求運行在Centos 7上,要求系統為64位,系統內核版本3.10以上

1.uname -an 查看當前系統版本

2.yum -y install docker 下載安裝docker

3.service docker start  啟動docker服務

4.docker version  檢查docker是否安裝成功

當看到下圖的信息,就是表示本機docker已經安裝成功,很簡單 

                               

二.鏡像操作
創建容器要以鏡像為基礎,所以先講下docker鏡像的操作

搜索鏡像

docker images ll 查看下本機的是否已經有了鏡像

目前機器里還沒有鏡像,去Docker Hub下載(鏡像還可自定義,這里就不細說了)

docker search java  ,還能指定具體的版本進行下載,

例如:docker search  Ubuntu:1.2.5.4,可以進行搜docker Hub 會列出很多鏡像 

 


下載鏡像 

docker pull docker.io/nginx 進行下載

下載到本地的鏡像要比docker Hub上搜索出來的要大,因為下載過程中自動解壓了,在查看鏡像列表就有了剛才下載的鏡像

列表包含了倉庫名,版本標簽,鏡像ID,創建時間以及所占用的空間

 

刪除鏡像

刪除沒用的鏡像docker rmi鏡像id

 

三.鏡像的創建與管理
前邊我們已經下載好了Nginx的鏡像,接下來我們就創建一個只有Nginx應用的容器docker run -i -t <IMAGE_ID> /bin/bash:-i:標准輸入給容器 -t:分配一個虛擬終端 /bin/bash:執行bash腳本,​​​​​​

docker run -idt --name container_nginx -p 8080:80  docker.io/nginx
啟動一個使用鏡像docker.io/nginx,名字container_nginx的容器,-p 8080:80表示將容器的80端口映射到主機的8080端口,這樣我們只要訪問主機的8080端口就可以訪問到容器的服務了。

注意:name前面是兩個-, 端口前面有-p, docker.io/nginx是鏡像名,8080是主機的端口,80是Nginx應用的端口

主機上的一個端口只能映射一個容器端口,不可以多個容器端口對應一個主機端口(如果容器安裝的centos類的系統,那么容器端口隨便設定,但如果容器內只是單純的應用,那么容器端口要是應用自身的端口)

 

這樣我們就創建並啟動了一個容器!

exit 退出容器

docker ps 查看運行中的容器

docker ps -a 查看運行中和非運行中的所有容器

docker exec -it container_nginx /bin/bash 進入容器

如果容器還未啟動 執行docker start container_nginx
進入容器后啟動Nginx

whereis nginx 找Nginx的啟動目錄

[root@iz2zehzeir87zi8q99krk1z ~]# docker start container_nginx
container_nginx
[root@iz2zehzeir87zi8q99krk1z ~]# docker exec -it container_nginx /bin/bash
root@84683e425116:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@84683e425116:/# /usr/sbin/nginx

   此時在瀏覽器訪問 http://51.110.218.9:8080/ 就可以直接訪問容器內的Nginx 

 

如果訪問不成功,可能是主機端口的防火牆開着,執行下邊的命令關閉

/ sbin / iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
由於我用的阿里雲服務器,所以需要在阿里雲把8080端口開放

                               

刪除容器 

容器刪除之前先將容器停止 

docker stop container_nginx 或者是容器的id

docker rm -f container_nginx 容器刪除
docker start 與 docker run 的區別

docker start name 啟動一個已經創建的容器

docker run 創建並啟動一個容器
docker run 命令其實是 docker create 和 docker start 的命令組合,先執行docker create 創建一個容器 再接着docker start啟動

主機和容器文件相互復制  

從主機復制到容器 sudo docker cp host_path containerID:container_path

從容器復制到主機 sudo docker cp containerID:container_path host_path
請注意,以上這兩個命令都是在主機中執行的,不能再容器中執行

docker cp container_nginx:/usr/local/xin.txt  /usr/local/software/   容器向主機復制文件
docker cp /usr/local/xinzhifu.txt  container_nginx:/usr/local/  主機向容器復制文件
 

這樣一個基礎的docker容器就創建完了 。。。。。。。。。。。。

反過來大家再看一看docker的容器與鏡像的區別  https://www.cnblogs.com/linjiaxin/p/7381421.html

那么其實鏡像與容器的本質區別並不大,那么鏡像可以生成容器 ,容器是否可以做成鏡像呢?

docket commit container_nginx  image_nginx:v1

容器名 自己起一個鏡像的名字:版本號
 用當前的容器生成了redis鏡像

 

例如:A、B兩台機器都想安裝redis,A機器上創建容器並在容器中做好redis的一切配置,讓后將這個容器docker commit 成鏡像image_redis,B機器也想要安裝redis,直接用鏡像image_redis創建容器就行了,docker就是做這樣一勞永逸的事情。

而且傳統方式得在每台機器上安裝配置redis非常麻煩

 

四.鏡像的導入與導出
 
鏡像壓縮打包 (主機上進行操作),有兩種方式 docker save 與 docker load 和 docker export 與 docker import

docker save nginx | gzip > nginx_xin_image.tar.gz  將現有的鏡像壓縮打包

docker load -i nginx_xin_image.tar.gz 壓縮的鏡像解壓

docker images 進行查看
docker save 是直接將鏡像進行打包   docker save <鏡像名>或<鏡像id> 

docker export container_nginx> nginx_image.tar

cat nginx_image.tar | sudo docker import  - nginx_image:import
docker export 是直接將容器進行打包   docker save <容器名>或<容器id> 

需要注意兩種方法配套的,切不可混用。雖然導入導出時沒問題,但是在創建容器時候會報錯

如果使用import導入save產生的文件,雖然導入不提示錯誤,但是啟動容器時會提示失敗,

會出現類似"docker: Error response from daemon: Container command not found or does not exist"的錯誤。

類似,使用load載入export產生的文件,也會出現問題。

 

——————————————————————————————————————————————————————————————————————

因為之前服務器是裝着軍哥的lnmp1.4,擔心跟 docker 有沖突,所以一直也沒有去接觸 docker,另外一方面是自己懶,因為每次折騰,沒有個一兩天是完事不了的(其實就是水平 low 唄),好了,這不蹭着暑假這波(從去年就喊,每次給服務器搬個家,累得要死,趕緊換 docker 了)今天可算是真槍實戰一波了。

建議閱讀本文之前可以先去 docker 官網先了解下容器,鏡像,倉庫等概念,再來觀看本文的操作!

1、准備 docker 的運行環境

①查看自己服務器內核版本,命令: uname  –a  返回結果在 3.1  64bit 的,即可安裝。

docker的安裝部署及使用docker安裝mysql+php+nginx教程 建站經驗 第2張

②不行的話建議升級內核版本后,再來安裝。docker 內核升級教程可參考:

因為我是結合這兩篇教程操作的,所以就放着兩篇地址,其他的沒操作過,沒話語權。這里建議按步驟走,網上的很多教程有這坑,這步操作好了,就可以開始初探 docker 了。

2、安裝 docker

①先更新下 yum,命令 yum update

②添加 yum 倉庫,命令如下

  1. tee /etc/yum.repos.d/docker.repo <<-'EOF'
  2. [dockerrepo]
  3. name=Docker Repository
  4. baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
  5. enabled=1
  6. gpgcheck=1
  7. gpgkey=https://yum.dockerproject.org/gpg
  8. EOF

③安裝 docker 命令:yum install -y docker-engine

安裝好,如下圖:

docker的安裝部署及使用docker安裝mysql+php+nginx教程 建站經驗 第3張

圖片中有句 Cannot connect to the Dokcer daemon。。。我當時裝好的時候也有這句,我沒管他, 也不影響使用。繼續。

④啟動 docker 命令 service docker start

上面這部分教程來源:linux 上安裝 Docker(非常簡單的安裝方法),當時在查找教程中還發現個問題,就是有的命令帶有 sodo (sudo 是一種權限管理機制,管理員可以授權於一些普通用戶去執行一些 root 執行的操作),因為我自己都是用 root 操作的,所以不存在這個問題。

3、安裝 mysql

①去 docker 倉庫(https://hub.docker.com/)拉取 mysql 鏡像,命令 docker pull mysql

該命令是拉取最新的 mysql 版本,如果你要指定 mysql 版本,命令 docker pull mysql:5.6

②創建 mysql 容器,命令

  1. docker run \
  2. --name web-mysql \
  3. --3306:3306 \
  4. -e MYSQL_ROOT_PASSWORD=123456789 \
  5. -/web/mysql/data:/var/lib/mysql \
  6. -/ web /mysql/conf.d:/etc/mysql/conf.d \
  7. -/etc/localtime:/etc/localtime:ro \
  8. c54721a9eb17

參數說明

  • --name 給這個容器取個別名叫 web-mysql
  • --d 保持后台運行
  • -p 指定端口,進行端口映射,將宿主機的 3306 端口映射到容器內的 3306
  • -v 目錄掛載,這個-v 主要用處是方便我們在宿主機上操作容器內的配置文件,要不然每次操作配置文件都需要進入容器后然后修改配置文件
  • -v /etc/localtime:/etc/localtime:ro 特別說下,因為我發現容器內的時間會跟宿主機相差 8 個小時,加載這個目錄是為了校正時間跟宿主機時間一致。
  • c54721a9eb17——是容器的 ID (可通過 docker images 可以看到)

更多參數的詳解,請參考Docker 命令大全

這里有個問題,關於我在查找教程的時候,發現有的人需要配置 docker 的鏡像源(因為 docker 在國內訪問較慢),所以就有先要修改鏡像源的操作,主要解決國內環境下載慢的問題,修改鏡像源方法請參考:Docker 鏡像源修改。本文中因為我的服務器在國外的,所以就不用考慮配置什么國內源。

4、安裝 php

①拉取 php 鏡像,命令  docker pull php-fpm,指定版本的命令同上。

②創建 php 容器,命令

  1. docker run \
  2. --name web-php \
  3. --9000:9000 \
  4. -/web/php-fpm/etc/:/usr/local/etc/php \
  5. -/web/nginx/web:/var/www/html \
  6. -/web/localtime:/etc/localtime:ro \
  7. --link web-mysql \
  8. 953f20b0e810

這里的多了個參數

--link 是跟已經運行的 web-mysql 容器建立鏈接。所以才說要按順序安裝容器的。

其他的命令同上,php 容器運行好后,有個問題要注意,因為默認的 php 鏡像中是不帶有 mysqli 模塊(這個模塊是一定要裝的,因為連接數據都需要用到)。操作方法

(1)使用命令的進入容器內部 docker exec -it 890ec4245c56 /bin/bash

這的 890ec4245c56 是你運行好后的容器 ID(用 docker ps 查看獲取)

docker的安裝部署及使用docker安裝mysql+php+nginx教程 建站經驗 第4張

(2)進去后,輸入命令 docker-php-ext-install mysqli 等待安裝好, 如果出現

cannot create /usr/local/etc/php/conf.d/docker-php-ext-pdo_mysql.ini: Directory nonexistent

請參考:docker 下 php 安裝擴展進行解決。

5、安裝 nginx

①拉取 nginx 鏡像,命令 docker pull nginx,指定版本命令同上 。

②創建 nginx 容器,命令

  1. docker run \
  2. --name web-nginx \
  3. --80:80 \
  4. -/web/nginx/conf/nginx.conf:/etc/nginx/nginx.conf/  \
  5. -/web/nginx/conf/vhost/conf.d:/etc/nginx/conf.d \
  6. -/web/nginx/web:/usr/share/nginx/html  \
  7. -/web/nginx/logs:/var/log/nginx/  \
  8. -/etc/localtime:/etc/localtime:ro \
  9. --link web -php \
  10. 436be79de93f

安裝后 nginx 容器后有幾個點要注意:

nginx 配置文件中要把 php 部分的參數改成 php 的,這樣 php 才能進行解析。

先進入 nginx 容器中,用命令(這條命令是把 web-nginx 容器里面的 nginx.conf 配置文件復制到我們的指定的目錄下):

  1. docker cp web-nginx:/etc/nginx/nginx.conf /web/nginx/conf/

這條命令詳解請參考:Docker cp 命令

然后就可以直接到我們宿主機上修改 nginx.conf 文件。

還有個配置文件是 default.conf 是主要來負責做站點解析

  1. server {
  2. listen       80;
  3. server_name  www.web.com web.com;
  4.  
  5. #charset koi8-r;
  6. access_log  /var/log/nginx/host.access.log  main;
  7.  
  8. location / {
  9. root   /usr/share/nginx/html/;
  10. index  index.html index.htm index.php;
  11. }
  12.  
  13. #error_page  404              /404.html;
  14. # redirect server error pages to the static page /50x.html
  15. #
  16. error_page   500 502 503 504  /50x.html;
  17. location = /50x.html {
  18. root   /usr/share/nginx/html;
  19. }
  20.  
  21. # proxy the PHP scripts to Apache listening on 127.0.0.1:80
  22. #
  23. #location ~ \.php$ {
  24. #    proxy_pass   http://127.0.0.1;
  25. #}
  26. # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  27. #
  28.  
  29. location ~ \.php$ {
  30. root           html;
  31. fastcgi_pass     web-php:9000;
  32. fastcgi_index  index.php;
  33. fastcgi_param  SCRIPT_FILENAME  /var/www/html/$fastcgi_script_name;
  34. include        fastcgi_params;
  35. }
  36.  
  37. # deny access to .htaccess files, if Apache's document root
  38. # concurs with nginx's one
  39. #
  40. #location ~ /\.ht {
  41. #    deny  all;
  42. #}
  43. }

web-php 和/var/www/html/是需要修改的兩個地方,如果你是按上面的命令進行操作的,就修改這兩個地方,然后上傳到我們的指定的目錄/ web /nginx/conf/vhost/conf.d 里

我說下修改的地方

第一處地方我改成 web-php,因為這是我們自己創建了一個叫 web-php 容器名稱/id(ID 太長了不好分辨),9000 也正是 php 的端口

第二處修改地方,是指 php 需要執行的文件地址,為什么填這個地址呢?因為這是 php 默認解析目錄地址。

操作完上面的幾個步驟了,先停止所有容器,然后重啟(為了讓配置生效)。

停止容器的命令  docker  stop 容器 ID/容器別名

開啟容器的命令  docker  start 容器 ID/容器別名(開啟的時候一定要按順序 1.mysql 2.php 3.nginx,因為容器之間都有做關聯,如果你所需關聯的容器沒有先啟動,那這個容器是不是就會開啟失敗了,這就是為什么一定要按順序!!!)

上面所有需要創建的配置文件,我都整理好,不想自己動手配置的可以直接下載配置文件,點此下載 docker 配置文件

下面分享下常見的 docker 命令

  • 容器的開啟/停止/重啟:docker start/stop/restart 容器 ID/別名
  • 容器的刪除:docker rm 容器 ID/別名
  • 鏡像刪除:docker rmi 鏡像 ID(先停止容器后,刪除。方法二強制刪除 docker rmi –f 容器 ID/別名,這就不用管他停沒停止了 )
  • 進入容器:docker exec -it 容器 ID/容器別名 /bin/bash(網上還有條進入容器的命令,不過我都是用這條,因為用這條命令進去的容器,你退出容器后還是容器是還在運行的狀態!)
  • 查看容器的 ID 地址:docker inspect --format '{{ .NetworkSettings.IPAddress }}' 容器 ID/容器別名
  • 查看正在運行的容器:docker ps
  • 查看所有狀態下的容器:docker ps –a
  • 查看某個容器的日志: docker logs 容器 ID/容器別名
  • 停止所有的容器:docker stop $(docker ps -a -q)
  • 刪除所有的容器:docker rm $(docker ps -a -q)
  • docker 的開啟/重啟/狀態:service docker start/restart/status

接觸 docker 好幾天了,才對他有那么一丟點了解(生怕下次再操作的時候會忘記了,所以特地寫了篇文章,以備不時之需,而且里面的操作,都是我裝 docker 時遇到的問題,把所有發生的問題都記錄整合在一起,這樣也省了有同樣問題的朋友,要百度好幾次,而浪費時間!),

我自己也同時在幾個服務器上配了 docker,不得不說 docker 配置環境真的很快,我第一次配的時候,因為不熟練,所以配的慢, 等到我第二次配的時候,所有操作 10 分鍾搞定,相比之前用軍哥的一鍵安裝包的配置時間真的縮短的不是一兩倍啊!還有 docker 占用內存也比我之前的低。所以搞下來這幾天,還是挺有收獲的!

文中所有的操作方法,皆是來源於網絡,由我整合歸納,如有發現錯誤,還請麻煩指正,謝謝!

 

Linux 安裝docker,以及docker的基本操作:https://blog.csdn.net/xinzhifu1/article/details/83579256

docker的安裝部署及使用docker安裝mysql+php+nginx教程:https://boke112.com/6402.html

后端好書閱讀與推薦(續):https://segmentfault.com/a/1190000011076865#articleHeader4


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM