使用Dockerfile制作镜像、创建容器
开始吧
本篇内容主要用以记录学习实践的过程,并可能为有相关需要的小伙伴提供一些参考。
本次制作的镜像基于docker官方镜像php:7.2-apache。
一、创建文件名为Dockerfile的文件
在项目目录(选择已有的目录或新建目录)下创建文件名为Dockerfile的文件(注意大小写),并编写如下内容:
FROM php:7.2-apache
COPY "$PWD/" /var/www/html/
EXPOSE 80
对上述命令拆分解释:
FROM php:7.2-apache:
php:7.2-apache为官方的 php image
冒号表示标签,这里标签是7.2-apache,即7.2版本的 php,并自带Apache
COPY "$PWD/" /var/www/html/:
将当前目录($PWD)下的所有文件(除了.dockerignore排除的路径),都拷贝进入 image 文件的/var/www/html/目录;
其中/var/www/html/为apache的默认站点目录;
$PWD为当前目录;
EXPOSE 80:将容器 80 端口暴露出来,允许外部连接这个端口
二、进入Dockerfile文件所在的目录 & 创建镜像
进入Dockerfile文件所在的目录(windows系统使用cmd或PowerShell进入该目录),执行如下命令:
创建镜像
docker build -t ImageName .
对上述命令拆分解释:
docker build:用于使用 Dockerfile 创建镜像;
-t:镜像的名字及标签,通常 name:tag 或者 name 格式;
ImageName:镜像名称,请自定义该名称;
.:最后面这个点千万别丢了;
三、创建容器
查看所有镜像
docker images
创建容器
docker run -d -p 81:80 -v 本地项目文件夹:/var/www/html/ --name ContainerName ImageName
对上述命令拆分解释:
docker run:创建一个新的容器并运行一个命令;
-d: 后台运行容器,并返回容器ID;
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口;
-v: 绑定一个目到容器目录,格式为:主机(宿主)目录:容器目录;该命令使自己的本地的目录映射到容器的启动目录,以本地文件的更改实时更新到容器的效果;
--name:为容器指定一个名称(ContainerName);
ImageName:镜像名称(第2步创建的镜像);
四、查看容器列表
docker ps -a
容器列表表头如下,其中CONTAINER ID就是容器ID,NAMES为容器名称:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
五、启动容器
docker start 容器ID
六、进入容器
docker exec -it 容器名称/容器ID /bin/bash
对上述命令拆分解释:
docker exec:在运行的容器中执行命令;
-d :分离模式: 在后台运行;
-i :即使没有附加也保持STDIN 打开;
-t :分配一个伪终端;
容器名称/容器ID:此处可以使用容器名称或容器ID;
/bin/bash:在容器中开启一个交互模式的终端;
七、使用IP:PORT访问容器
在项目根目录下创建index.php,并编写如下内容:
<?php
phpinfo();
访问容器的web服务
http://127.0.0.1:81/