在上一節中了解了鏡像和容器。對於鏡像可以這樣的理解,鏡像相當於一個光盤,里面刻錄了一個系統這個系統已經帶有相關的服務了。
容器是通過鏡像這個光盤安裝的一個操作系統,光盤預加了什么服務,容器就有什么服務。
對於docker來說,相當多的操作跟鏡像和容器有關系,比如如何管理鏡像,如何管理容器,容器和宿主機的關系,等等。
在了解了docker的相關概念后,可以使用docker來創建各種服務,這里以創建一個nginx服務為例。
獲取nginx鏡像
可以從遠程倉庫中拉取相應的鏡像,也可以使用本地倉庫獲取。
在默認的情況下,從docker hub 拉取鏡像。
在docker hub中搜索nginx鏡像。
root@ubuntu:~# docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 11359 [OK]
jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 1595 [OK]
richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of… 712 [OK]
可以看到跟nginx相關的鏡像。
這里下載官方的nginx鏡像:
docker pull nginx
鏡像下載成功:
Using default tag: latest
latest: Pulling from library/nginx
743f2d6c1f65: Pull complete
6bfc4ec4420a: Pull complete
688a776db95f: Pull complete
Digest: sha256:a08f3331865d6072d7a28a5b943d1526dbd3fe3b4ca723c0438750d5e23f21a1
Status: Downloaded newer image for nginx:latest
可以查看鏡像,看看docker中的鏡像是不是多了一個nginx
root@ubuntu:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 53f3fd8007f7 4 hours ago 109MB
啟動nginx服務器
這里創建啟動一個nginx的容器:
root@ubuntu:~# docker run --name tb-nginx -p 80:80 -d nginx
f32217ebb3f75267eb5166776dde7600ef15955264daea7d6820cc289ec233d5
其中參數的意義如下:
- tb-nginx 容器名稱。
- -d設置容器在在后台一直運行。
- -p 端口進行映射,將本地 80 端口映射到容器內部的 80 端口。
成功的啟動了一個nginx容器,nginx容器里面是什么呢?可以到容器去看看。
其實nginx容器,是一個centos的系統加一個nginx的服務器,這個在后面構造鏡像的時候會更加明白。
在本地的中查看進程:
root@ubuntu:~# ps ax | grep nginx
7115 ? Ss 0:00 nginx: master process nginx -g daemon off;
7154 ? S 0:00 nginx: worker process
7281 pts/0 S+ 0:00 grep --color=auto nginx
可以看到本地中有nginx的進程,也就是說docker並不是虛擬機,創建的進程還是在本地中。這樣就比較有意思了,創建的方式像虛擬機一樣,但是運行的方式並不是虛擬機,這樣不會浪費太多的虛擬資源。
訪問本地頁面
這樣相當於在本地的機子上安裝了一個nginx服務器,由於我們的端口也是映射到本地的80端口上,在外面訪問網站沒有什么差別。
是不是,跟普通的訪問一樣。
映射本地文件
如果單純這樣,docker並不是很好用,如果單純作為服務器的話,最好是能把nginx用到的相關文件都能夠映射到本機中,這樣在修改一些配置和html的時候,不需要每次都登入到docker中去,docker能夠映射本地文件。
啟動docker的時候,帶上相關的文件映射。
docker run --name tb-nginx -p 80:80 -d -v /data/nginx/logs:/var/log/nginx -v /data/nginx/html:/usr/share/nginx/html nginx
需要注意的是,如果一開始需要用到docker中的文件需要把它拷貝出來:
如拷貝html路徑下的文件:
docker cp 8366ba061467:/usr/share/nginx/html/ /data/nginx/
在路徑文件映射了以后,可以在目錄/data/nginx/logs
下看到訪問日志和錯誤日志。在/data/nginx/html
可以修改相應的html代碼。
nginx-php
在nginx中如果需要加入php,比較方便的是直接下載一個nginx-php的鏡像,在hub中找了一個相關的:
創建鏡像並啟動容器:
docker run -d -p 80:80 richarvey/nginx-php-fpm
訪問本地可以看到相關的頁面。
如果需要還可以進一步的把地址映射出來。