文章目录



Docker Review - dockerfile 实战_给基础镜像增加功能_centos


文件格式

##  Dockerfile文件格式

# This dockerfile uses the ubuntu image
# VERSION 2 - EDITION 1
# Author: docker_user
# Command format: Instruction [arguments / command] ..

# 1、第一行必须指定 基础镜像信息
FROM ubuntu

# 2、维护者信息
MAINTAINER docker_user docker_user@email.com

# 3、镜像操作指令
RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.list
RUN apt-get update && apt-get install -y nginx
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf

# 4、容器启动执行指令
CMD /usr/sbin/nginx

Dockerfile 分为四部分:基础镜像信息、维护者信息、镜像操作指令、容器启动执行指令。


  • 开始必须要指明所基于的镜像名称
  • 接下来通常是维护者信息
  • 后面是镜像操作指令,例如 RUN 指令。每执行一条RUN 指令,镜像添加新的一层,并提交
  • 最后是 CMD 指令,来指明运行容器时的操作命令。

Docker Review - dockerfile 实战_给基础镜像增加功能_centos_02

实操Docker file

给基础镜像centos 增加功能

[root@VM-0-7-centos ~]# docker run -it centos
[root@c967bcaa1b52 /]#
[root@c967bcaa1b52 /]#
[root@c967bcaa1b52 /]#
[root@c967bcaa1b52 /]#
[root@c967bcaa1b52 /]#
[root@c967bcaa1b52 /]# ifconfig 没有ifconfig该命令
bash: ifconfig: command not found
[root@c967bcaa1b52 /]# vim a.txt 没有vim该命令
bash: vim: command not found
[root@c967bcaa1b52 /]#
[root@c967bcaa1b52 /]# exit
exit

启动容器,进入这个容器内,发现 vim 和 ipconfig 命令都是没有的 , 那怎么在搞到镜像里面去呢?

---------请 当家的 dockerfile来秀一秀吧

Docker Review - dockerfile 实战_给基础镜像增加功能_docker_03

dockerfile镜像制作

接下来,我们通过dockerfile 来完成镜像的制作

[root@VM-0-7-centos ~]# pwd
/root
[root@VM-0-7-centos ~]#
[root@VM-0-7-centos ~]#
[root@VM-0-7-centos ~]# mkdir dfiles
[root@VM-0-7-centos ~]#
[root@VM-0-7-centos ~]#
[root@VM-0-7-centos ~]# cd dfiles/
[root@VM-0-7-centos dfiles]# 编写dockerfile文件
[root@VM-0-7-centos dfiles]# vim artisan-centos
[root@VM-0-7-centos dfiles]#
[root@VM-0-7-centos dfiles]#
[root@VM-0-7-centos dfiles]#
[root@VM-0-7-centos dfiles]#
[root@VM-0-7-centos dfiles]#
[root@VM-0-7-centos dfiles]# 如果命令记不住 --help少不了
[root@VM-0-7-centos dfiles]# docker build --help

Usage: docker build [OPTIONS] PATH | URL | -

Build an image from a Dockerfile

Options:
--add-host list Add a custom host-to-IP mapping (host:ip)
--build-arg list Set build-time variables
--cache-from strings Images to consider as cache sources
--cgroup-parent string Optional parent cgroup for the container
--compress Compress the build context using gzip
--cpu-period int Limit the CPU CFS (Completely Fair Scheduler) period
--cpu-quota int Limit the CPU CFS (Completely Fair Scheduler) quota
-c, --cpu-shares int CPU shares (relative weight)
--cpuset-cpus string CPUs in which to allow execution (0-3, 0,1)
--cpuset-mems string MEMs in which to allow execution (0-3, 0,1)
--disable-content-trust Skip image verification (default true)
-f, --file string Name of the Dockerfile (Default is 'PATH/Dockerfile')
--force-rm Always remove intermediate containers
--iidfile string Write the image ID to the file
--isolation string Container isolation technology
--label list Set metadata for an image
-m, --memory bytes Memory limit
--memory-swap bytes Swap limit equal to memory plus swap: '-1' to enable unlimited swap
--network string Set the networking mode for the RUN instructions during build (default "default")
--no-cache Do not use cache when building the image
--pull Always attempt to pull a newer version of the image
-q, --quiet Suppress the build output and print image ID on success
--rm Remove intermediate containers after a successful build (default true)
--security-opt strings Security options
--shm-size bytes Size of /dev/shm
-t, --tag list Name and optionally a tag in the 'name:tag' format
--target string Set the target build stage to build.
--ulimit ulimit Ulimit options (default [])
[root@VM-0-7-centos dfiles]#
[root@VM-0-7-centos dfiles]#

Docker Review - dockerfile 实战_给基础镜像增加功能_docker_04


docker build 通过dockerfile构建镜像

# 通过这个文件构建镜像 
# 命令 docker build -f 文件路径 -t 镜像名:[tag] . (路径)

[root@VM-0-7-centos dfiles]# docker build -f artisan-centos -t artisan-centos:0.1 .
Sending build context to Docker daemon 2.048kB
Step 1/9 : FROM centos
---> 5d0da3dc9764
Step 2/9 : MAINTAINER artisan@artisan.com
---> Running in 27cb6c9d895c
Removing intermediate container 27cb6c9d895c
---> 29294f1d8e36
Step 3/9 : ENV MYPATH /usr/local
---> Running in 05c3deb8fd0f
Removing intermediate container 05c3deb8fd0f
---> db06a98c3f9d
Step 4/9 : WORKDIR $MYPATH
---> Running in 2b1072aaba22
Removing intermediate container 2b1072aaba22
---> a8849a4c2da5
Step 5/9 : RUN yum -y install vim
---> Running in 1ed0427ca12b
CentOS Linux 8 - AppStream 8.8 MB/s | 9.3 MB 00:01
CentOS Linux 8 - BaseOS 19 MB/s | 7.5 MB 00:00
CentOS Linux 8 - Extras 27 kB/s | 10 kB 00:00
Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
vim-enhanced x86_64 2:8.0.1763-15.el8 appstream 1.4 M
Installing dependencies:
gpm-libs x86_64 1.20.7-17.el8 appstream 39 k
vim-common x86_64 2:8.0.1763-15.el8 appstream 6.3 M
vim-filesystem noarch 2:8.0.1763-15.el8 appstream 48 k
which x86_64 2.21-12.el8 baseos 49 k

Transaction Summary
================================================================================
Install 5 Packages

Total download size: 7.8 M
Installed size: 30 M
Downloading Packages:
(1/5): gpm-libs-1.20.7-17.el8.x86_64.rpm 364 kB/s | 39 kB 00:00
(2/5): vim-filesystem-8.0.1763-15.el8.noarch.rp 818 kB/s | 48 kB 00:00
(3/5): which-2.21-12.el8.x86_64.rpm 1.3 MB/s | 49 kB 00:00
(4/5): vim-enhanced-8.0.1763-15.el8.x86_64.rpm 5.3 MB/s | 1.4 MB 00:00
(5/5): vim-common-8.0.1763-15.el8.x86_64.rpm 17 MB/s | 6.3 MB 00:00
--------------------------------------------------------------------------------
Total 5.6 MB/s | 7.8 MB 00:01
warning: /var/cache/dnf/appstream-02e86d1c976ab532/packages/gpm-libs-1.20.7-17.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
CentOS Linux 8 - AppStream 130 kB/s | 1.6 kB 00:00
Importing GPG key 0x8483C65D:
Userid : "CentOS (CentOS Official Signing Key) <security@centos.org>"
Fingerprint: 99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
Key imported successfully
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : which-2.21-12.el8.x86_64 1/5
Installing : vim-filesystem-2:8.0.1763-15.el8.noarch 2/5
Installing : vim-common-2:8.0.1763-15.el8.x86_64 3/5
Installing : gpm-libs-1.20.7-17.el8.x86_64 4/5
Running scriptlet: gpm-libs-1.20.7-17.el8.x86_64 4/5
Installing : vim-enhanced-2:8.0.1763-15.el8.x86_64 5/5
Running scriptlet: vim-enhanced-2:8.0.1763-15.el8.x86_64 5/5
Running scriptlet: vim-common-2:8.0.1763-15.el8.x86_64 5/5
Verifying : gpm-libs-1.20.7-17.el8.x86_64 1/5
Verifying : vim-common-2:8.0.1763-15.el8.x86_64 2/5
Verifying : vim-enhanced-2:8.0.1763-15.el8.x86_64 3/5
Verifying : vim-filesystem-2:8.0.1763-15.el8.noarch 4/5
Verifying : which-2.21-12.el8.x86_64 5/5

Installed:
gpm-libs-1.20.7-17.el8.x86_64 vim-common-2:8.0.1763-15.el8.x86_64
vim-enhanced-2:8.0.1763-15.el8.x86_64 vim-filesystem-2:8.0.1763-15.el8.noarch
which-2.21-12.el8.x86_64

Complete!
Removing intermediate container 1ed0427ca12b
---> f3576d019b4c
Step 6/9 : RUN yum -y install net-tools
---> Running in 34aa99eae420
Last metadata expiration check: 0:00:12 ago on Wed Oct 13 16:48:57 2021.
Dependencies resolved.
================================================================================
Package Architecture Version Repository Size
================================================================================
Installing:
net-tools x86_64 2.0-0.52.20160912git.el8 baseos 322 k

Transaction Summary
================================================================================
Install 1 Package

Total download size: 322 k
Installed size: 942 k
Downloading Packages:
net-tools-2.0-0.52.20160912git.el8.x86_64.rpm 9.5 MB/s | 322 kB 00:00
--------------------------------------------------------------------------------
Total 604 kB/s | 322 kB 00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : net-tools-2.0-0.52.20160912git.el8.x86_64 1/1
Running scriptlet: net-tools-2.0-0.52.20160912git.el8.x86_64 1/1
Verifying : net-tools-2.0-0.52.20160912git.el8.x86_64 1/1

Installed:
net-tools-2.0-0.52.20160912git.el8.x86_64

Complete!
Removing intermediate container 34aa99eae420
---> d71b7d53d1e3
Step 7/9 : EXPOSE 80
---> Running in 0cb2dfa57d63
Removing intermediate container 0cb2dfa57d63
---> 8c68c1ba1995
Step 8/9 : CMD echo $MYPATH
---> Running in 5d1480e72c54
Removing intermediate container 5d1480e72c54
---> 03bb5037e4cd
Step 9/9 : CMD /bin/bash
---> Running in 453d2bddf83b
Removing intermediate container 453d2bddf83b
---> fed722a5031b
Successfully built fed722a5031b
Successfully tagged artisan-centos:0.1
[root@VM-0-7-centos dfiles]#
[root@VM-0-7-centos dfiles]#
[root@VM-0-7-centos dfiles]#

Docker Review - dockerfile 实战_给基础镜像增加功能_docker_05


启动新镜像,验证

启动这个镜像,再次进入这个容器内,看看 vim 和 ipconfig 这

上一步指定了tag 0.1 ,所里这里要指定tag号,不然会找latest
[root@VM-0-7-centos dfiles]# docker run -it artisan-centos:0.1
[root@21ec25b4785f local]#
[root@21ec25b4785f local]#
[root@21ec25b4785f local]#
[root@21ec25b4785f local]#
[root@21ec25b4785f local]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.18.0.3 netmask 255.255.0.0 broadcast 172.18.255.255
ether 02:42:ac:12:00:03 txqueuelen 0 (Ethernet)
RX packets 7 bytes 586 (586.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

[root@21ec25b4785f local]# vim a.txt
[root@21ec25b4785f local]#

Docker Review - dockerfile 实战_给基础镜像增加功能_docker_06


docker history 查看镜像历史信息

[root@VM-0-7-centos ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
21ec25b4785f artisan-centos:0.1 "/bin/sh -c /bin/bash" 13 minutes ago Up 13 minutes 80/tcp tender_mcclintock
3eab753d9573 portainer/portainer "/portainer" 7 days ago Up 7 days 0.0.0.0:8000->8000/tcp, :::8000->8000/tcp, 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp portainer


[root@VM-0-7-centos ~]#
[root@VM-0-7-centos ~]# docker history artisan-centos:0.1
IMAGE CREATED CREATED BY SIZE COMMENT
fed722a5031b 15 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "/bin… 0B
03bb5037e4cd 15 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "echo… 0B
8c68c1ba1995 15 minutes ago /bin/sh -c #(nop) EXPOSE 80 0B
d71b7d53d1e3 15 minutes ago /bin/sh -c yum -y install net-tools 32.3MB
f3576d019b4c 15 minutes ago /bin/sh -c yum -y install vim 72.6MB
a8849a4c2da5 16 minutes ago /bin/sh -c #(nop) WORKDIR /usr/local 0B
db06a98c3f9d 16 minutes ago /bin/sh -c #(nop) ENV MYPATH=/usr/local 0B
29294f1d8e36 16 minutes ago /bin/sh -c #(nop) MAINTAINER artisan@artisa… 0B
5d0da3dc9764 3 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 3 weeks ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 3 weeks ago /bin/sh -c #(nop) ADD file:805cb5e15fb6e0bb0… 231MB
[root@VM-0-7-centos ~]#

Docker Review - dockerfile 实战_给基础镜像增加功能_centos_07