zoukankan      html  css  js  c++  java
  • docker之手动构建新的镜像

    查看本地现有镜像:

    [root@docker ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    nginx               latest              c59f17fe53b0        4 days ago          108MB
    ubuntu              latest              747cb2d60bbe        3 weeks ago         122MB
    centos              latest              196e0ce0c9fb        6 weeks ago         197MB

    现在利用基础镜像centos,在此基础上手动构建一个web服务,这里采用nginx

    启动一个container并进入到容器内:

    [root@docker ~]# docker run -it --name=web centos /bin/bash
    [root@bab3b6991467 /]#

    然后在容器内进行安装nginx服务:

    [root@bab3b6991467 /]# cd /usr/local/src/
    [root@bab3b6991467 src]# yum install wget vim

    这里采用编译安装nginx,所以下载nginx源码包,并安装好编译环境:

    [root@bab3b6991467 src]# wget http://nginx.org/download/nginx-1.12.2.tar.gz

    编译环境:

    [root@bab3b6991467 src]# yum install gcc gcc-c++ glibc make autoconf openssl openssl-devel

    安装nginx的一些依赖包:

    [root@bab3b6991467 src]# yum install libxslt-devel -y gd gd-devel GeoIP GeoIP-devel pcre pcre-devel

    然后开支执行安装:

    [root@bab3b6991467 src]# ll
    total 960
    -rw-r--r--. 1 root root 981687 Oct 17 13:20 nginx-1.12.2.tar.gz
    [root@bab3b6991467 src]# tar xf nginx-1.12.2.tar.gz 
    [root@bab3b6991467 src]# cd nginx-1.12.2
    [root@bab3b6991467 nginx-1.12.2]# ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-file-aio  --with-http_ssl_module  --with-http_realip_module    --with-http_addition_module    --with-http_xslt_module   --with-http_image_filter_module    --with-http_geoip_module  --with-http_sub_module  --with-http_dav_module --with-http_flv_module    --with-http_mp4_module --with-http_gunzip_module  --with-http_gzip_static_module  --with-http_auth_request_module  --with-http_random_index_module   --with-http_secure_link_module   --with-http_degradation_module   --with-http_stub_status_module

    创建需要用到的用户:

    useradd -M -s /sbin/nologin nginx

    继续编译:

    make && make install
    chown -R nginx:nginx /usr/local/nginx/

    这里需要介绍nginx命令的一个参数:

    [root@bab3b6991467 ~]# /usr/local/nginx/sbin/nginx -h 
      -g directives : set global directives out of configuration file

    -g:为nginx的配置文件设置指令

    现在退出container,回到host本机

    [root@bab3b6991467 ~]# exit
    exit

    查看此时容器的状态:

    [root@docker ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
    bab3b6991467        centos              "/bin/bash"         37 minutes ago      Exited (0) 21 seconds ago                       web

    利用docker diff查看该容器进行了哪些修改,由于输出太多,这里不给予显示了

    利用docker commit将web容器进行加层成一个新镜像:

    [root@docker ~]# docker commit --help
        Usage:  docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
        Create a new image from a container's changes
    
        -m, --message string   Commit message
        -a, --author string    Author (e.g., "John Hannibal Smith <hannibal@a-team.com>")
        

    现在开始commit:

    [root@docker ~]# docker commit -m "compile nginx on centos" web wadeson/centos_nginx:v1
    sha256:210a202d37b8d2c31155c29adf0c7c0b49cfab7ff38234109919de7f4e76d1de

    查看本地镜像:

    [root@docker ~]# docker images
    REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
    wadeson/centos_nginx   v1                  210a202d37b8        33 seconds ago      464MB
    nginx                  latest              c59f17fe53b0        4 days ago          108MB
    ubuntu                 latest              747cb2d60bbe        3 weeks ago         122MB
    centos                 latest              196e0ce0c9fb        6 weeks ago         197MB

    可以看见刚刚docker commit的新镜像了,现在由此镜像进行启动一个container提供nginx服务:

    [root@docker ~]# docker run -d -p80:80 wadeson/centos_nginx:v1 /usr/local/nginx/sbin/nginx -g "daemon off;"
    c12669357e2b09a05a396ac480a04dd1956303b784f894b615d4edb889a737ab

    然后查看container:

    [root@docker ~]# docker ps -l
    CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                NAMES
    c12669357e2b        wadeson/centos_nginx:v1   "/usr/local/nginx/..."   41 seconds ago      Up 40 seconds       0.0.0.0:80->80/tcp   thirsty_murdock

    可以看见nginx服务已经开启了,于是进行访问:

     于是整个手动构建就成功了

    针对上面的一些命令做下解释:

      docker run -d -p80:80 wadeson/centos_nginx:v1 /usr/local/nginx/sbin/nginx -g "daemon off;"

    后面运行的命令都是旨在container的命令,由于没有进行环境变量设置,所以全路径,而nginx -g这个参数是指可以在外面添加指令到nginx的配置文件中,daemon off是指nginx服务不运行在后端而是在前台运行(container中的服务必须运行在前台)

    利用docker top可以查看container的运行进程:

    [root@docker ~]# docker top c12669357e2b
    UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
    root                35468               35451               0                   02:55               ?                   00:00:00            nginx: master process /usr/local/nginx/sbin/nginx -g daemon off;
    1000                35489               35468               0                   02:55               ?                   00:00:00            nginx: worker process

    利用docker exec进入到容器内:

    [root@docker ~]# docker exec -it c12669357e2b /bin/bash
    [root@c12669357e2b /]# ps -ef
    UID         PID   PPID  C STIME TTY          TIME CMD
    root          1      0  0 06:55 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx -g daemon off;
    nginx         5      1  0 06:55 ?        00:00:00 nginx: worker process
    root          6      0  1 07:01 pts/0    00:00:00 /bin/bash
    root         20      6  0 07:01 pts/0    00:00:00 ps -ef

    而使用ctrl+p+q可以将该容器置于后台,而不是马上exited

  • 相关阅读:
    camunda用户的一些简单操作
    assets和static
    mongoDB的常用语法
    服务发现和注册和Eureka
    camunda
    Web API系列(三) 异常处理
    Web API系列(二) Filter的使用以及执行顺序
    Web API系列(一):WEB API的适用场景、第一个实例
    WebAPI前置知识:HTTP与RestfulAPI
    【requirejs】JS模块化工具requirejs教程
  • 原文地址:https://www.cnblogs.com/jsonhc/p/7766561.html
Copyright © 2011-2022 走看看