21天转型容器实战营(二手把手制作docker镜像)

本文详细解析了Docker镜像的分层结构,介绍了如何通过Dockerfile构建镜像,包括镜像的创建、修改及提交过程。同时,文章提供了具体的Dockerfile示例,展示了如何优化镜像构建,减少镜像层数。
1 Docker镜像的分层结构

只有容器层是可写的,容器层下面的所有镜像层都是只读的
叠加文件系统:从上往下依次在各镜像层中查找文件
Copy-on-Write:只有当需要修改时才复制一份数据

2基本操作
[root@server-716d6107-1f19-4a64-a11b-534acead5ce6 ~]# docker pull alpine
Using default tag: latest
latest: Pulling from library/alpine
4fe2ade4980c: Pull complete
Digest: sha256:621c2f39f8133acb8e64023a94dbdf0d5ca81896102b9e57c0dc184cadaf5528
Status: Downloaded newer image for alpine:latest
#启动镜像为一个容器,并在容器内添加一个20MB的一个文件
[root@server-716d6107-1f19-4a64-a11b-534acead5ce6 ~]# docker run -it alpine sh
/ # dd if=/dev/zero of=lei_temp bs=10M count=2
2+0 records in
2+0 records out

/ # ls -lh
-rw-r--r--    1 root     root       20.0M Dec  5 01:20 lei_temp

/ # [root@server-716d6107-1f19-4a64-a11b-534acead5ce6 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
a19e4e581ed1        alpine              "sh"                2 minutes ago       Up 2 minutes                            confident_brown

之后退出容器 ctrl+p ;ctrl+q 能够保证容器在推出后依旧在运行
重新提交为一个新的镜像alpine:test
[root@server-716d6107-1f19-4a64-a11b-534acead5ce6 ~]# docker commit a19e4e581ed1 alpine:test
[root@server-716d6107-1f19-4a64-a11b-534acead5ce6 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
alpine              test                6200dbf30b52        5 seconds ago       25.4MB
tomcat              latest              78b258e36eed        2 weeks ago         463MB
alpine              latest              196d12cf6ab1        2 months ago        4.41MB

查看这两个镜像
[root@server-716d6107-1f19-4a64-a11b-534acead5ce6 ~]# docker history 196d12cf6ab1
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
196d12cf6ab1        2 months ago        /bin/sh -c #(nop)  CMD ["/bin/sh"]              0B
<missing>           2 months ago        /bin/sh -c #(nop) ADD file:25c10b1d1b41d46a1…   4.41MB
[root@server-716d6107-1f19-4a64-a11b-534acead5ce6 ~]# docker history 6200dbf30b52
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
6200dbf30b52        2 minutes ago       sh                                              21MB
196d12cf6ab1        2 months ago        /bin/sh -c #(nop)  CMD ["/bin/sh"]              0B
<missing>           2 months ago        /bin/sh -c #(nop) ADD file:25c10b1d1b41d46a1…   4.41MB
[root@server-716d6107-1f19-4a64-a11b-534acead5ce6 ~]#
三 什么是镜像分层

四 什么是Dockerfile文件

通常为了减少镜像的层次不会下面的写法
FROM debian
RUN apt-get install emacs
RUN apt-get install apache2
CMD ["/bin/bash"]
而是把几个RUN命令写在一起,减少镜像分层
FROM debian
RUN apt-get install emacs && apache2
CMD ["/bin/bash"]
五dockerfile参数

六如何使用Dockerfile进行构建镜像
[root@server-716d6107-1f19-4a64-a11b-534acead5ce6 ~]# mkdir -p /root/test/docker_2048
[root@server-716d6107-1f19-4a64-a11b-534acead5ce6 ~]# cd /root/test/docker_2048/
[root@server-716d6107-1f19-4a64-a11b-534acead5ce6 docker_2048]# vi Dockerfile
FROM alpine:3.7
RUN mkdir -p /run/nginx && apk --update add nginx && sed -i "s#return 404;#root /usr/share/nginx/html;#g" /etc/nginx/conf.d/default.conf
COPY 2048 /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g","daemon off;"]

[root@server-716d6107-1f19-4a64-a11b-534acead5ce6 docker_2048]# docker build -f Dockerfile -t 2048:v1 .
Sending build context to Docker daemon   2.56kB
Step 1/5 : FROM alpine:3.7
3.7: Pulling from library/alpine
c67f3896b22c: Pull complete
Digest: sha256:a52b4edb6240d1534d54ee488d7cf15b3778a5cfd0e4161d426c550487cddc5d
Status: Downloaded newer image for alpine:3.7
 ---> 34ea7509dcad
Step 2/5 : RUN mkdir -p /run/nginx && apk --update add nginx && sed -i "s#return 404;#root /usr/share/nginx/html;#g" /etc/nginx/conf.d/default.conf
 ---> Running in fde90132c239
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/community/x86_64/APKINDEX.tar.gz
(1/2) Installing pcre (8.41-r1)
(2/2) Installing nginx (1.12.2-r4)
Executing nginx-1.12.2-r4.pre-install
Executing busybox-1.27.2-r11.trigger
OK: 6 MiB in 15 packages
Removing intermediate container fde90132c239
 ---> 7e6fda347d30
Step 3/5 : COPY 2048 /usr/share/nginx/html
 ---> e6e4478ed06e
Step 4/5 : EXPOSE 80
 ---> Running in bf1eb3736555
Removing intermediate container bf1eb3736555
 ---> abdd2c168fb9
Step 5/5 : CMD ["nginx", "-g","daemon off;"]
 ---> Running in ab1ace4527e4
Removing intermediate container ab1ace4527e4
 ---> c4ebed3bce6a
Successfully built c4ebed3bce6a
Successfully tagged 2048:v1
[root@server-716d6107-1f19-4a64-a11b-534acead5ce6 docker_2048]# docker run -d -p 8085:80 2048:v1
f9d02e7aa16ae9c2af957a1d025f3f6ef6109e208a12519f859595c686fded34
[root@server-716d6107-1f19-4a64-a11b-534acead5ce6 docker_2048]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
f9d02e7aa16a        2048:v1             "nginx -g 'daemon of…"   5 seconds ago       Up 4 seconds        0.0.0.0:8085->80/tcp   pensive_goldwasser
a19e4e581ed1        alpine              "sh"                     30 minutes ago      Up 30 minutes                              confident_brown
[root@server-716d6107-1f19-4a64-a11b-534acead5ce6 docker_2048]#
7华为在线构建代码提交自动构建
https://console.huaweicloud.com/swr/?region=cn-north-1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值