查找现成的nginx镜像
可以通过docker search nginx 命令来获取,可以看到有很多,我们一般选取stars最多,即第1个来使用
docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 10691 [OK]
jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 1500 [OK]
richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of… 672 [OK]
jrcs/letsencrypt-nginx-proxy-companion LetsEncrypt container to use with nginx as p… 465 [OK]
webdevops/php-nginx Nginx with PHP-FPM 119 [OK]
……
下载nginx镜像
docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
Digest: sha256:b543f6d0983fbc25b9874e22f4fe257a567111da96fd1d8f1b44315f1236398c
Status: Image is up to date for nginx:latest
可以通过如下命令来验证是否下载成功
docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest fce289e99eb9 8 days ago 1.84kB
nginx latest 7042885a156a 11 days ago 109MB
启动nginx
docker run --name nginx80 -d -p 80:80 -v /Users/alioo/work/docker/nginx/html:/usr/share/nginx/html nginx
命令解释
- –name nginx80 指定创建的容器名称
- -d 以守护进程形式创建
- -p 80:80 将宿主机端口80映射到容器端口80上,命令格式 宿主机端口:容器端口
- -v /Users/alioo/work/docker/nginx/html:/usr/share/nginx/html 将宿主机目录/Users/alioo/work/docker/nginx/html挂载到容器目录usr/share/nginx/html 中
进阶篇
上述方式只可以指定静态html目录,如果我还想指定nginx配置文件呢
准备自己的nginx.conf 和 conf.d/default.conf:
vi /Users/alioo/work/docker/nginx/conf/nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
vi /Users/alioo/work/docker/nginx/conf/conf.d/default.conf
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /api{
proxy_pass http://192.168.1.1:9999/api;
# access_log "logs/test.log";
}
}
含配置文件的nginx启动方式
docker run \
--name nginx81 \
-d -p 81:80 \
-v /Users/alioo/work/docker/nginx/html:/usr/share/nginx/html \
-v /Users/alioo/work/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /Users/alioo/work/docker/nginx/conf/conf.d:/etc/nginx/conf.d \
nginx
含配置文件&日志文件的nginx启动方式
docker run \
--name nginx81 \
-d -p 81:80 \
-v /Users/alioo/work/docker/nginx/html:/usr/share/nginx/html \
-v /Users/alioo/work/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /Users/alioo/work/docker/nginx/log:/var/log/nginx/ \
-v '/Users/alioo/work/docker/nginx/conf/conf.d:/etc/nginx/conf.d' \
nginx
如果启动后通过 docker ps -a 发现容器创建失败呢?
- 如果自己知道原因则通过下面命令删除重建
docker container stop nginx81; docker container rm nginx81;
- 如果自己不知道原因,则可以查看容器日志
docker logs nginx81
nginx: [emerg] unexpected end of file, expecting "}" in /etc/nginx/conf.d/default.conf:20
如果还想进入到容器的命令行中玩玩呢,可以使用如下命令
docker exec -it nginx81 /bin/bash