设为首页 收藏本站
查看: 950|回复: 0

[经验分享] docker之手动构建新的镜像

[复制链接]

尚未签到

发表于 2017-11-17 10:21:14 | 显示全部楼层 |阅读模式
  查看本地现有镜像:



[iyunv@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并进入到容器内:



[iyunv@docker ~]# docker run -it --name=web centos /bin/bash
[iyunv@bab3b6991467 /]#
  然后在容器内进行安装nginx服务:



[iyunv@bab3b6991467 /]# cd /usr/local/src/
[iyunv@bab3b6991467 src]# yum install wget vim
  这里采用编译安装nginx,所以下载nginx源码包,并安装好编译环境:



[iyunv@bab3b6991467 src]# wget http://nginx.org/download/nginx-1.12.2.tar.gz
  编译环境:



[iyunv@bab3b6991467 src]# yum install gcc gcc-c++ glibc make autoconf openssl openssl-devel
  安装nginx的一些依赖包:



[iyunv@bab3b6991467 src]# yum install libxslt-devel -y gd gd-devel GeoIP GeoIP-devel pcre pcre-devel
  然后开支执行安装:



[iyunv@bab3b6991467 src]# ll
total 960
-rw-r--r--. 1 root root 981687 Oct 17 13:20 nginx-1.12.2.tar.gz
[iyunv@bab3b6991467 src]# tar xf nginx-1.12.2.tar.gz
[iyunv@bab3b6991467 src]# cd nginx-1.12.2
[iyunv@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命令的一个参数:



[iyunv@bab3b6991467 ~]# /usr/local/nginx/sbin/nginx -h
  -g directives : set global directives out of configuration file
  -g:为nginx的配置文件设置指令
  现在退出container,回到host本机



[iyunv@bab3b6991467 ~]# exit
exit
  查看此时容器的状态:



[iyunv@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容器进行加层成一个新镜像:



[iyunv@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:



[iyunv@docker ~]# docker commit -m "compile nginx on centos" web wadeson/centos_nginx:v1
sha256:210a202d37b8d2c31155c29adf0c7c0b49cfab7ff38234109919de7f4e76d1de
  查看本地镜像:



[iyunv@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
DSC0000.png

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



[iyunv@docker ~]# docker run -d -p80:80 wadeson/centos_nginx:v1 /usr/local/nginx/sbin/nginx -g "daemon off;"
c12669357e2b09a05a396ac480a04dd1956303b784f894b615d4edb889a737ab
  然后查看container:



[iyunv@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服务已经开启了,于是进行访问:
DSC0001.png

  于是整个手动构建就成功了
  针对上面的一些命令做下解释:
  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的运行进程:



[iyunv@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进入到容器内:



[iyunv@docker ~]# docker exec -it c12669357e2b /bin/bash
[iyunv@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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-407846-1-1.html 上篇帖子: VMware下CenOS7系统的安装及lnmp服务器的搭建 下篇帖子: 系统的目录结构、ls命令及文件类型、alias命令
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表