一、拉取镜像 docker pull命令用于拉取应用镜像,docker pull nginx命令用于拉取最新版本的nginx镜像。下文为拉取镜像过程的响应结果:
# docker pull nginx
从上文我们可以看出nginx镜像是从docker.io这个网址拉取下来的。
使用docker images命令可以查看当前操作系统中下载了哪些镜像文件。
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 1276623e 3 hours ago 142MB
REPOSITORY镜像仓库及镜像名称,如果不显示镜像仓库,默认就是docker.io
TAG镜像的版本或者是里程碑标签,latest表示最新版本
IMAGE ID 镜像的唯一标识
CREATED 这个镜像被创建的时间
SIZE表示镜像文件的大小
二、运行镜像启动容器 通过docker run命令启动一个容器,容器名称为lzx-nginx。
# docker run -d --name lzx-nginx -p 80:80 nginx
81bb1211144bc0991a789f860458548643c60b5459466c14d0604be9a4ccbfd7
-d表示容器在后台运行
--name为容器起一个名字
-p端口映射,格式为宿主机端口:容器端口,上文中含义是将容器中的端口80映射到宿主机的端口80,对外提供访问服务。
最后一个字段为镜像名称
浏览器HTTP协议访问宿主机的80端口,如果是80端口可以省略。得到的访问结果如下,说明我们的nginx服务已经启动成功了。
通过docker ps可以查看正在运行中的容器,如下所示:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
81bb1211144b nginx "/docker-entrypoint.…" 11 minutes ago Up 11 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp nginx-zimug
三、文件映射 首先明确的是容器中的文件内容是可以被修改的,但是「一旦容器重启,所有写入到容器中的,针对数据文件、配置文件的修改都将丢失」。所以为了保存容器的运行状态,执行结果,我们需要将容器内的一些重要的数据文件、日志文件、配置文件映射到宿主机上。 以nginx为例,nginx有三个重要的文件目录:配置,静态目录,日志
docker cp lzx-nginx:/etc/nginx/nginx.conf /Users/limouren/etc/nginx/conf
docker cp lzx-nginx:/usr/share/nginx/html /Users/limouren/etc/nginx
docker cp lzx-nginx:/var/log/nginx /Users/limouren/etc/nginx/logs
四、再次启动容器服务 -v参数表达了宿主机文件与容器中文件的映射关系,格式为-v 宿主机目录:容器文件系统目录。启动一个新的容器,容器的名字叫做nginx-lzx-prod
docker run -d -p 80:80 --name nginx-lzx-prod -v /Users/limouren/etc/nginx/html:/usr/share/nginx/html -v /Users/limouren/etc/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /Users/limouren/etc/nginx/logs:/var/log/nginx nginx
在启动新容器之前,将lzx-nginx旧的容器删掉。如果不删除旧的容器,新容器的端口与旧容器端口会发生冲突。使用如下命令删除容器:
docker stop lzx-nginx;
docker rm lzx-nginx;
执行上面的docker run命令,启动新的容器。启动后通过浏览器访问宿主机80端口,响应结果如下证明nginx正常提供web服务了。
同时可以在宿主机上修改nginx配置,也可以查看运行时日志文件。修改结果会影响容器nginx服务的运行,因为宿主机的配置文件与容器内的配置文件存在映射关系。