(十)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
posted @ 2018-09-19 10:41  yvhqbat  阅读(893)  评论(0编辑  收藏  举报