Docker是一個優秀的容器管理工具,可以快速方便地管理多個容器。它的一個重要功能是可以將宿主機的端口和文件夾映射到容器中。這在部署php應用程序時非常有用。本文將詳細介紹如何在docker容器中映射php應用程序所需的端口和目錄。
首先,我們需要一個基本的php應用程序。假設我們有一個簡單的php應用程序,代碼如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Sample PHP Application</title>
</head>
<body>
<h1>Hello World!</h1>
<p><?php echo "Today is " . date("Y/m/d") . "<br>"; ?></p>
</body>
</html>
我們將此代碼保存為index.php文件。現在我們需要將其部署到docker容器中。為此,我們需要編寫一個簡單的Dockerfile:
FROM php:latest
COPY . /usr/src/myapp
WORKDIR /usr/src/myapp
CMD [ "php", "./index.php" ]
EXPOSE 80
這個Dockerfile基于最新的php版本構建,將我們的源代碼復制到/usr/src/myapp目錄中,使用CMD指定php文件的執行命令并且將容器內部使用的80端口映射到宿主機上。接下來,我們需要構建并且啟動這個docker鏡像。
$ docker build -t my-php-app .
$ docker run -p 80:80 my-php-app
現在訪問http://localhost即可看到我們的應用程序運行了。但是我們還需要將宿主機的代碼目錄映射到容器中。在此之前,我們需要將代碼目錄下的容器忽略掉。因為Docker官方文檔中指出:在Docker容器中,盡量不要把代碼和容器一起放在一起,可以在代碼目錄根目錄加一個.dockerignore文件,告訴docker哪些文件或者目錄不需要收入鏡像中,Docker構建時將這些文件或者目錄剔除出去。
vendor/
node_modules/
npm-debug.log
.git/
.gitignore
現在我們把代碼文件和這個.dockerignore文件放到本地機器的/code目錄上。然后我們需要將容器的/usr/src/myapp目錄映射到本地機器上的代碼目錄。
$ docker run -p 80:80 -v /code:/usr/src/myapp my-php-app
這樣容器就可以直接從本地機器的代碼目錄中獲取源代碼了。這個技巧非常有用,因為它允許我們在本地機器上進行代碼編輯,然后直接在容器中運行。
總結一下,使用Docker可以輕松地將一個php應用程序部署到容器中。我們可以使用Dockerfile編寫容器鏡像,并且使用docker run命令運行這個容器鏡像。我們可以利用Docker的映射特性實現將宿主機的代碼目錄映射到容器內部的目錄中,這樣我們就可以方便地在本地機器上進行代碼編輯,而不是在容器內部進行編輯。