docker镜像制作

发布于 2023-11-30  690 次阅读


AI 摘要

摘要:Docker镜像制作可以通过手动制作和基于Dockerfile制作两种方式进行。手动制作需要在容器内安装所需软件和配置,并提交为镜像。基于Dockerfile制作则是通过编写Dockerfile文件,定义基础镜像、安装软件和配置,并构建镜像。两种方式都可以实现自定义化的镜像制作,用于快速启动容器和复用配置。

docker镜像制作类似于虚拟机的模板制作,把虚拟机制作成一个哥哥设计好的模板,当需要这个系统的时候,拿出来用,docker镜像制作也类似,有两种方式一种是手动制作,一种是基于DockerFile制作。
启动好一个容器安装常用软件和nginx

手动制作

[root@docker-server ~]# docker run -it centos:7 bash
# 安装wget、epel、nginx等相关常用软件
[root@0195bc1d0f7b ~]# yum install epel-release -y
[root@0195bc1d0f7b ~]# yum install nginx -y
[root@0195bc1d0f7b ~]# yum install vim wget pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop -y

关闭nginx后台运行

[root@0195bc1d0f7b ~]# vim /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
daemon off;

自定义web界面

[root@0195bc1d0f7b ~]# echo 'hello nginx' > /usr/share/nginx/html/index.html 

提交为镜像

[root@docker-server ~]# docker commit --help

Usage:  docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

Create a new image from a container's changes

Options:
  -a, --author string    Author (e.g., "John Hannibal Smith
                         <hannibal@a-team.com>")
  -c, --change list      Apply Dockerfile instruction to the created image
  -m, --message string   Commit message
  -p, --pause            Pause container during commit (default true)
[root@docker-server ~]# docker commit -a "2290714899@qq.com" -m "my nginx image v1" 0195bc1d0f7b centos_nginx:v1    
sha256:c29204bfca8d89a06a3bb841cc6ada3c8202798e8f92b5d24c592d48105379d7
[root@docker-server ~]# docker images
REPOSITORY     TAG       IMAGE ID       CREATED             SIZE
centos_nginx   v1        c29204bfca8d   9 seconds ago       386MB
mycentos       v1        acf250a6cabb   About an hour ago   209MB
nginx          latest    d1a364dc548d   2 weeks ago         133MB
hello-world    latest    d1165f221234   3 months ago        13.3kB
centos         latest    300e315adb2f   6 months ago        209MB

docker commit适用场景:主要作用是将配置好的一些容器复用,再生成新的镜像。 commit是合并了save、load、export、import这几个特性的一个综合性的命令,它主要做了: 1、将container当前的读写层保存下来,保存成一个新层 2、和镜像的历史层一起合并成一个新的镜像 3、如果原本的镜像有3层,commit之后就会有4层,最新的一层为从镜像运行到commit之间对文件系统的修改。
从自己的镜像启动容器

[root@docker-server ~]# docker run -d -p 80:80 --name my_centos_nginx centos_nginx:v1 /usr/sbin/nginx

使用Dockerfile制作

拉去centos镜像

docker pull centos:7

创建文件夹

mkdir -p ./dockerfile/web/nginx

下载源码包编辑Dockerfile文件

cd dokcerfile/web/nginx
wget http://nginx.org/download/nginx-1.20.1.tar.gz
vim Dockerfile
# 第一行先定义基础镜像,后面的本地有效的镜像名,如果本地没有有会从远程仓库下载
FROM centos:7

# 镜像维护者的信息
MAINTAINER 2390714899@qq.com

# 将编译安装nginx的步骤执行一遍 run 运行指定命令
RUN yum install -y vim wget tree lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop

# 上传nginx压缩包
ADD nginx-1.20.1.tar.gz /usr/local/src/

RUN cd /usr/local/src/nginx-1.20.1 \
&& ./configure --prefix=/usr/local/nginx --with-http_sub_module \
&& make \
&& make install \
&& cd /usr/local/nginx 

# 可以添加自己事先准备的配置文件
# ADD nginx.conf /usr/local/nginx/conf/nginx.conf

RUN useradd -s /sbin/nologin nginx \
&& ln -sv /usr/local/nginx/sbin/nginx /usr/sbin/nginx \
&& echo 'test nginx !' > /usr/local/nginx/html/index.html

# 声明端口号
EXPOSE 80 443

CMD ["nginx", "-g", "daemon off;"] #cmd指定启动容器默认执行的命令

构建镜像

docker build -t nginx:v1 .
docker images

测试

docker run -d -it -p 80:80 nginx:v1

上传

  • alipay_img
  • wechat_img
一朝风月,万古长空
最后更新于 2024-01-25