云计算方面的面试大多数都要求会容器化,今天带大家来构建一个属于我们自定义的镜像,这个镜像当中是包含女朋友的。废话不多说,我们直接来操作,首先我们要找一个基础镜像,我是从官网上拉的 centos 镜像,默认的标签是 latest。
[root@k8s-node-01 opt]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
d8d02d457314: Pull complete
Digest: sha256:307835c385f656ec2e2fec602cf093224173c51119bbebd602c53c3653a3d6eb
Status: Downloaded newer image for centos:latest
[root@k8s-node-01 opt]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 67fa590cfc1c 9 days ago 202MB
k8s.gcr.io/kube-apiserver v1.13.3 fe242e556a99 6 months ago 181MB
k8s.gcr.io/kube-proxy v1.13.3 98db19758ad4 6 months ago 80.3MB
k8s.gcr.io/kube-controller-manager v1.13.3 0482f6400933 6 months ago 146MB
k8s.gcr.io/kube-scheduler v1.13.3 3a6f709e97a0 6 months ago 79.6MB
k8s.gcr.io/coredns 1.2.6 f59dcacceff4 9 months ago 40MB
k8s.gcr.io/etcd 3.2.24 3cab8e1b9802 11 months ago 220MB
k8s.gcr.io/kubernetes-dashboard-amd64 v1.10.0 0dab2435c100 12 months ago 122MB
quay.io/coreos/flannel v0.10.0-amd64 f0fad859c909 19 months ago 44.6MB
k8s.gcr.io/pause 3.1 da86e6ba6ca1 20 months ago 742kB
拉取下来镜像之后,以防止我们对这个镜像的破坏,所以可以在备份一份。采用 docker tag 命令来进行备份。
[root@k8s-node-01 opt]# docker tag centos:latest tigergao:latest
[root@k8s-node-01 opt]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tigergao latest 67fa590cfc1c 9 days ago 202MB
centos latest 67fa590cfc1c 9 days ago 202MB
k8s.gcr.io/kube-controller-manager v1.13.3 0482f6400933 6 months ago 146MB
k8s.gcr.io/kube-proxy v1.13.3 98db19758ad4 6 months ago 80.3MB
k8s.gcr.io/kube-apiserver v1.13.3 fe242e556a99 6 months ago 181MB
k8s.gcr.io/kube-scheduler v1.13.3 3a6f709e97a0 6 months ago 79.6MB
k8s.gcr.io/coredns 1.2.6 f59dcacceff4 9 months ago 40MB
k8s.gcr.io/etcd 3.2.24 3cab8e1b9802 11 months ago 220MB
k8s.gcr.io/kubernetes-dashboard-amd64 v1.10.0 0dab2435c100 12 months ago 122MB
quay.io/coreos/flannel v0.10.0-amd64 f0fad859c909 19 months ago 44.6MB
k8s.gcr.io/pause 3.1 da86e6ba6ca1 20 months ago 742kB
备份之后此时我们的基础镜像已经有了,那么我们可以来创建一个脚本,这个脚本就相当于互联网公司里面的 Java 的 jar 包一样。
[root@k8s-node-01 opt]# mkdir tigergao
[root@k8s-node-01 opt]# ll
total 129980
drwxr-xr-x 3 root root 17 Aug 9 17:23 cni
-rw-r--r-- 1 root root 36688 Aug 22 2018 container-selinux-2.68-1.el7.noarch.rpm
-rwxr-xr-x. 1 root root 254 Aug 5 18:04 data.sh
-rw-r--r-- 1 root root 61 Aug 30 17:57 Dockerfile
-rw-r--r-- 1 root root 647 Aug 30 17:55 Dockerfile_new
-rw-r--r-- 1 root root 18 Aug 27 17:48 EOF
-rw-r--r--. 1 root root 58549803 Aug 2 20:55 grafana-6.3.0-beta4.x86_64.rpm
drwxr-xr-x 11 root root 4096 Aug 6 14:33 jumpserver
drwxr-xr-x 3 root root 55 Aug 9 10:57 kernel
-rwxr-xr-x 1 root root 40 Aug 30 17:58 main.sh
-rwxr-xr-x 1 root root 257 Aug 6 10:15 mem.sh
-rw-r--r-- 1 root root 74790 Aug 7 14:38 nginx
-rw------- 1 root root 18399472 Aug 6 18:35 nohup.out
-rwxr-xr-x 1 root root 2993 Aug 8 09:44 pipeline.yaml
-rwxr-xr-x 1 root root 55 Aug 6 10:16 planmem.sh
-rwxr-xr-x 1 root root 56 Aug 6 10:11 plan.sh
drwxr-xr-x. 5 3434 3434 144 Aug 30 12:46 prometheus
-rw-r--r--. 1 root root 49425027 Jul 10 23:34 prometheus-2.11.1.linux-amd64.tar.gz
drwxr-xr-x. 2 3434 3434 54 Apr 13 19:39 pushgateway
-rw-r--r--. 1 root root 6561633 Apr 13 19:39 pushgateway-0.8.0.linux-amd64.tar.gz
drwxr-xr-x 5 root root 74 Aug 6 14:28 py3
drwxr-xr-x 2 root root 36 Aug 6 16:42 python
drwxr-xr-x 2 root root 6 Aug 30 18:00 tigergao
[root@k8s-node-01 opt]# mv Dockerfile main.sh tigergao/
我们来看一下这个脚本中的内容如下,其实就是在启动容器后,在终端输出女朋友很有魅力这样的字体。
[root@k8s-node-01 tigergao]# ll
total 8
-rw-r--r-- 1 root root 61 Aug 30 17:57 Dockerfile
-rwxr-xr-x 1 root root 40 Aug 30 17:58 main.sh
[root@k8s-node-01 tigergao]# cat main.sh
#!/bin/bash
echo "girlfriend is magic!"
接下来我们来书写 Dockerfile。如下,大意就是我们利用之前拉下来的 centos 基础镜像,并且将这个脚本放到容器里面的根目录下,之后进行运行脚本。
[root@k8s-node-01 tigergao]# cat main.sh
#!/bin/bash
echo "girlfriend is magic!"
[root@k8s-node-01 tigergao]# cat Dockerfile
from centos:latest
copy main.sh /
CMD ["bash","./main.sh"]
好了,这里需要特别注意,需要将脚本和 Dockerfile 放到同一路径中,因为在构建镜像时,需要依赖。采用docker build 命令去构建即可。
[root@k8s-node-01 opt]# cd tigergao/
[root@k8s-node-01 tigergao]# ll
total 8
-rw-r--r-- 1 root root 61 Aug 30 17:57 Dockerfile
-rwxr-xr-x 1 root root 40 Aug 30 17:58 main.sh
[root@k8s-node-01 tigergao]# docker build -t girlfriend .
Sending build context to Docker daemon 3.072kB
Step 1/3 : from centos:latest
---> 67fa590cfc1c
Step 2/3 : copy main.sh /
---> d3b3135f985c
Step 3/3 : CMD ["bash","./main.sh"]
---> Running in 561c57b53d6d
Removing intermediate container 561c57b53d6d
---> c33d4b0609df
Successfully built c33d4b0609df
Successfully tagged girlfriend:latest
接下来我们看看容器镜像中是否有这个镜像:
[root@k8s-node-01 tigergao]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
girlfriend latest c33d4b0609df 14 seconds ago 202MB
centos latest 67fa590cfc1c 9 days ago 202MB
tigergao latest 67fa590cfc1c 9 days ago 202MB
k8s.gcr.io/kube-proxy v1.13.3 98db19758ad4 6 months ago 80.3MB
k8s.gcr.io/kube-apiserver v1.13.3 fe242e556a99 6 months ago 181MB
k8s.gcr.io/kube-controller-manager v1.13.3 0482f6400933 6 months ago 146MB
k8s.gcr.io/kube-scheduler v1.13.3 3a6f709e97a0 6 months ago 79.6MB
k8s.gcr.io/coredns 1.2.6 f59dcacceff4 9 months ago 40MB
k8s.gcr.io/etcd 3.2.24 3cab8e1b9802 11 months ago 220MB
k8s.gcr.io/kubernetes-dashboard-amd64 v1.10.0 0dab2435c100 12 months ago 122MB
quay.io/coreos/flannel v0.10.0-amd64 f0fad859c909 19 months ago 44.6MB
k8s.gcr.io/pause 3.1 da86e6ba6ca1 20 months ago 742kB
或者也可以直接检索:
[root@k8s-node-01 tigergao]# docker images | grep -i girl
girlfriend latest c33d4b0609df 23 minutes ago 202MB
最后我们可以直接启动容器,来查看终端输出内容:女朋友很有魅力。
[root@k8s-node-01 tigergao]# docker run girlfriend:latest
girlfriend is magic!
[root@k8s-node-01 tigergao]#
戳这里:运维群欢迎你,让我们一起交流和进步。