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
Comments NOTHING