docker學習2|在容器中部署nginx並儲存、執行容器

中興開發者社群發表於2017-12-13

點選上方“中興開發者社群”,關注我們

每天讀一篇一線開發者原創好文640?wx_fmt=png&wxfrom=5&wx_lazy=1

▎作者簡介

作者朱磊是開源軟體愛好者,致力於web應用部署、運維領域解決方案的研究。將web應用部署在Docker上能夠極大的簡化部署、方便維護,文章將以初學者的角度從輸出hello world開始,一步步的揭開使用Docker部署web應用的神祕面紗。


上文:docker學習1|使用docker輸出hello world

在上一節,我們學到如何使用centos容器輸出hello world,本節我們將學習如何在映象中安裝nginx並儲存更改,執行自己的容器,並學習如何進行埠對映與後臺執行容器。


1 共享本地儲存

  1. #-v共享本地儲存

  2. docker run -it -v /opt:/opt centos /bin/bash

通過-v引數,冒號前為宿主機目錄,必須為絕對路徑,冒號後為映象內掛載的路徑。

此時,可以檢視容器的/opt目錄是否已經共享本地儲存

  1. [root@2b4accd4cb25 /]# ll /opt

當需要使用本機檔案的時候可以複製到本機/opt目錄,這樣容器就可以共享了。


2 使用yum安裝nginx並啟動

  1. yum -y install nginx

不修改配置檔案,直接啟動nginx,並訪問80埠

  1. #啟動nginx

  2. nginx

  3. #訪問nginx網站80埠

  4. curl localhost:80

這樣我們即在容器內啟動了nginx預設頁面在80埠上,通過curl可以檢視其頁面程式碼。


3 儲存對容器的更改

首先,檢視當前執行中的容器

  1. #在宿主機中執行

  2. docker ps

  3. #記錄結果CONTAINER ID

  4. CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

  5. 2b4accd4cb25        centos              "/bin/bash"         About an hour ago   Up About an hour                        mad_wozniak

儲存該容器

  1. docker commit 2b4a mycentos

  2. #2b4a為CONTAINER ID的前四位

  3. #mycentos是自己更改映象後的別名

檢視本地已有容器

  1. docker images

  2. #結果如下:

  3. REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

  4. mycentos            latest              19604df31369        9 seconds ago       375.4 MB

  5. docker.io/centos    latest              3fa822599e10        8 days ago          203.5 MB

可以看到,mycentos已經作為一個新的容器儲存。


4 執行mycentos容器   

  1. docker run -it -v /opt:/opt mycentos /bin/bash

  2. #進入mycentos後直接執行nginx,驗證nginx是否已經安裝

  3. [root@16f46f4e363d /]# nginx

  4. [root@16f46f4e363d /]# ps aux |grep nginx

  5. root         14  0.0  0.1 122912  2108 ?        Ss   01:35   0:00 nginx: master process nginx

  6. nginx        15  0.0  0.1 123296  3128 ?        S    01:35   0:00 nginx: worker process

  7. root         17  0.0  0.0   9

  8. #可以驗證,容器已經正確儲存修改並重新執行。

5 埠對映與後臺執行

5.1 埠對映

我們在容器mycentos中啟動了nginx服務並開啟了80埠,對於更一般的情況來說,我們需要在容器外,也就是宿主機開啟對應的對映埠,這樣才能對外提供網站服務。我們可以通過如下命令開啟對映:

  1. docker run -it -p 80:80 mycentos /bin/bash

  2. [root@8e2455671b01 /]# nginx

  3. #開啟Nginx程式後,在宿主機瀏覽器使用localhost:80即可訪問nginx預設頁面

  4. # -p 引數 host_port:port ,host_port指定了宿主機的埠,後面是容器的埠

  5. #-p 還可以開啟多埠對映 -p host_port1:port1 -p host_port2:port2

5.2 開啟nginx並後臺執行容器

對於一般的網站部署來說,我們並不需要開啟bash視窗,我們需要容器開啟nginx後一直在後臺執行就可以了,我們可以輸入如下命令開啟容器後臺執行:

  1. #前臺開啟

  2. docker run -it -p 80:80 mycentos /bin/bash

  3. [root@8e2455671b01 /]# nginx

  4. #按住 Ctrl + P + Q 退出容器,進入後臺執行

  5. #此時使用 docker ps

  6. docker ps

  7. CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                NAMES

  8. 8c2299567a7d        mycentos            "/bin/bash"         30 seconds ago      Up 27 seconds       0.0.0.0:80->80/tcp   boring_goldberg

可以看到容器已經保持在後臺執行,我們可以對這個在後臺的容器進行一定的操作

  1. #進入剛剛進入後臺執行的容器

  2. docker attach 8c2299567a7d

  3. #驗證Nginx程式

  4. [root@8c2299567a7d /]# ps aux | grep nginx

  5. #按住 Ctrl + P + Q 退出容器,進入後臺執行

  6. #後臺開啟容器mycentos,但不進入容器

  7. docker run -dit -p 80:80 mycentos /bin/bash

  8. #後臺執行nginx,不進入容器

  9. docker exec -it 8c2299567a7d nginx

  10. #退出後臺執行

  11. docker stop 8c2299567a7d

參考資料

  1. 詳解Docker掛載本地目錄及實現檔案共享,http://blog.csdn.net/magerguo/article/details/72514813

  2. 在linux命令下如何訪問一個url?,http://blog.csdn.net/zhuying_linux/article/details/6881728

  3. 儲存對容器的修改,http://www.docker.org.cn/book/docker/docer-save-changes-10.html

  4. Docker學習筆記-Docker埠對映,http://blog.csdn.net/qq_29994609/article/details/51730640

  5. Docker學習筆記(四)之容器檢視啟動終止刪除,http://blog.csdn.net/u013246898/article/details/52945884

  6. 保持後臺執行 Docker 容器,https://www.douban.com/note/602752252/

  7. docker 後臺執行和進入後臺執行的容器,https://www.cnblogs.com/hanxing/p/7832178.html

640?wx_fmt=jpeg

相關文章