在win10 docker啟動的centos容器中安裝nginx
在win10機器上搭建了一個docker,在docker啟動了centos容器,在centos中安裝nginx。
- 安裝配置docker
直接在官網下載docker for windows:https://store.docker.com/editions/community/docker-ce-desktop-windows
下載完成,點選按照預設一步步安裝就行了。
如果希望加快pull映象的速度,可以選擇配置一個阿里雲映象加速器。
- 安裝centos
用管理員身份執行docker,根據實踐來看,如果不這樣做的話,docker容器無法ping 通外外網。
從阿里雲映象服務中拉取一個centos映象:docker pull registry.cn-hangzhou.aliyuncs.com/max/centos6.7-docker
啟動容器:docker run --name my-cnt-centos-6.7 -itd -p 80:80 <映象> /bin/bash
例如:
(docker run --name my-cnt-centos-6.7 -itd -p 80:80 registry.cn-hangzhou.aliyuncs.com/max/centos6.7-docker /bin/bash)
檢視執行的容器:docker ps,找到剛剛啟動的容器id
進入這個容器:docker exec -it <容器id> /bin/bash
這樣便成功啟動了centos。
- 安裝Nginx
必要的環境安裝:yum -y install gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel open openssl-devel
下載nginx: cd /usr/local ,wget http://nginx.org/download/nginx-1.7.4.tar.gz
解壓nginx:tar -zxvf nginx-1.7.4.tar.gz
安裝nginx:進入解壓目錄,執行./configure prefix=/usr/local/nginx,配置安裝目錄;執行make和make install命令,就安裝完成了。
- 訪問Nginx
這裡或許就是我寫這篇隨筆的目的,因為的確在這裡耽擱了很長的時間。
遇到的第一個問題,centos中始終無法ping通外網,後來改為用管理員啟動docker後,再次啟動centos就解決了這個問題。
遇到的第二個問題,如何訪問Nginx,因為直接在瀏覽器中輸入centos的IP,無法訪問到Nginx的welcome頁面。後來才知道宿主機要訪問docker容器中的服務,
必須要進行埠對映,在啟動容器時,如果不配置宿主機器與docker容器的埠對映,外部是無法訪問docker容器。這就是為什麼我在前面啟動centos時,
加了-p 80:80埠對映的原因。然後需要通過:localhost:80進行訪問。
容器的管理(建立、檢視、啟動、終止、刪除)
一、建立
docker create
:建立容器,處於停止狀態。
centos:latest
:centos容器:最新版本(也可以指定具體的版本號)。- 本地有就使用本地映象,沒有則從遠端映象庫拉取。
- 建立成功後會返回一個容器的ID。
docker run
:建立並啟動容器。
互動型容器:執行在前臺,容器中使用exit命令或者呼叫docker stop、docker kill命令,容器停止。
如下圖已經在前臺開啟一個docker容器:
- i:開啟容器的標準輸入。
- t:告訴docker為容器建立一個命令列終端。
- name:指定容器名稱,可以不填(隨機),建議根據具體使用功能命名,便於管理。
- centos:告訴我們使用什麼映象來啟動容器。
/bin/bash
:告訴docker要在容器裡面執行此命令。
後臺型容器:執行在後臺,建立後與終端無關,只有呼叫docker stop、docker kill命令才能使容器停止。
- d:使用-d引數,使容器在後臺執行。
- c: 通過-c可以調整容器的CPU優先順序。預設情況下,所有的容器擁有相同的CPU優先順序和CPU排程週期,但你可以通過Docker來通知核心給予某個或某幾個容器更多的CPU計算週期。比如,我們使用-c或者–cpu-shares =0啟動了C0、C1、C2三個容器,使用-c/–cpu-shares=512啟動了C3容器。這時,C0、C1、C2可以100%的使用CPU資源(1024),但C3只能使用50%的CPU資源(512)。如果這個主機的作業系統是時序排程型別的,每個CPU時間片是100微秒,那麼C0、C1、C2將完全使用掉這100微秒,而C3只能使用50微秒。
- -c後的命令是迴圈,從而保持容器的執行。
- docker ps:可以檢視正在執行的docker容器。
二、檢視
docker ps
: 檢視當前執行的容器docker ps -a
:檢視所有容器,包括停止的。
-
標題含義:
- CONTAINER ID:容器的唯一表示ID。
- IMAGE:建立容器時使用的映象。
- COMMAND:容器最後執行的命令。
- CREATED:建立容器的時間。
- STATUS:容器狀態。
- PORTS:對外開放的埠。
- NAMES:容器名。可以和容器ID一樣唯一標識容器,同一臺宿主機上不允許有同名容器存在,否則會衝突。
-
docker ps -l
:檢視最新建立的容器,只列出最後建立的。 docker ps -n=2
:-n=x選項,會列出最後建立的x個容器。
三、啟動
通過docker start來啟動之前已經停止的docker_run映象。
- 容器名:
docker start docker_run
,或者ID:docker start 43e3fef2266c
。 - –restart(自動重啟):預設情況下容器是不重啟的,–restart標誌會檢查容器的退出碼來決定容器是否重啟容器。
docker run --restart=always --name docker_restart -d centos /bin/sh -c "while true;do echo hello world; sleep;done"
:--restart=always
:不管容器的返回碼是什麼,都會重啟容器。--restart=on-failure:5
:當容器的返回值是非0時才會重啟容器。5是可選的重啟次數。
四、終止
docker stop [NAME]/[CONTAINER ID]
:將容器退出。docker kill [NAME]/[CONTAINER ID]
:強制停止一個容器。
五、刪除
容器終止後,在需要的時候可以重新啟動,確定不需要了,可以進行刪除操作。
docker rm [NAME]/[CONTAINER ID]
:不能夠刪除一個正在執行的容器,會報錯。需要先停止容器。
-
一次性刪除:docker本身沒有提供一次性刪除操作,但是可以使用如下命令實現:
docker rm 'docker ps -a -q'
:-a標誌列出所有容器,-q標誌只列出容器的ID,然後傳遞給rm命令,依次刪除容器。