Docker: создание собственного локального CentOS образа и контейнера с нуля.

Для создания образа будем использовать один из популярных инструментов старых админов – supermin.


supermin [-o OUTPUTDIR] – Имена СПИСОК PKGS …
supermin [-o OUTPUTDIR] Имена файлов PKG …
Supermin – это инструмент для создания программных “сущностей”.
Они крошечные и похожи на виртуальные машины, обычно около 100 КБ в размере, которые создаются полностью на лету за доли секунды когда нужно.
Начиная с версии 4 этот инструмент является независимым от дистрибутива и может создавать “супер-сущности” для нескольких популярных дистрибутивов Linux, а добавить поддержку других достаточно просто.

и пару слов о том как он работает ))


Есть два режима использования супермина:

С параметром –names supermin берет список имен пакетов и создает supermin сущность, содержащюю эти пакеты и все зависимости, которые требуются для этих пакетов.
В этом режиме supermin обычно требуется доступ к сети потому что, возможно, потребуется проконсультироваться с репозиториями пакетов, чтобы определить зависимости и загрузить пакеты.

Без –names supermin принимает список пакетов (т.е. имена файлов уже локально доступных пакетов). Этот пакет должен быть полным и в соответствии с отсутствием зависимостей вне набора пакетов, которые вы предоставляете. В этом режиме супермин не требует доступа к сети. Он видит файлы пакета сами.

Под «пакетом» мы понимаем пакет RPM, DEB и т. д.
Имя пакета может быть полным именем (например, “coreutils-8.22-24.el7.x86_64”) или некоторое сокращение (например, “coreutils”).
Точный формат имени и допустимые сокращения зависят от менеджера пакетов.

Файловая программная сущность supermin, которая создается supermin, состоит из двух файлов, называемых «hostfiles» и «base.img».
По умолчанию они записываются в текущий каталогm, но если укажем опцию -o OUTPUTDIR, то эти файлы будут записаны в этот каталог
(традиционно этот каталог называется «supermin.d», но вы можете называть его как хотите).

Во всех случаях supermin может создавать только файловые сущности, идентичные дистрибутиву, версии и архитектуре хосту. Он не делает кросс сборки.

Исходя из сказанного вышею для создание своего образа с нуля нам уже будет нужна целевая ОС с установленными пакетами.
Устанавливаем 5 версию и создаем рабочий каталог:

1
2
[root@vms ~]# yum install supermin5
[root@vms ~]# cd ; mkdir supermin ; cd supermin

А дальше подготовивм минимальное дерево среды “сущности” с установкой только одного пакета с зависимостями – yum.
В говорливом режиме мы видим много интересного под капотом ))

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
[root@vms supermin]# supermin5 --verbose --prepare yum -o centos7.supermin.d                                                                        
supermin: version: 5.1.19                                                                                                                            
supermin: rpm: detected RPM version 4.11                                                                                                            
supermin: package handler: fedora/rpm                                                                                                                
supermin: prepare: yum                                                                                                                              
BDB2053 Freeing read locks for locker 0x1f2bb: 6361/140442625869952                                                                                  
BDB2053 Freeing read locks for locker 0x1f2bd: 6361/140442625869952                                                                                  
BDB2053 Freeing read locks for locker 0x1f2be: 6361/140442625869952                                                                                  
BDB2053 Freeing read locks for locker 0x1f2bf: 6361/140442625869952                                                                                  
supermin: packages specified on the command line:                                                                                                    
  - yum-3.4.3-163.el7.centos.noarch                                                                                                                  
supermin: writing centos7.supermin.d.kpcjrtw9/packages                                                                                              
supermin: after resolving dependencies there are 96 packages:                                                                                        
  - audit-libs-2.8.5-4.el7.x86_64                                                                                                                    
  - basesystem-10.0-7.el7.centos.noarch                                                                                                              
  - bash-4.2.46-33.el7.x86_64                                                                                                                        
  - bzip2-libs-1.0.6-13.el7.x86_64                                                                                                                  
  - ca-certificates-2018.2.22-70.0.el7_5.noarch                                                                                                      
  - centos-release-7-7.1908.0.el7.centos.x86_64                                                                                                      
  - chkconfig-1.7.4-1.el7.x86_64                                                                                                                    
  - coreutils-8.22-24.el7.x86_64                                                                                                                    
  - cpio-2.11-27.el7.x86_64                                                                                                                          
  - curl-7.29.0-54.el7.x86_64                                                                                                                        
  - cyrus-sasl-lib-2.1.26-23.el7.x86_64                                                                                                              
  - diffutils-3.3-5.el7.x86_64                                                                                                                      
  - elfutils-libelf-0.176-2.el7.x86_64                                                                                                              
  - expat-2.1.0-10.el7_3.x86_64                                                                                                                      
  - file-libs-5.11-35.el7.x86_64                                                                                                                    
  - filesystem-3.2-25.el7.x86_64                                                                                                                    
  - findutils-1:4.5.11-6.el7.x86_64                                                                                                                  
  - gawk-4.0.2-4.el7_3.1.x86_64    
 - gdbm-1.10-8.el7.x86_64
  - glib2-2.56.1-5.el7.x86_64
  - glibc-2.17-292.el7.x86_64
  - glibc-common-2.17-292.el7.x86_64
  - gmp-1:6.0.0-15.el7.x86_64
  - gnupg2-2.0.22-5.el7_5.x86_64
  - gpgme-1.3.2-5.el7.x86_64
  - grep-2.20-3.el7.x86_64
  - info-5.1-5.el7.x86_64
  - keyutils-libs-1.5.8-3.el7.x86_64
  - krb5-libs-1.15.1-37.el7_7.2.x86_64
  - libacl-2.2.51-14.el7.x86_64
  - libassuan-2.1.0-3.el7.x86_64
  - libattr-2.4.46-13.el7.x86_64
  - libblkid-2.23.2-61.el7.x86_64
  - libcap-2.22-10.el7.x86_64
  - libcap-ng-0.7.5-4.el7.x86_64
  - libcom_err-1.42.9-16.el7.x86_64
  - libcurl-7.29.0-54.el7.x86_64
  - libdb-5.3.21-25.el7.x86_64
  - libdb-utils-5.3.21-25.el7.x86_64
  - libffi-3.0.13-18.el7.x86_64
  - libgcc-4.8.5-39.el7.x86_64
  - libgcrypt-1.5.3-14.el7.x86_64
  - libgpg-error-1.12-3.el7.x86_64
  - libidn-1.28-4.el7.x86_64
  - libmount-2.23.2-61.el7.x86_64
  - libselinux-2.5-14.1.el7.x86_64
  - libsepol-2.5-10.el7.x86_64
  - libssh2-1.8.0-3.el7.x86_64
  - libstdc++-4.8.5-39.el7.x86_64
  - libtasn1-4.10-1.el7.x86_64
  - libuuid-2.23.2-61.el7.x86_64
  - libverto-0.2.5-4.el7.x86_64- libxml2-2.9.1-6.el7_2.3.x86_64
  - lua-5.1.4-15.el7.x86_64
  - ncurses-5.9-14.20130511.el7_4.x86_64
  - ncurses-base-5.9-14.20130511.el7_4.noarch
  - ncurses-libs-5.9-14.20130511.el7_4.x86_64
  - nspr-4.21.0-1.el7.x86_64
  - nss-3.44.0-4.el7.x86_64
  - nss-pem-1.0.3-7.el7.x86_64
  - nss-softokn-3.44.0-5.el7.x86_64
  - nss-softokn-freebl-3.44.0-5.el7.x86_64
  - nss-sysinit-3.44.0-4.el7.x86_64
  - nss-tools-3.44.0-4.el7.x86_64
  - nss-util-3.44.0-3.el7.x86_64
  - openldap-2.4.44-21.el7_6.x86_64
  - openssl-libs-1:1.0.2k-19.el7.x86_64
  - p11-kit-0.23.5-3.el7.x86_64
  - p11-kit-trust-0.23.5-3.el7.x86_64
  - pcre-8.32-17.el7.x86_64
  - pinentry-0.8.1-17.el7.x86_64
  - popt-1.13-16.el7.x86_64
  - pth-2.0.7-23.el7.x86_64
  - pygpgme-0.3-9.el7.x86_64
  - pyliblzma-0.5.3-11.el7.x86_64
  - python-2.7.5-86.el7.x86_64
  - python-iniparse-0.4-9.el7.noarch
  - python-libs-2.7.5-86.el7.x86_64
  - python-pycurl-7.19.0-19.el7.x86_64
  - python-urlgrabber-3.10-9.el7.noarch
  - pyxattr-0.5.1-5.el7.x86_64
  - readline-6.2-11.el7.x86_64
  - rpm-4.11.3-40.el7.x86_64
  - rpm-build-libs-4.11.3-40.el7.x86_64
- rpm-libs-4.11.3-40.el7.x86_64
  - rpm-python-4.11.3-40.el7.x86_64
  - sed-4.2.2-5.el7.x86_64
  - setup-2.8.71-10.el7.noarch
  - shared-mime-info-1.8-4.el7.x86_64
  - sqlite-3.7.17-8.el7.x86_64
  - tzdata-2019c-1.el7.noarch
  - xz-libs-5.2.2-1.el7.x86_64
  - yum-3.4.3-163.el7.centos.noarch
  - yum-metadata-parser-1.1.4-10.el7.x86_64
  - yum-plugin-fastestmirror-1.1.31-52.el7.noarch
  - zlib-1.2.7-18.el7.x86_64
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.imt-systems.com
 * centos-qemu-ev: ftp.fau.de
 * centosplus: mirror.23media.com
 * epel: ftp.fau.de
 * extras: mirror.checkdomain.de
 * nux-dextop: mirror.li.nux.ro
 * updates: linux.darkpenguin.net
 * webtatic: uk.repo.webtatic.com
(1/19): audit-libs-2.8.5-4.el7.x86_64.rpm                                                                                     | 102 kB  00:00:00    
(2/19): centos-release-7-7.1908.0.el7.centos.x86_64.rpm                                                                       |  26 kB  00:00:00    
(3/19): bash-4.2.46-33.el7.x86_64.rpm                                                                                         | 1.0 MB  00:00:00    
(4/19): coreutils-8.22-24.el7.x86_64.rpm                                                                                      | 3.3 MB  00:00:00    
(5/19): ca-certificates-2019.2.32-76.el7_7.noarch.rpm                                                                         | 399 kB  00:00:00    
(6/19): grep-2.20-3.el7.x86_64.rpm                                                                                            | 344 kB  00:00:00    
(7/19): glibc-2.17-292.el7.x86_64.rpm                                                                                         | 3.6 MB  00:00:00    
(8/19): info-5.1-5.el7.x86_64.rpm                                                                                             | 233 kB  00:00:00    
(9/19): glibc-common-2.17-292.el7.x86_64.rpm                                                                                  |  11 MB  00:00:00    
(10/19): krb5-libs-1.15.1-37.el7_7.2.x86_64.rpm                                                                               | 805 kB  00:00:00    
(11/19): openldap-2.4.44-21.el7_6.x86_64.rpm                                                                                  | 356 kB  00:00:00    
(12/19): gnupg2-2.0.22-5.el7_5.x86_64.rpm                                                                                     | 1.5 MB  00:00:00    
(13/19): setup-2.8.71-10.el7.noarch.rpm                                                                                       | 166 kB  00:00:00    
(14/19): openssl-libs-1.0.2k-19.el7.x86_64.rpm                                                                                | 1.2 MB  00:00:00    
(15/19): yum-3.4.3-163.el7.centos.noarch.rpm                                                                                  | 1.2 MB  00:00:00    
(16/19): yum-plugin-fastestmirror-1.1.31-52.el7.noarch.rpm                                                                    |  34 kB  00:00:00    
(17/19): nss-3.44.0-7.el7_7.x86_64.rpm                                                                                        | 854 kB  00:00:00    
(18/19): rpm-4.11.3-40.el7.x86_64.rpm                                                                                         | 1.2 MB  00:00:00    
(19/19): python-libs-2.7.5-86.el7.x86_64.rpm                                                                                  | 5.6 MB  00:00:00    
supermin: there are 75 config files
supermin: writing centos7.supermin.d.kpcjrtw9/base.tar.gz./etc/issue
./etc/issue.net
./etc/os-release
./etc/system-release-cpe
./etc/yum.repos.d/CentOS-Base.repo
./etc/yum.repos.d/CentOS-CR.repo
./etc/yum.repos.d/CentOS-Debuginfo.repo
./etc/yum.repos.d/CentOS-Media.repo
./etc/yum.repos.d/CentOS-Sources.repo
./etc/yum.repos.d/CentOS-Vault.repo
./etc/yum.repos.d/CentOS-fasttrack.repo
./etc/yum/vars/contentdir
./etc/yum/vars/infra
./etc/krb5.conf
./etc/pki/ca-trust/ca-legacy.conf
./etc/openldap/ldap.conf
./usr/lib/tmpfiles.d/openldap.conf
./etc/aliases
./etc/bashrc
./etc/csh.cshrc
./etc/csh.login
./etc/environment
./etc/exports
./etc/filesystems
./etc/group
./etc/gshadow
./etc/host.conf
./etc/hosts
./etc/hosts.allow
/etc/hosts.deny
./etc/inputrc
./etc/motd
./etc/passwd
./etc/printcap
./etc/profile
./etc/profile.d/csh.local
./etc/profile.d/sh.local
./etc/protocols
./etc/securetty
./etc/services
./etc/shadow
./etc/shells
./etc/subgid
./etc/subuid
./etc/GREP_COLORS
./etc/profile.d/colorgrep.csh
./etc/profile.d/colorgrep.sh
./etc/pki/tls/openssl.cnf
./etc/default/nss
./etc/pki/nss-legacy/nss-rhel7.config
./etc/pki/nssdb/cert8.db
./etc/pki/nssdb/cert9.db
./etc/pki/nssdb/key3.db
./etc/pki/nssdb/key4.db
./etc/pki/nssdb/pkcs11.txt
./etc/pki/nssdb/secmod.db
./etc/libaudit.conf
./etc/DIR_COLORS
./etc/DIR_COLORS.256color
./etc/DIR_COLORS.lightbgcolor
./etc/profile.d/colorls.csh
./etc/profile.d/colorls.sh
./etc/python/cert-verification.cfg
./etc/ld.so.conf
./etc/nsswitch.conf
./etc/rpc
./usr/lib64/gconv/gconv-modules
./usr/share/info/dir
./etc/skel/.bash_logout
./etc/skel/.bash_profile
./etc/skel/.bashrc
./etc/yum/pluginconf.d/fastestmirror.conf
./etc/logrotate.d/yum
./etc/yum.conf
./etc/yum/version-groups.conf
supermin: renaming centos7.supermin.d.kpcjrtw9 to centos7.supermin.d

в результате мы получили:

1
2
3
4
5
6
7
[root@vms supermin]# tree centos7.supermin.d/
centos7.supermin.d/
├── base.tar.gz
└── packages

0 directories, 2 files
[root@vms supermin]#

А что же было сделано? Да очень просто! Это команда просто взяла системный /etc/yum.conf и подгрузила указанный пакет и его зависимые пакеты в кэш менеджера пакетов на хосте. Затем упаковало некое свое базовое дерево файлов в архив и положила в указанную директорию. Вот такой индийский стиль редхата. В примере показан файл архива директории “своих” каталогов и файл списка основных пакетов с именем указанного пакета/пакетов

Как ни странно по логике дальше нам нужно все это рахархивировать в отдельный каталог в так называемом режиме “build+chroot” и туда же все установить. Тихий смех в зале среди старых админов.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[root@vms supermin]# supermin5 --verbose --build --include-packagelist --format chroot centos7.supermin.d -o centos7.appliance.d
supermin: version: 5.1.19
supermin: rpm: detected RPM version 4.11
supermin: package handler: fedora/rpm
supermin: build: centos7.supermin.d
supermin: reading the supermin appliance
supermin: build: visiting centos7.supermin.d/base.tar.gz type gzip base image (tar)
supermin: build: visiting centos7.supermin.d/packages type uncompressed packages
supermin: mapping package names to installed packages
BDB2053 Freeing read locks for locker 0x1f365: 17353/140027422587008
BDB2053 Freeing read locks for locker 0x1f367: 17353/140027422587008
BDB2053 Freeing read locks for locker 0x1f368: 17353/140027422587008
BDB2053 Freeing read locks for locker 0x1f369: 17353/140027422587008
supermin: resolving full list of package dependencies
supermin: build: 96 packages, including dependencies
supermin: build: 22152 files
supermin: build: 22152 files, after matching excludefiles
supermin: build: 22152 files, after adding hostfiles
supermin: build: 8994 files, after removing unreadable files
supermin: build: 9029 files, after munging
supermin: renaming centos7.appliance.d.rdnill68 to centos7.appliance.d
[root@vms supermin]#
[root@vms supermin]# du -hs *
186M    centos7.appliance.d
180K    centos7.supermin.d
[root@vms supermin]#

О как! Теперь в новом каталоге все базовое дерево каталогов Linux, в котором стоят упомянутые ранее пакеты. Обратите внимание на размер – это все вылилось в приблизительно 180 мегабйат! Идем дальше.

Те, кому не нужно всех локалей установkенных по умолчанию, могут почистить и оставить только английскую локализацию, тем самым выиграв около 50 мегабайт

1
2
( cd centos7.appliance.d/usr/share/locale ; find . -type d -not -regex 'en_US' -not -regex '.' -not -regex '..' -print | xargs /bin/rm -rf )
( cd centos7.appliance.d/usr/share/i18n/locales ; find . -type d -not -regex 'en_US' -not -regex '.' -not -regex '..' -print | xargs /bin/rm -rf )

И надо добавить переменную для yum

1
[root@vms supermin]# echo 7 > centos7.appliance.d/etc/yum/vars/releasever

Теперь все готово упаковать созданное дерево каталогов в tar архив:

1
2
3
4
5
6
7
[root@vms supermin]# tar --numeric-owner -cpf centos7_zero.tar -C centos7.appliance.d .
[root@vms supermin]# ls -l
total 172260
drwxr-xr-x 17 root root      4096 Feb  9 00:25 centos7.appliance.d
drwxr-xr-x  2 root root      4096 Feb  8 20:15 centos7.supermin.d
-rw-r--r--  1 root root 176384000 Feb  9 00:26 centos7_zero.tar
[root@vms supermin]#

И загружаем полученный tar архив как образ для контейнеров docker в локальной системе:

1
2
3
4
5
6
7
[root@vms supermin]# cat centos7_zero.tar | docker import - local/centos7-zero
sha256:75f31d1e508030491f4e6ce264b781a6bbdbc0f9cc5b0537e5ac55e9bb5eb1af
[root@vms supermin]#
[root@vms supermin]# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
local/centos7-zero   latest              75f31d1e5080        40 seconds ago      170 MB
[root@vms supermin]#

В данный момент мы получили в локальной системе минимальный образ файловой сиcтемы для Centos 7. Теперь можно запустить контейнер на основе этого образа и выполнить остальную установку пакетов до минимального набора.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# docker run -i -t local/centos7-zero /bin/bash
bash-4.2# python -c 'import yum, pprint; yb = yum.YumBase(); pprint.pprint(yb.conf.yumvar, width=1)'
Loaded plugins: fastestmirror
{'arch': 'ia32e',
 'basearch': 'x86_64',
 'contentdir': 'centos',
 'infra': 'stock',
 'releasever': '7',
 'uuid': 'f3c4471a-8ba2-48b2-a695-19d874fb6856'}
bash-4.2# yum clean all
Loaded plugins: fastestmirror
Cleaning repos: base extras updates
bash-4.2# yum makecache
Loaded plugins: fastestmirror
Determining fastest mirrors
 * base: mirror.softaculous.com
 * extras: mirror.23media.com
 * updates: linux.darkpenguin.net
base                                                                                                                          | 3.6 kB  00:00:00    
extras                                                                                                                        | 2.9 kB  00:00:00    
updates                                                                                                                       | 2.9 kB  00:00:00    
(1/10): base/7/x86_64/group_gz                                                                                                | 165 kB  00:00:00    
(2/10): extras/7/x86_64/filelists_db                                                                                          | 210 kB  00:00:00    
(3/10): extras/7/x86_64/other_db                                                                                              | 103 kB  00:00:00    
(4/10): extras/7/x86_64/primary_db                                                                                            | 159 kB  00:00:00    
(5/10): base/7/x86_64/primary_db                                                                                              | 6.0 MB  00:00:00    
(6/10): updates/7/x86_64/filelists_db                                                                                         | 4.0 MB  00:00:00    
(7/10): updates/7/x86_64/primary_db                                                                                           | 6.7 MB  00:00:00    
(8/10): updates/7/x86_64/other_db                                                                                             | 481 kB  00:00:00    
(9/10): base/7/x86_64/filelists_db                                                                                            | 7.3 MB  00:00:00    
(10/10): base/7/x86_64/other_db                                                                                               | 2.6 MB  00:00:00    
Metadata Cache Created
bash-4.2#
bash-4.2# yum -y install rpm rpm-build-libs rpm-libs rpm-python
bash-4.2# yum -y install yum yum-metadata-parser yum-plugin-fastestmirror
bash-4.2# yum -y install cracklib cracklib-dicts binutils
bash-4.2# yum -y install dbus-libs device-mapper device-mapper-libs file
bash-4.2# yum -y install iproute iptables iptables-services iputils groff-base
bash-4.2# yum -y install less libcroco libgomp libunistring
bash-4.2# yum -y install vim rootfiles
bash-4.2# yum -y install openssh-server
bash-4.2# exit

Я вышел из контейнера и он остановился. На следующем шаге я создаю образ обновленной файловой систем в новом архиве для создания будущих образов на его основе.

1
2
3
4
5
6
7
8
9
10
11
12
[root@vms supermin]# docker ps -a
CONTAINER ID        IMAGE                COMMAND             CREATED             STATUS              PORTS               NAMES
c2429c6d79e0        local/centos7-zero   "/bin/bash"         38 minutes ago      Up 38 minutes                           unruffled_colden
[root@vms supermin]#      
[root@vms supermin]# docker export c2429c6d79e0 > centos7_minimal.tar
[root@vms supermin]# ls -lh
total 818M
drwxr-xr-x 17 root root 4.0K Feb  9 12:31 centos7.appliance.d
-rw-r--r--  1 root root 650M Feb  9 13:11 centos7_minimal.tar
drwxr-xr-x  2 root root 4.0K Feb  8 20:15 centos7.supermin.d
-rw-r--r--  1 root root 169M Feb  9 12:31 centos7_zero.tar
[root@vms supermin]#

Сейчас я готов создавать новые образы на базе данного архива и использовать их как базу для новых прикладных образов для новых контейнеров на базе CentOS7. Наиболее правильным шагом будет создание контенейра с доступом из сети. Для этого подойдет официальный пример для получения командной оболочки в контейнере sshd процесса но с нашими изменениями – https://docs.docker.com/engine/examples/running_ssh_service

Импортируем новый образ.

1
2
3
4
5
6
7
8
[root@vms supermin]# cat centos7_minimal.tar | docker import - local/centos7-minimal
sha256:5275f2c95f37bc75bde68273708427af3a97f807ecfe5b68b195f1538d7514a8
[root@vms supermin]#
[root@vms supermin]# docker images -a
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
local/centos7-minimal   latest              5275f2c95f37        8 seconds ago       664 MB
local/centos7-zero      latest              e67e7172d34b        46 minutes ago      170 MB
[root@vms supermin]#

Создаем докер файл для образа с запущенным ssh демоном и создаем образ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
[root@vms supermin]# cat dockerfile-centos7-minimal-with-sshd

FROM local/centos7-minimal
RUN mkdir /var/run/sshd
RUN ssh-keygen -A
RUN echo 'root:12345678' | chpasswd
EXPOSE 22
CMD ["/sbin/sshd", "-D"]

[root@vms supermin]#

[root@vms supermin]# docker build --force-rm=true --file=dockerfile-centos7-minimal-with-sshd --tag=local/centos7-minimal-with-sshd .
Sending build context to Docker daemon 1.034 GB
Step 1/5 : FROM local/centos7-minimal
 ---> 68f6e91282b3
Step 2/5 : RUN mkdir /var/run/sshd
 ---> Running in 62cba4c17121

 ---> 25d01a92fee9
Removing intermediate container 62cba4c17121
Step 3/5 : RUN echo 'root:12345678' | chpasswd
 ---> Running in ab8e75c5b7eb

 ---> 4dc0d5791057
Removing intermediate container ab8e75c5b7eb
Step 4/5 : EXPOSE 22
 ---> Running in 58ecca5d417c
 ---> cc804c09fa1b
Removing intermediate container 58ecca5d417c
Step 5/5 : CMD /sbin/sshd -D
 ---> Running in 93a16b56caaa
 ---> 3ae174fb1c73
Removing intermediate container 93a16b56caaa
Successfully built 3ae174fb1c73
[root@vms supermin]#

[root@vms supermin]# docker images -a
[root@vms supermin]# docker images -a --digests
REPOSITORY                        TAG                 DIGEST              IMAGE ID            CREATED             SIZE
<none>                            <none>              <none>              4dc0d5791057        47 seconds ago      664 MB
<none>                            <none>              <none>              cc804c09fa1b        47 seconds ago      664 MB
local/centos7-minimal-with-sshd   latest              <none>              3ae174fb1c73        47 seconds ago      664 MB
<none>                            <none>              <none>              25d01a92fee9        48 seconds ago      664 MB
local/centos7-minimal             latest              <none>              68f6e91282b3        About an hour ago   664 MB
local/centos7-zero                latest              <none>              e67e7172d34b        2 hours ago         170 MB
[root@vms supermin]#

Запускаю контейнер на базе этого образа. Следует отметить, что docker вообще не дружит с безопасностью и без каких-либо ограничений может вмешаться в работу файервола и создать не мало проблем, если Вы запустите его на боевом сервере, пытаясь совместить эту реализацию контейнеров с уже работающей продакшн системой. И снова смех в зале у старых админов. Поэтому если Вы еще не завербованы в юные убунтоиды, то стоит в приказном порядке указать демону о недопустимости такого поведения. А еще лучше выделить для docker отдельную виртуальную машину-песочницу, где он будет изолирован, что и убережет Вас от сюрпризов моды. Пока же просто добавим параметр –iptables=false в файл конфигурации /etc/sysconfig/docker и перезапустим демона docker.

1
2
3
4
5
6
7
8
[root@vms supermin]# docker run -d --name centos7-sshd-empty local/centos7-minimal-with-sshd
[root@vms supermin]# docker ps -a
CONTAINER ID        IMAGE                             COMMAND             CREATED              STATUS              PORTS               NAMES
eb1a3eb124e6        local/centos7-minimal-with-sshd   "/sbin/sshd -D"     About a minute ago   Up About a minute   22/tcp              centos7-sshd-empty
[root@vms supermin]#
[root@vms supermin]# docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'  eb1a3eb124e6
172.17.0.2
[root@vms supermin]#
1
2
3
4
5
6
7
8
9
10
11
12
[root@vms supermin]# nmap 172.17.0.2

Starting Nmap 6.40 ( http://nmap.org ) at 2020-02-09 16:13 CET
Nmap scan report for 172.17.0.2
Host is up (0.0000080s latency).
Not shown: 999 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
MAC Address: 02:42:AC:11:00:02 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 0.11 seconds
[root@vms supermin]#
1
2
3
4
5
6
7
8
9
[root@vms supermin]# ssh 172.17.0.2
The authenticity of host '172.17.0.2 (172.17.0.2)' can't be established.
ECDSA key fingerprint is SHA256:XR22nlMk+y4O0wkbQe0b0AKkq5UPwp7u0gDHPxqL/FQ.
ECDSA key fingerprint is MD5:74:ab:6b:2f:5d:e5:bd:12:01:40:c5:d5:06:98:7e:c7.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '
172.17.0.2' (ECDSA) to the list of known hosts.
root@172.17.0.2'
s password:
Last login: Sat Feb  8 17:07:23 2020
[root@eb1a3eb124e6 ~]#

О том как пробросить сетевые порты или добавить иные правила в файервол для доступности приложений в контейнере думаю уже обьяснять не надо старым админам. Дерзайте на работе!

Scroll to top