1. 程式人生 > >docker commit 部署LNMP 映象

docker commit 部署LNMP 映象

Docker 常用命令

檢視

docker images           # 列出所有映象(images)
docker ps               # 列出正在執行的容器(containers)
docker ps -a            # 列出所有的容器
docker pull centos      # 下載centos映象
docker top <container>  # 檢視容器內部執行程式

容器

docker stop <container>                  # 停止一個正在執行的容器,<container>可以是容器ID或名稱
docker start <container> # 啟動一個已經停止的容器 docker restart <container> # 重啟容器 docker rm <container> # 刪除容器 docker run -i -t -p :80 LAMP /bin/bash # 執行容器並做http埠轉發 docker exec -it <container> /bin/bash # 進入ubuntu類容器的bash docker exec
-it <container> /bin/sh # 進入alpine類容器的sh docker rm `docker ps -a -q` # 刪除所有已經停止的容器 FOR /f "tokens=*" %i IN ('docker ps -a -q') DO docker rm %i # windows系統,用上面的命令會出錯:unknown shorthand flag: 'a' in -a docker kill $(docker ps -a -q) # 殺死所有正在執行的容器,$()功能同``

提交/匯出

docker build --rm=true
-t hjue/lamp . # 建立映像檔案。–rm 選項是告訴Docker,在構建完成後刪除臨時的Container,Dockerfile的每一行指令都會建立一個臨時的Container,一般這些臨時生成的Container是不需要的 docker commit 3a09b2588478 mynewimage # 提交你的變更,並且把容器儲存成映象,命名為mynewimage,3a09b2588478為容器的ID docker save mynewimage | bzip2 -9 -c> /home/save.tar.bz2 # 把 mynewimage 映象儲存成 tar 檔案 bzip2 -d -c < /home/save.tar.bz2 | docker load # 載入 mynewimage 映象 docker export <CONTAINER ID> > /home/export.tar # 匯出Image cat /home/export.tar | sudo docker import - mynewimage # 匯入Image映象

映象

docker run -i -t centos /bin/bash          # 執行centos映象
docker run -d -p 80:80 hjue/centos-lamp    # 執行centos-lamp映象

docker rmi [image-id]                      # 刪除映象
docker rmi $(docker images -q)             # 刪除所有映象

幫助

docker run --help

安裝配置

CentOS 7 (使用yum進行安裝)

# step 1: 安裝必要的一些系統工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 新增軟體源資訊
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新並安裝 Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 開啟Docker服務
sudo service docker start

# 注意:
# 官方軟體源預設啟用了最新的軟體,您可以通過編輯軟體源的方式獲取各個版本的軟體包。例如官方並沒有將測試版本的軟體源置為可用,你可以通過以下方式開啟。同理可以開啟各種測試版本等。
# vim /etc/yum.repos.d/docker-ce.repo
#   將 [docker-ce-test] 下方的 enabled=0 修改為 enabled=1
#
# 安裝指定版本的Docker-CE:
# Step 1: 查詢Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
#   Loading mirror speeds from cached hostfile
#   Loaded plugins: branch, fastestmirror, langpacks
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            docker-ce-stable
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            @docker-ce-stable
#   docker-ce.x86_64            17.03.0.ce-1.el7.centos            docker-ce-stable
#   Available Packages
# Step2 : 安裝指定版本的Docker-CE: (VERSION 例如上面的 17.03.0.ce.1-1.el7.centos)
# sudo yum -y install docker-ce-[VERSION]
# 安裝校驗 docker version

配置映象加速器

{
  "registry-mirrors": [
    "https://key.mirror.aliyuncs.com"
  ],
  "insecure-registries": [],
  "debug": true,
  "experimental": false
}

Centos

您可以通過修改daemon配置檔案/etc/docker/daemon.json來使用加速器:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://key.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

Docker部署LNMP

部署MySQL

從Docker的公共倉庫 Dockerhub 下載 MySQL 映象:

docker pull mysql:5.6.35

然後啟動資料庫:

$ docker run --name mysql-server -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.6.35

部署Nginx

安裝Nginx

首先,從Docker的公共倉庫 Dockerhub 下載nginx映象:

$ docker pull nginx

這個命令會下載容器需要的所有部件,並且Docker會對它們進行快取,所以在執行容器的時候,不需要每次都下載容器映象。

然後,啟動Nginx容器:

$ docker run --name nginx -p 80:80 -d nginx

執行成功後,終端會返回容器的ID號,上面的命令中,
- run:建立一個新的容器
- –name:指定容器的名稱(如果留空,docker會自動分配一個名稱)
- -p:匯出容器埠到本地伺服器,格式:-p :。在本例中,我們對映容器的80埠到本地伺服器的80埠。
nginx:是 Dockerhub 上下載nginx映象名稱(如果本地沒有可用的映象,Docker會自動下載一個)
- -d:後臺啟動。

通過瀏覽器瀏覽:http://localhost 就會看到Nginx歡迎介面。接下來可能會用到這幾個命令:

$ docker ps -a                       # 檢視所有的容器
$ docker stop nginx                  # 停止正在執行的容器
$ docker start nginx                 # 啟動一個已經停止的容器
$ docker rm nginx                    # 刪除容器

對映HTML路徑

預設情況下,Docker nginx伺服器的HTML路徑(網站根目錄)在容器 /usr/share/nginx/html 目錄下,現在需要把這個目錄對映到本地伺服器的 ~/www/html 目錄。在上面命令的基礎上加上-v引數,具體如下:

$ docker run --name nginx-server -p 80:80 -d -v /home:/home nginx

-v的引數格式為::。

在~/www/html下建立一個 index.html 檔案,內容 here is ~/www/html/index.html

配置 Nginx

Nginx 的強大很大部分體現在配置檔案上,對於一些高階的應用來說,自定義 Nginx 非常重要。所以,我們需要把 Nginx 的配置檔案複製到本地伺服器目錄:

$ cd ~/www
$ docker cp nginx-server:/etc/nginx/conf.d/default.conf /home/docker/etc/nginx/conf.d/default.conf

再加一個-v引數,把本地的配置檔案對映到容器上,在重啟容器:

$ docker stop nginx
$ docker rm nginx
$ docker run --name nginx-server -p 80:80 -v /home:/home -v /home/docker/etc/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf -d nginx

如果配置檔案有修改,需要重啟容器生效:

$ docker restart nginx-server
這樣就可以直接在本地修改配置檔案了。

部署PHP-FPM

下載 PHP-FPM 映象:

$ docker pull php:7.0-fpm
$ docker run --name php-fpm-server -p 9000:9000 -d php:7.0-fpm
$ mkdir -p /home/docker/usr/local/etc/php-fpm.d && mkdir -p /home/docker/usr/src/php
$ docker cp php-fpm-server:/usr/local/etc/php-fpm.d/www.conf /home/docker/usr/local/etc/php-fpm.d/www.conf
$ cd /user/src && tar -xvf php.tar.xz
$ docker cp php-fpm-server:/usr/src/php/php.ini-development /home/docker/usr/local/etc/php/php.ini

在本地伺服器修改 php.ini 的內容,設定cgi.fix_pathinfo=0(要先刪除前面的;註釋符):

cgi.fix_pathinfo=0

然後重新啟動容器:

$ docker stop php-fpm-server
$ docker rm php-fpm-server
$ docker run --name php-fpm-server --link mysql-server:mysql-server -v /home:/home -v /home/docker/usr/local/etc/php-fpm.d/www.conf:/usr/local/etc/php-fpm.d/www.conf -v /home/docker/usr/local/etc/php/php.ini:/usr/local/etc/php/php.ini -d php:7.0-fpm

這樣PHP-FPM的容器就部署完成了。注意,要保證配置檔案 php.ini 和 www.conf 沒有錯誤,否則會無法啟動容器。

讓Nginx容器支援FPM

開啟 nginx 的配置檔案,修改內容如下:

server {
    listen       80;
    server_name  _;
    root /home;
    index index.php index.html index.htm;

    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;

    location / {
        #root   /usr/share/nginx/html;
        #index  index.php index.html index.htm;
    try_files $uri $uri/ =404;
    }

    error_page  404  /404.html;
    location = /40x.html {
        root    /user/share/nginx/html;     
    }

    # 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;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        fastcgi_pass   php-fpm-server:9000;
        fastcgi_index  index.php;
#        fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    location ~ /\.ht {
        deny  all;
    }
}

然後啟動 nginx:

$  docker run --name nginx-server -p 80:80 --link php-fpm-server -v /home:/home -v /home/docker/etc/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf -d nginx

在 ~/www/html 下建立 index.php 檔案,內容:

<?php
    phpinfo();
?>

阿里雲映象託管

登入阿里雲docker registry:

$ sudo docker login --username= registry.cn-hangzhou.aliyuncs.com

登入registry的使用者名稱是您的阿里雲賬號全名,密碼是您開通服務時設定的密碼。

你可以在映象管理首頁點選右上角按鈕修改docker login密碼。

從registry中拉取映象:

$ sudo docker pull registry.cn-hangzhou.aliyuncs.com/diandianzhangda/centos:[映象版本號]

將映象推送到registry:

$ sudo docker login --username= registry.cn-hangzhou.aliyuncs.com
$ sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/diandianzhangda/centos:[映象版本號]
$ sudo docker push registry.cn-hangzhou.aliyuncs.com/diandianzhangda/centos:[映象版本號]

其中[ImageId],[映象版本號]請你根據自己的映象資訊進行填寫。

配置獨立 lnmp

建立執行容器

docker run --name centos-lnmp -i -t -p 80:80 -p 3306:3306 -d centos /bin/bash
docker run --name lnmp-server -i -t -p 80:80 -p 3306:3306 -d -v /home:/home centos-lnmp:v1 /bin/bash

參考