docker入门实践,实战搭建nginx

查找现成的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

参考文章:https://www.cnblogs.com/hailun1987/p/9671801.html

发布了100 篇原创文章 · 获赞 64 · 访问量 25万+

猜你喜欢

转载自blog.csdn.net/hl_java/article/details/86232900