docker 手动构建新镜像的方法

 更新时间:2018年12月03日 11:06:52   作者:hellozhxy  
这篇文章主要介绍了docker 手动构建新镜像的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

本文介绍了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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Docker使用run命令部署Nginx的完整指南

    Docker使用run命令部署Nginx的完整指南

    容器化技术正在彻底改变现代应用的部署方式,而 Docker 作为这一领域的先驱,为开发者提供了快速构建、交付和运行应用的能力,下面小编就为大家介绍一下Docker如何通过run命令部署Nginx吧
    2025-03-03
  • docker-compose启动springboot项目连接mysql问题

    docker-compose启动springboot项目连接mysql问题

    这篇文章主要介绍了docker-compose启动springboot项目连接mysql问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • docker安装Redis高可用实现一主二从三哨兵

    docker安装Redis高可用实现一主二从三哨兵

    redis提供了哨兵模式保证redis实现高可用,本文主要介绍了docker安装Redis高可用实现一主二从三哨兵,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2024-02-02
  • docker搭建nacos1.3.0的实现

    docker搭建nacos1.3.0的实现

    这篇文章主要介绍了docker搭建nacos1.3.0的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 详解ASP.NET Core Docker部署

    详解ASP.NET Core Docker部署

    这篇文章主要介绍了详解ASP.NET Core Docker部署。详细介绍了如何在Docker容器中运行ASP.NET Core应用程序。有兴趣的可以了解一下。
    2016-12-12
  • Jenkins Pipeline中Docker镜像构建与推送的常见问题及解决方案

    Jenkins Pipeline中Docker镜像构建与推送的常见问题及解决方案

    在现代 DevOps 实践中,Jenkins 作为一款流行的持续集成和持续交付(CI/CD)工具,被广泛应用于自动化构建、测试和部署流程,然而,在实际使用 Jenkins Pipeline 进行 Docker 镜像构建和推送的过程中,可能会遇到各种问题,本文将通过一个具体的案例给大家详细的介绍一下
    2025-01-01
  • 详解Docker学习笔记之搭建一个JAVA Tomcat运行环境

    详解Docker学习笔记之搭建一个JAVA Tomcat运行环境

    本篇文章主要介绍了详解Docker学习笔记之搭建一个JAVA Tomcat运行环境,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • Docker 环境运行 Mysql 和开启 Binlog 配置主从同步的设置方法

    Docker 环境运行 Mysql 和开启 Binlog 配置主从同步的设置方法

    今天给大家分享Docker 环境运行 Mysql 和开启 Binlog 配置主从同步的设置方法,利用docker模拟mysql设置的主从同步,通过两种方式给大家介绍的非常详细,需要的朋友参考下吧
    2021-06-06
  • docker prune命令定时清理不常用数据的操作方法

    docker prune命令定时清理不常用数据的操作方法

    使用docker引擎服务时间久了,会发现磁盘空间越来越大,现在要删除关于docker相关不用的数据来释放磁盘空间,这篇文章主要介绍了docker prune命令 可定时清理不常用数据,需要的朋友可以参考下
    2022-10-10
  • docker nginx 部署多个项目的示例方法

    docker nginx 部署多个项目的示例方法

    这篇文章主要介绍了docker nginx 部署多个项目的示例方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11

最新评论