zoukankan      html  css  js  c++  java
  • (十)Dockfile创建Nginx镜像

    1. 准备 Nginx 程序

    可参考:使用Nginx搭建http服务器

    nginx.conf配置文件,注意Nginx默认是后台运行的,但Docker需要其在前台运行,否则直接退出容器。配置文件中添加daemon off;关闭后台运行。

    -bash-4.2# cat nginx.conf 
    
    #user  nobody;
    worker_processes  2;
    
    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;
    
    #pid        logs/nginx.pid;
    
    daemon off;
    
    events {
        worker_connections  50000;
    }
    
    
    http {
        include       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  logs/access.log  main;
    
        sendfile        on;
        #tcp_nopush     on;
    
        #keepalive_timeout  0;
        keepalive_timeout  65;
    
        #gzip  on;
    
        server {
            listen       80;
            server_name  localhost;
    
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
    
            location / {
                root   html;
                index  index.html index.htm;
            }
    
            #error_page  404              /404.html;
    
            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
    
            # proxy the PHP scripts to Apache listening on 127.0.0.1:80
            #
            #location ~ .php$ {
            #    proxy_pass   http://127.0.0.1;
            #}
    
            # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
            #
            #location ~ .php$ {
            #    root           html;
            #    fastcgi_pass   127.0.0.1:9000;
            #    fastcgi_index  index.php;
            #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            #    include        fastcgi_params;
            #}
    
            # deny access to .htaccess files, if Apache's document root
            # concurs with nginx's one
            #
            #location ~ /.ht {
            #    deny  all;
            #}
        }
    
    
        # another virtual host using mix of IP-, name-, and port-based configuration
        #
        #server {
        #    listen       8000;
        #    listen       somename:8080;
        #    server_name  somename  alias  another.alias;
    
        #    location / {
        #        root   html;
        #        index  index.html index.htm;
        #    }
        #}
    
    
        # HTTPS server
        #
        server {
            listen       443 ssl;
            server_name  localhost;
    
            ssl_certificate      ssl/server.crt;
            ssl_certificate_key  ssl/server.key;
    
            ssl_session_cache    shared:SSL:1m;
            ssl_session_timeout  5m;
    
            ssl_ciphers  HIGH:!aNULL:!MD5;
            ssl_prefer_server_ciphers  on;
    
            location / {
                root   html;
                index  index.html index.htm;
            }
        }
    
    }
    

    启动脚本 start.sh

    #!/bin/bash
    
    ./sbin/nginx -p ./
    

    对于Nginx程序需要打包成.tar文件,然后复制到Docker中之后再解压。

    2. 创建Docker镜像

    Dockerfile

    FROM centos
    RUN mkdir -p /usr/local/
    COPY nginx.tar /usr/local/
    RUN cd /usr/local/ && tar -xvf nginx.tar && rm -rf nginx.tar
    EXPOSE 80
    WORKDIR /usr/local/nginx
    CMD ["sh", "-c", "./start_nginx.sh"]
    

    build

    -bash-4.2# docker build -t mynginx:v1.0.0 -f Dockerfile .    
    Sending build context to Docker daemon 39.64 MB
    Step 1/7 : FROM centos
     ---> 5182e96772bf
    Step 2/7 : RUN mkdir -p /usr/local/
     ---> Using cache
     ---> 8fc14caafbae
    Step 3/7 : COPY nginx.tar /usr/local/
     ---> e768f8697757
    Removing intermediate container 3505feeb28f9
    Step 4/7 : RUN cd /usr/local/ && tar -xvf nginx.tar && rm -rf nginx.tar
     ---> Running in 539c25632fb6
    nginx/
    nginx/conf/
    nginx/conf/fastcgi.conf
    nginx/conf/fastcgi_params
    nginx/conf/koi-utf
    nginx/conf/koi-win
    nginx/conf/mime.types
    nginx/conf/scgi_params
    nginx/conf/uwsgi_params
    nginx/conf/win-utf
    nginx/conf/ssl/
    nginx/conf/ssl/server.crt
    nginx/conf/ssl/server.csr
    nginx/conf/ssl/server.key
    nginx/conf/ssl/server.key.org
    nginx/conf/nginx.conf
    nginx/sbin/
    nginx/sbin/ngx_auto_headers.h
    nginx/sbin/autoconf.err
    nginx/sbin/ngx_auto_config.h
    nginx/sbin/ngx_modules.c
    nginx/sbin/src/
    nginx/sbin/src/core/
    nginx/sbin/src/core/nginx.o
    nginx/sbin/src/core/ngx_log.o
    nginx/sbin/src/core/ngx_palloc.o
    nginx/sbin/src/core/ngx_array.o
    nginx/sbin/src/core/ngx_list.o
    nginx/sbin/src/core/ngx_hash.o
    nginx/sbin/src/core/ngx_buf.o
    nginx/sbin/src/core/ngx_queue.o
    nginx/sbin/src/core/ngx_output_chain.o
    nginx/sbin/src/core/ngx_string.o
    nginx/sbin/src/core/ngx_parse.o
    nginx/sbin/src/core/ngx_parse_time.o
    nginx/sbin/src/core/ngx_inet.o
    nginx/sbin/src/core/ngx_file.o
    nginx/sbin/src/core/ngx_crc32.o
    nginx/sbin/src/core/ngx_murmurhash.o
    nginx/sbin/src/core/ngx_md5.o
    nginx/sbin/src/core/ngx_sha1.o
    nginx/sbin/src/core/ngx_rbtree.o
    nginx/sbin/src/core/ngx_radix_tree.o
    nginx/sbin/src/core/ngx_slab.o
    nginx/sbin/src/core/ngx_times.o
    nginx/sbin/src/core/ngx_shmtx.o
    nginx/sbin/src/core/ngx_connection.o
    nginx/sbin/src/core/ngx_cycle.o
    nginx/sbin/src/core/ngx_spinlock.o
    nginx/sbin/src/core/ngx_rwlock.o
    nginx/sbin/src/core/ngx_cpuinfo.o
    nginx/sbin/src/core/ngx_conf_file.o
    nginx/sbin/src/core/ngx_module.o
    nginx/sbin/src/core/ngx_resolver.o
    nginx/sbin/src/core/ngx_open_file_cache.o
    nginx/sbin/src/core/ngx_crypt.o
    nginx/sbin/src/core/ngx_proxy_protocol.o
    nginx/sbin/src/core/ngx_syslog.o
    nginx/sbin/src/core/ngx_regex.o
    nginx/sbin/src/event/
    nginx/sbin/src/event/modules/
    nginx/sbin/src/event/modules/ngx_epoll_module.o
    nginx/sbin/src/event/ngx_event.o
    nginx/sbin/src/event/ngx_event_timer.o
    nginx/sbin/src/event/ngx_event_posted.o
    nginx/sbin/src/event/ngx_event_accept.o
    nginx/sbin/src/event/ngx_event_connect.o
    nginx/sbin/src/event/ngx_event_pipe.o
    nginx/sbin/src/event/ngx_event_openssl.o
    nginx/sbin/src/event/ngx_event_openssl_stapling.o
    nginx/sbin/src/os/
    nginx/sbin/src/os/unix/
    nginx/sbin/src/os/unix/ngx_time.o
    nginx/sbin/src/os/unix/ngx_errno.o
    nginx/sbin/src/os/unix/ngx_alloc.o
    nginx/sbin/src/os/unix/ngx_files.o
    nginx/sbin/src/os/unix/ngx_socket.o
    nginx/sbin/src/os/unix/ngx_recv.o
    nginx/sbin/src/os/unix/ngx_readv_chain.o
    nginx/sbin/src/os/unix/ngx_udp_recv.o
    nginx/sbin/src/os/unix/ngx_send.o
    nginx/sbin/src/os/unix/ngx_writev_chain.o
    nginx/sbin/src/os/unix/ngx_udp_send.o
    nginx/sbin/src/os/unix/ngx_udp_sendmsg_chain.o
    nginx/sbin/src/os/unix/ngx_channel.o
    nginx/sbin/src/os/unix/ngx_shmem.o
    nginx/sbin/src/os/unix/ngx_process.o
    nginx/sbin/src/os/unix/ngx_daemon.o
    nginx/sbin/src/os/unix/ngx_setaffinity.o
    nginx/sbin/src/os/unix/ngx_setproctitle.o
    nginx/sbin/src/os/unix/ngx_posix_init.o
    nginx/sbin/src/os/unix/ngx_user.o
    nginx/sbin/src/os/unix/ngx_dlopen.o
    nginx/sbin/src/os/unix/ngx_process_cycle.o
    nginx/sbin/src/os/unix/ngx_linux_init.o
    nginx/sbin/src/os/unix/ngx_linux_sendfile_chain.o
    nginx/sbin/src/os/win32/
    nginx/sbin/src/http/
    nginx/sbin/src/http/v2/
    nginx/sbin/src/http/modules/
    nginx/sbin/src/http/modules/perl/
    nginx/sbin/src/http/modules/ngx_http_log_module.o
    nginx/sbin/src/http/modules/ngx_http_chunked_filter_module.o
    nginx/sbin/src/http/modules/ngx_http_range_filter_module.o
    nginx/sbin/src/http/modules/ngx_http_gzip_filter_module.o
    nginx/sbin/src/http/modules/ngx_http_ssi_filter_module.o
    nginx/sbin/src/http/modules/ngx_http_charset_filter_module.o
    nginx/sbin/src/http/modules/ngx_http_userid_filter_module.o
    nginx/sbin/src/http/modules/ngx_http_headers_filter_module.o
    nginx/sbin/src/http/modules/ngx_http_not_modified_filter_module.o
    nginx/sbin/src/http/modules/ngx_http_static_module.o
    nginx/sbin/src/http/modules/ngx_http_autoindex_module.o
    nginx/sbin/src/http/modules/ngx_http_index_module.o
    nginx/sbin/src/http/modules/ngx_http_mirror_module.o
    nginx/sbin/src/http/modules/ngx_http_try_files_module.o
    nginx/sbin/src/http/modules/ngx_http_auth_basic_module.o
    nginx/sbin/src/http/modules/ngx_http_access_module.o
    nginx/sbin/src/http/modules/ngx_http_limit_conn_module.o
    nginx/sbin/src/http/modules/ngx_http_limit_req_module.o
    nginx/sbin/src/http/modules/ngx_http_geo_module.o
    nginx/sbin/src/http/modules/ngx_http_map_module.o
    nginx/sbin/src/http/modules/ngx_http_split_clients_module.o
    nginx/sbin/src/http/modules/ngx_http_referer_module.o
    nginx/sbin/src/http/modules/ngx_http_rewrite_module.o
    nginx/sbin/src/http/modules/ngx_http_ssl_module.o
    nginx/sbin/src/http/modules/ngx_http_proxy_module.o
    nginx/sbin/src/http/modules/ngx_http_fastcgi_module.o
    nginx/sbin/src/http/modules/ngx_http_uwsgi_module.o
    nginx/sbin/src/http/modules/ngx_http_scgi_module.o
    nginx/sbin/src/http/modules/ngx_http_memcached_module.o
    nginx/sbin/src/http/modules/ngx_http_empty_gif_module.o
    nginx/sbin/src/http/modules/ngx_http_browser_module.o
    nginx/sbin/src/http/modules/ngx_http_upstream_hash_module.o
    nginx/sbin/src/http/modules/ngx_http_upstream_ip_hash_module.o
    nginx/sbin/src/http/modules/ngx_http_upstream_least_conn_module.o
    nginx/sbin/src/http/modules/ngx_http_upstream_keepalive_module.o
    nginx/sbin/src/http/modules/ngx_http_upstream_zone_module.o
    nginx/sbin/src/http/modules/ngx_http_stub_status_module.o
    nginx/sbin/src/http/ngx_http.o
    nginx/sbin/src/http/ngx_http_core_module.o
    nginx/sbin/src/http/ngx_http_special_response.o
    nginx/sbin/src/http/ngx_http_request.o
    nginx/sbin/src/http/ngx_http_parse.o
    nginx/sbin/src/http/ngx_http_request_body.o
    nginx/sbin/src/http/ngx_http_variables.o
    nginx/sbin/src/http/ngx_http_script.o
    nginx/sbin/src/http/ngx_http_upstream.o
    nginx/sbin/src/http/ngx_http_upstream_round_robin.o
    nginx/sbin/src/http/ngx_http_file_cache.o
    nginx/sbin/src/http/ngx_http_write_filter_module.o
    nginx/sbin/src/http/ngx_http_header_filter_module.o
    nginx/sbin/src/http/ngx_http_postpone_filter_module.o
    nginx/sbin/src/http/ngx_http_copy_filter_module.o
    nginx/sbin/src/mail/
    nginx/sbin/src/stream/
    nginx/sbin/src/misc/
    nginx/sbin/Makefile
    nginx/sbin/ngx_modules.o
    nginx/sbin/nginx
    nginx/sbin/nginx.8
    nginx/client_body_temp/
    nginx/proxy_temp/
    nginx/fastcgi_temp/
    nginx/uwsgi_temp/
    nginx/scgi_temp/
    nginx/logs/
    nginx/logs/error.log
    nginx/logs/access.log
    nginx/html/
    nginx/html/50x.html
    nginx/html/index.html
    nginx/html/test.txt
    nginx/html/AlgorithmRepository/
    nginx/start_nginx.sh
    nginx/stop_nginx.sh
     ---> 61e1163819cc
    Removing intermediate container 539c25632fb6
    Step 5/7 : EXPOSE 80
     ---> Running in e020fe25da86
     ---> 2d1e61ff8894
    Removing intermediate container e020fe25da86
    Step 6/7 : WORKDIR /usr/local/nginx
     ---> de8c75fd5c68
    Removing intermediate container 689e998286a2
    Step 7/7 : CMD sh -c ./start_nginx.sh
     ---> Running in c711c26dce09
     ---> 571fee6b44d1
    Removing intermediate container c711c26dce09
    Successfully built 571fee6b44d1
    -bash-4.2# docker image ls
    REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
    mynginx                  v1.0.0              571fee6b44d1        5 seconds ago       239 MB
    mynginx                  v6                  a5261af904e8        About an hour ago   241 MB
    ubuntu                   latest              cd6d8154f1e1        13 days ago         84.1 MB
    nginx                    latest              71c43202b8ac        2 weeks ago         109 MB
    centos                   latest              5182e96772bf        6 weeks ago         200 MB
    redis                    latest              4e8db158f18d        6 weeks ago         83.4 MB
    python                   latest              825141134528        6 weeks ago         922 MB
    wurstmeister/kafka       latest              e4c6cedf70f9        6 weeks ago         312 MB
    httpd                    latest              11426a19f1a2        7 weeks ago         178 MB
    google/cadvisor          latest              75f88e3ec333        9 months ago        62.2 MB
    wurstmeister/zookeeper   latest              351aa00d2fe9        22 months ago       478 MB
    -bash-4.2# 
    

    3. docker run

    -bash-4.2# docker run -dit --rm -p 1992:80 --name mynginx mynginx:v1.0.0    
    a009ba7ae4c08e3c48efef2d4e64a047f40cafc48c15fe56f5e8cbba4db8dc15
    -bash-4.2# 
    
    # docker run -it --rm -P --name mynginx mynginx:v1.0.0 bash
    
    -bash-4.2# docker container ls
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
    a009ba7ae4c0        mynginx:v1.0.0      "sh -c ./start_ngi..."   14 seconds ago      Up 13 seconds       0.0.0.0:1992->80/tcp   mynginx
    

    测试:在浏览器中输入网址 http://10.86.10.214:1992/

    4. 管理数据

    /usr/local/nginx/html
    

    错误的挂载

    -bash-4.2# docker run -it --rm -p 1992:80 --name mynginx -v ./:/usr/local/nginx/html mynginx:v1.0.0
    docker: Error response from daemon: create ./: "./" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed. If you intented to pass a host directory, use absolute path.
    See 'docker run --help'.
    

    正确的挂载

    -bash-4.2# pwd
    /home/yvhqbat/docker/nginx_docker
    -bash-4.2# docker run -it --rm -p 1992:80 --name mynginx -v /home/yvhqbat/docker/nginx_docker:/usr/local/nginx/html mynginx:v1.0.0  
    
    

    5. Docker 镜像的 save & load

    -bash-4.2# docker image --help
    
    Usage:  docker image COMMAND
    
    Manage images
    
    Options:
          --help   Print usage
    
    Commands:
      build       Build an image from a Dockerfile
      history     Show the history of an image
      import      Import the contents from a tarball to create a filesystem image
      inspect     Display detailed information on one or more images
      load        Load an image from a tar archive or STDIN
      ls          List images
      prune       Remove unused images
      pull        Pull an image or a repository from a registry
      push        Push an image or a repository to a registry
      rm          Remove one or more images
      save        Save one or more images to a tar archive (streamed to STDOUT by default)
      tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
    
    Run 'docker image COMMAND --help' for more information on a command.
    
    -bash-4.2# docker image save --help
    
    Usage:  docker image save [OPTIONS] IMAGE [IMAGE...]
    
    Save one or more images to a tar archive (streamed to STDOUT by default)
    
    Options:
          --help            Print usage
      -o, --output string   Write to a file, instead of STDOUT
    
    
    -bash-4.2# docker image save -o mynginx.tar mynginx:v1.0.0
    
    -bash-4.2# ls
    mynginx.tar
    
    -bash-4.2# docker image load --help
    
    Usage:  docker image load [OPTIONS]
    
    Load an image from a tar archive or STDIN
    
    Options:
          --help           Print usage
      -i, --input string   Read from tar archive file, instead of STDIN
      -q, --quiet          Suppress the load output
    
    -bash-4.2# docker image load -i mynginx.tar 
    4d887ff0a2a6: Loading layer [==================================================>] 19.83 MB/19.83 MB
    f5ee131f11bf: Loading layer [==================================================>] 19.82 MB/19.82 MB
    Loaded image: mynginx:v1.0.0
    -bash-4.2# docker image ls
    REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
    mynginx                  v1.0.0              571fee6b44d1        3 hours ago         239 MB
    
  • 相关阅读:
    思路不够清晰
    深思不够
    [Android学习笔记]理解焦点处理原理的相关记录
    移动端自动化测试(二)之 Appium常用的API(python)函数介绍
    移动端自动化测试(一)之 Appium+Pyhton环境准备篇
    如何修改上线网站
    sublime如何自动保存
    自动化元素定位
    OC 字典 存储联系人信息 求大神优化代码
    我的第一个字典-Dictionary
  • 原文地址:https://www.cnblogs.com/walkinginthesun/p/9673235.html
Copyright © 2011-2022 走看看