docker运行nginx镜像教程及命令
前言:
先提醒一下最容易忘记的,确保使用的防火墙端口已开启;
需要实现的功能:
- 使用docker启动nginx服务
- docker开机自启动
- nginx服务开机自启动
这样就不用因为服务器挂掉每次都手动重启服务了
环境:
服务器:目前使用的是三·丰·云免费云服务器(另外有免费虚拟主机,免备案服务),前面在服务器上试着跑了一个nignx和两个node服务,访问基本没啥压力,1G的内存还是够够的,当然,如果是线上项目需要,像搭建博客,个人觉得2G的内存会更合适一点。
容器:docker
镜像:nginx
安装docker
curl -sSL https://get.daocloud.io/docker | sh
运行docker
systemctl start docker
如果不运行docker,直接执行后面的操作会报错:
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
设置开启启动docker;不然每次重启主机还得手动运行docker
systemctl enable docker
参数:
enable:自启动; disable:禁止自启动
拉取nignx镜像
docker pull nginx
查看本地镜像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest c919045c4c2b 42 hours ago 141MB
运行镜像
docker run --name nginx-test -p 8003:80 -d nginx
参数说明:
- --name nginx-test:容器名称。
- -p 8003:80: 端口进行映射,将本地 8003 端口映射到容器内部的 80 端口。
- -d nginx: 设置容器在在后台一直运行。
访问nginx
踩坑:如果发现访问不到,页面一直打不开,可以排除以下原因
- 防火墙端口是否开启
常用命令:
查看防火墙开启的端口命令:
firewall-cmd --list-ports
开启端口8003(还需执行下面重启命令才能生效)
firewall-cmd --zone=public --add-port=8003/tcp --permanent
重启
firewall-cmd --reload
2. nginx配置是否正确,一般不用配置,默认80端口可以直接访问
查看容器:
docker ps -a
-a可以查看所有容器,去掉-a只显示正在运行的容器
删除容器:需要指定container ID<容器 ID>
docker rm -f 1e560fca3906
停止容器:
docker stop <容器 ID>
启动停止的容器:
docker start <容器 ID>
启动并进入容器:
docker run -it nginx /bin/bash
参数说明:
- -i: 交互式操作。
- -t: 终端。
- nginx: nginx 镜像。
- /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
exit退出容器会停止运行
进入已运行的容器:
docker exec -it <容器 ID> /bin/bash
推荐使用:docker exec进入容器,使用exit退出容器不会停止; docker attach <容器 ID>进入容器,使用exit退出容器会停止
退出容器:
exit
设置容器开机自动重启(需要重启docker才能生效哦)
// 启动容器
docker run --restart=always --name nginx-test -p 8003:80 -d nginx
systemctl restart docker
或者
// 更新已启动的容器
docker container update --restart=always <容器ID>
systemctl restart docker
最后:容器自启动遇到一个小坑,设置了--restart=always,但是重启服务器之后,发现docker并没有自启动nginx服务,最后才发现是需要手动重启下docker。