在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
本文介绍了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 <[email protected]>") 现在开始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 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持极客世界。 |
2022-08-17
2022-11-06
2022-07-18
2022-08-18
2022-07-29
请发表评论