一、安装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 是打开