1、搜索 Nginx 镜像
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| 1docker search nginx
2
3#显示
4NAME DESCRIPTION STARS OFFICIAL AUTOMATED
5nginx Official build of Nginx. 12311 [OK]
6jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 1698 [OK]
7richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of… 746 [OK]
8linuxserver/nginx An Nginx container, brought to you by LinuxS… 83
9bitnami/nginx Bitnami nginx Docker Image 73 [OK]
10tiangolo/nginx-rtmp Docker image with Nginx using the nginx-rtmp… 60 [OK]
11nginxdemos/hello NGINX webserver that serves a simple page co… 34 [OK]
12jc21/nginx-proxy-manager Docker container for managing Nginx proxy ho… 31
13jlesage/nginx-proxy-manager Docker container for Nginx Proxy Manager 30 [OK]
14nginx/nginx-ingress NGINX Ingress Controller for Kubernetes 22
15privatebin/nginx-fpm-alpine PrivateBin running on an Nginx, php-fpm & Al… 19 [OK]
16
17 |
2、拉取 Nginx 最新镜像
1 2
| 1docker pull nginx:latest
2 |
3、查看所有镜像
1 2 3 4 5 6 7 8 9 10 11
| 1docker images
2
3#结果
4REPOSITORY TAG IMAGE ID CREATED SIZE
5nginx latest 231d40e811cd 2 weeks ago 126MB
6hello-world latest fce289e99eb9 11 months ago 1.84kB
7
8
9# 如何删除
10docker rmi 镜像id
11 |
4、根据镜像启动容器
1 2 3 4 5 6 7 8 9 10 11
| 1docker run --name nginx -p 8080:80 -d nginx
2
3# 结果
42c2d46ad1ca1195c1f3c806ba9e78b682c83c523ed0b34012a876ac3b242e790
5
6
7# 参数说明:
8--name nginx: 容器名称
9-p 8080:80: 端口进行映射,将本地 8080 端口映射到容器内部的 80 端口
10-d nginx: 设置容器在在后台一直运行
11 |
5、查看所有的容器
1 2 3 4 5 6 7 8
| 1docker ps -a
2
3# 显示结果
4CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
566970b41a12e nginx "nginx -g 'daemon of…" About an hour ago Up 54 minutes 0.0.0.0:8080->80/tcp nginx
61765487ba692 hello-world "/hello" 2 hours ago Exited (0) 2 hours ago xenodochial_moore
7
8 |
6、测试 Nginx
知识点:
1、这里 192.168.1.114 服务器已开启防火墙,但是并没有开放 8080 端口,为什么还是可以正常访问?
原因是安装完 docker 之后,它就会在 iptables 里创建几个 chain,它需要通过 iptables 来实现自身的网络功能。比如你启动容器时候使用指定 -p 8080:80 参数,他会自动向 iptables 里面添加规则
1 2 3 4 5 6 7 8 9
| 1# 查看规则
2iptables -t nat -nL DOCKER
3
4# 显示内容
5Chain DOCKER (2 references)
6target prot opt source destination
7RETURN all -- 0.0.0.0/0 0.0.0.0/0
8DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080 to:172.17.0.2:80
9 |
2、大家都知道 docker run 可以指定端口映射,但是容器一旦生成,有没有一个命令可以直接修改?
1 2 3 4 5 6 7 8 9 10 11 12
| 1# 关闭 doecker 与 nginx
2systemctl stop docker
3docker stop nginx
4
5# 切换到对应容器的 ID
6cd /var/lib/docker/containers/73ed30e4cdc5*
7
8vi hostconfig.json
9
10# 修改新的端口
11"PortBindings":{"80/tcp":[{"HostIp":"","HostPort":"8080"}]}
12 |
7、进入镜像 修改容器内的 Nginx 配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| 1docker exec -it nginx /bin/bash
2
3
4# 参数说明
5exec docker 进入容器命令
6-it 容器中服务别名
7/bin/bash 表示命令行模式 与 -d 后台守护进行模式启动 形成两种运行方式
8
9
10# 进入容器后 就可以像正常系统一样编辑对应的文件
11
12root@66970b41a12e:/# vi /usr/share/nginx/html/index.html
13
14
15# 如果提示 bash: vi: command not found
16
17apt-get update
18apt-get install vim
19
20 |
8、通过挂载文件启动 nginx
(1)、创建相关文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| 1# 创建 nginx 相关目录
2
3mkdir -p /usr/local/nginx/html
4vi /usr/local/nginx/html/index.html
5
6# html内容如下
7<html>
8 <h1>
9 Welcome to docker nginx!
10 </h1>
11</html>
12
13
14# 创建日志目录
15
16mkdir -p /usr/local/nginx/logs
17
18
19# 拷贝nginx容器内 nginx 目录到 /usr/local/nginx 并改目录名称为conf
20
21docker cp nginx:/etc/nginx/ /usr/local/nginx
22mv /usr/local/nginx/nginx /usr/local/nginx/conf
23
24
25# 查看文件
26[root@vm114 nginx]# ll /usr/local/nginx/
27总用量 0
28drwxr-xr-x 3 root root 177 11月 23 09:12 conf
29drwxr-xr-x 2 root root 24 12月 10 15:46 html
30drwxr-xr-x 2 root root 41 12月 10 16:26 logs
31 |
(2)、重启
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| 1# 停止nginx容器
2docker stop nginx
3
4# 删除容器
5docker rm nginx
6
7docker run -p 8080:80 --name nginx \
8-v /usr/local/nginx/html:/usr/share/nginx/html \
9-v /usr/local/nginx/conf:/etc/nginx \
10-v /usr/local/nginx/logs:/var/log/nginx -d nginx
11
12
13-----------------------------------------------------------------------------
14
15# 参数说明
16
17# 将主机中 /nginx/html 目录挂载到容器的 /usr/share/nginx/html 目录
18-v /usr/local/nginx/html:/usr/share/nginx/html
19
20# 将主机中 /nginx/conf 目录挂载到容器的 /etc/nginx 目录
21-v /usr/local/nginx/conf:/etc/nginx
22
23# 将主机中 /nginx/logs 目录挂载到容器的 /var/log/nginx 目录
24-v /usr/local/nginx/logs:/var/log/nginx
25 |
(3)、测试
相关错误解决:
错误1
docker: Error response from daemon: driver failed programming external connectivity on endpoint nginx
解决方法:
1 2 3
| 1systemctl restart docker
2docker run --name nginx -p 8080:80 -d nginx
3 |
完成shell解决方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| 1
2docker run --name nginx -p 80:80 -d nginx
3
4mkdir -p /usr/local/nginx/html
5mkdir -p /usr/local/nginx/logs
6docker cp nginx:/etc/nginx/ /usr/local/nginx
7mv /usr/local/nginx/nginx /usr/local/nginx/conf
8
9mkdir -p /usr/local/nginx/conf/sites-enabled
10mkdir -p /usr/local/nginx/conf/sites-available
11
12docker stop nginx
13docker rm nginx
14
15docker run -p 80:80 --name nginx \
16-v /usr/local/nginx/html:/usr/share/nginx/html \
17-v /usr/local/nginx/conf:/etc/nginx \
18-v /usr/local/nginx/logs:/var/log/nginx -d nginx
19
20
21 |