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

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