docker部署nginx项目并挂载目录

224 阅读1分钟

一、安装nginx

可以从docker仓库下载nginx镜像包。

$ docker pull nginx

然后用docker images命令查看镜像列表。

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
sts-vue             latest              4018408349b8        5 weeks ago         150 MB
docker.io/nginx     latest              605c77e624dd        1 days ago         141 MB
docker.io/neo4j     4.4.21              c7b81646db38        7 months ago        551 MB
docker.io/openjdk   8                   e24ac15e052e        2 years ago         526 MB

docker.io/nginx便是下载的nginx镜像包名称。

二、生成容器并启动

执行创建并运行nginx的命令

$ docker run -d --name testvue nginx

可以通过docker ps查看所有容器列表,或者通过docker ps | grep test模糊匹配。

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
baa050b4be9e        nginx               "/docker-entrypoin..."   6 seconds ago       Up 6 seconds        80/tcp                              testvue                             testvue

上面的baa050b4be9e是容器id。

可以通过docker exec -it baa050b4be9e bash或者docker exec -it testvue sh命令可以进入容器内部,查看容器内配置文件的路径。

$ docker exec -it baa050b4be9e bash
$ cd /etc/nginx/conf.d
$ ls
default.conf
$ pwd
/etc/nginx/conf.d

/etc/nginx/conf.d/default.conf就是配置文件,然后通过exit命令退出容器内部, 并复制容器里的default.conf配置文件到项目目录。

$ # 复制的格式为`docker cp <nginx-container-name>:/etc/nginx/nginx.conf ./nginx.conf
$ docker cp testvue:/etc/nginx/conf.d/default.conf  /home/vue/conf.d/

当然,如果你要将修改后的配置文件更新回容器中,可以执行以下命令:

$ docker cp ./nginx.conf <nginx-container-name>:/etc/nginx/nginx.conf

上面创建的testvue容器是为了获取配置文件并拷贝出来,现在我们删除testvue容器,并重新以挂载目录的方式创建并运行。

$ docker stop testvue
testvue
$ docker rm testvue
testvue

已挂载目录的方式创建并运行。上面复制出来的配置文件default.conf所在的目录/home/vue/conf.d/,就是要挂载配置文件的目录。

$ docker run -d -p12099:99 --name testvue \
$ > -v /ylxt/sts/ylxt-sts/vue3/dist/:/usr/share/nginx/sts-dev/html/ \
$ > -v /ylxt/sts/ylxt-sts/vue3/conf/:/etc/nginx/conf.d/ nginx 
$ # -d  让容器后台运行。
$ # -p  设置宿主机映射容器的端口,-p宿主机端口:容器端口
$ # -name  设置容器名称
$ # -v  可以挂载宿主机和容器的目录, -v 宿主机目录:容器目录
$ # nginx  最后的nginx是所使用的镜像名称,也可以写成  nginx:版本号 的形式

还有一些其他的根据需求可供配置的参数:

--rm参数,在容器终止运行后自动删除容器文件。

--restart always参数能够使我们在重启docker时,自动启动相关容器。

三、 其他

有时候通过exec -it进入到容器内部访问文件时,会遇到cannot open directory '.': Permission denied错误,是因为没有权限。可以通过以下几种方式解决:

  • 在运行时加--privileged=true,当使用--privileged=true选项运行容器时,Docker会赋予容器几乎与主机相同的权限。
$ docker run --privileged=true -it ubuntu
  • 临时关闭selinux,创建容器运行后,然后再打开
$ etenforce 0
$ etenforce 1
$ # 0 是关闭, 1 是打开