本文介绍了docker 手动构建新镜像的方法,分享给大家,具体如下:
查看本地现有镜像:
1
2
3
4
5
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并进入到容器内:
1
2
[root@docker ~]# docker run -it –name=web centos /bin/bash
[root@bab3b6991467 /]#
然后在容器内进行安装nginx服务:
1
2
[root@bab3b6991467 /]# cd /usr/local/src/
[root@bab3b6991467 src]# yum install wget vim
这里采用编译安装nginx,所以下载nginx源码包,并安装好编译环境:
1
[root@bab3b6991467 src]# wget http://nginx.org/download/nginx-1.12.2.tar.gz
编译环境:
1
[root@bab3b6991467 src]# yum install gcc gcc-c++ glibc make autoconf openssl openssl-devel
安装nginx的一些依赖包:
1
[root@bab3b6991467 src]# yum install libxslt-devel -y gd gd-devel geoip geoip-devel pcre pcre-devel
然后开支执行安装:
1
2
3
4
5
6
[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
创建需要用到的用户:
1
useradd -m -s /sbin/nologin nginx
继续编译:
1
2
make && make install
chown -r nginx:nginx /usr/local/nginx/
这里需要介绍nginx命令的一个参数:
1
2
[root@bab3b6991467 ~]# /usr/local/nginx/sbin/nginx -h
-g directives : set global directives out of configuration file
-g:为nginx的配置文件设置指令
现在退出container,回到host本机
1
2
[root@bab3b6991467 ~]# exit
exit
查看此时容器的状态:
1
2
3
[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容器进行加层成一个新镜像:
1
2
3
4
5
6
[root@docker ~]# docker commit –help
usage: docker commit [options] container [repository[:tag]]
create a new image from a containers changes
-m, –message string commit message
-a, –author string author (e.g., “john hannibal smith <hannibal@a-team.com>”)
现在开始commit:
1
2
[root@docker ~]# docker commit -m “compile nginx on centos” web wadeson/centos_nginx:v1
sha256:210a202d37b8d2c31155c29adf0c7c0b49cfab7ff38234109919de7f4e76d1de
查看本地镜像:
1
2
3
4
5
6
[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服务:
1
2
[root@docker ~]# docker run -d -p80:80 wadeson/centos_nginx:v1 /usr/local/nginx/sbin/nginx -g “daemon off;”
c12669357e2b09a05a396ac480a04dd1956303b784f894b615d4edb889a737ab
然后查看container:
1
2
3
[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服务已经开启了,于是进行访问:
于是整个手动构建就成功了
针对上面的一些命令做下解释:
1
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的运行进程:
1
2
3
4
[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进入到容器内:
1
2
3
4
5
6
7
[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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/hellozhxy/article/details/80239483
声明: 猿站网有关资源均来自网络搜集与网友提供,任何涉及商业盈利目的的均不得使用,否则产生的一切后果将由您自己承担! 本平台资源仅供个人学习交流、测试使用 所有内容请在下载后24小时内删除,制止非法恶意传播,不对任何下载或转载者造成的危害负任何法律责任!也请大家支持、购置正版! 。本站一律禁止以任何方式发布或转载任何违法的相关信息访客发现请向站长举报,会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。本网站的资源部分来源于网络,如有侵权烦请发送邮件至:2697268773@qq.com进行处理。