暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

在Oracle云上安装和部署Docker Engine(OL7)

凛冬未至 2017-05-31
536

 

本公众号之前发布过一篇《Oracle云上安装和配置Docker Engine(OL6)》,有网友私信给我,希望能发一篇在Oracle Linux 7上的部署Docker Engine的文章,事实上Docker EngineOracle Linux 7的支持,与6完全一致,但是,考虑到这两个版本的操作系统本身差异较大,所以在部署Docker Engine的过程会有一些差异,于是老余就花了一点时间研究了一下Oracle Linux 7,就有了这篇文章。

 

本文将演示在Oracle云上的Oracle Linux 7的实例上安装和配置Docker Engine

 

 

同样,先要在Oracle云上创建Oracle Linux 7.2 的实例,(略过创建过程,具体流程参见本公众号的其他文章《Oracle云上创建Oracle Linux实例》),同时为该实例新建一块50G的硬盘,专门用于存放Docker Engine的文件系统,(具体流程参加本公众号的其他文章《Oracle云上的Linux实例新增硬盘》):

 

操作系统版本情况:

[root@f807e9 opc]# uname -a

Linux f807e9 4.1.12-61.1.33.el7uek.x86_64 #2 SMP Thu Mar 30 18:45:51 PDT 2017 x86_64 x86_64 x86_64 GNU/Linux

[root@f807e9 opc]# cat /etc/oracle-release

Oracle Linux Server release 7.2

 

文件系统和新增磁盘:

[root@f807e9 opc]# df -h

Filesystem                   Size  Used Avail Use% Mounted on

devtmpfs                     7.3G     0  7.3G   0% dev

tmpfs                        7.3G     0  7.3G   0% dev/shm

tmpfs                        7.3G  8.3M  7.3G   1% run

tmpfs                        7.3G     0  7.3G   0% sys/fs/cgroup

/dev/mapper/vg_main-lv_root   46G  1.1G   45G   3%

/dev/xvdb1                   497M  113M  384M  23% boot

tmpfs                        1.5G     0  1.5G   0% run/user/1000

 

[root@f807e9 opc]# fdisk -l dev/xvdc

 

Disk /dev/xvdc: 53.7 GB, 53687091200 bytes, 104857600 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes 512 bytes

I/O size (minimum/optimal): 512 bytes 512 bytes

 

 

Oracle Linux 6一样,在Oracle Linux上,Docker 1.9(含1.9)以后的版本对操作系统内核有要求,只支持内核Unbreakable Enterprise Kernel Release 4 (UEK R4),因此在安装和配置Docker 1.9以上版本前,需要将操作系统的内核升级到UEK R4

 

一、升级操作系统内核

本文将介绍采用yum升级操作系统内核。

修改yum repository配置文件,配置文件位于目录 /etc/yum.repos.d/下,Oracle Linux 7yum repository文件为public-yum-ol7.repo

[root@f807e9 opc]# cd /etc/yum.repos.d/

[root@f807e9 yum.repos.d]# ls

ksplice-uptrack.repo  public-yum-ol7.repo

 

修改public-yum-ol7.repo配置文件,如下:

禁用以下repo,将enabled项置为0

[ol7_UEKR3]

name=Latest Unbreakable Enterprise Kernel Release 3 for Oracle Linux $releasever ($basearch)

baseurl=http://yum.oracle.com/repo/OracleLinux/OL7/UEKR3/$basearch/

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle

gpgcheck=1

enabled=0

注:7.2版本中,此项缺省是0

启用以下repo,将enabled项设置为1

[ol7_UEKR4]

name=Latest Unbreakable Enterprise Kernel Release 4 for Oracle Linux $releasever ($basearch)

baseurl=http://yum.oracle.com/repo/OracleLinux/OL7/UEKR4/$basearch/

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle

gpgcheck=1

enabled=1

 

 

[ol7_addons]

name=Oracle Linux $releasever Add ons ($basearch)

baseurl=http://yum.oracle.com/repo/OracleLinux/OL7/addons/$basearch/

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle

gpgcheck=1

enabled=1

 

 

[ol7_latest]

name=Oracle Linux $releasever Latest ($basearch)

baseurl=http://yum.oracle.com/repo/OracleLinux/OL7/latest/$basearch/

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle

gpgcheck=1

enabled=1

 

将系统内核升级到UEK R4:

# yum update

 

重启操作系统,以内核UEK R4启动

# reboot

注:在重启操作系统前,确认系统的缺省启动内核,查看配置系统启动配置文件/boot/grub/grub.conf,确保缺省内核为UEK R4

 

二、安装Docker Engine

确认是以UEK R4内核启动后,准备安装Docker Engine

采用root安装Docker Engine,执行以下命令

# yum install docker-engine

 

三、安装btrfs文件系统

Oracle推荐采用btrfs文件系统安装docker

详情参见:https://docs.docker.com/engine/userguide/storagedriver/overlayfs-driver/.

 

7.2版本中,btrfs包已缺省安装,可直接创建btrfs文件系统。

[root@f807e9 opc]# yum install btrfs-progs

Loaded plugins: ulninfo

Package btrfs-progs-4.4.1-1.0.1.el7.x86_64 already installed and latest version

Nothing to do

 

配置btrfs文件系统

注:本实验中,为docker单独分配了一个磁盘卷/dev/xvdc,接下来将在该磁盘卷上创建btrfs文件系统,这也是在Oracle Linux上安装配置Docker的最佳实践:为docker分配一个专属的btrfs文件系统。

[root@f807e9 opc]#  mkfs.btrfs /dev/xvdc

btrfs-progs v4.4.1

See http://btrfs.wiki.kernel.org for more information.

 

Detected a SSD, turning off metadata duplication.  Mkfs with -m dup if you want to force metadata duplication.

WARNING: The skinny-metadata mkfs default feature will work with the current kernel, but it is not compatible with older kernels supported on this OS. You can disable it with -O ^skinny-metadata option in mkfs.btrfs

Label:              (null)

UUID:               4580e36a-a60c-4a1b-a689-e614c57c5d03

Node size:          16384

Sector size:        4096

Filesystem size:    50.00GiB

Block group profiles:

  Data:             single            8.00MiB

  Metadata:         single            8.00MiB

  System:           single            4.00MiB

SSD detected:       yes

Incompat features:  extref, skinny-metadata

Number of devices:  1

Devices:

   ID        SIZE  PATH

    1    50.00GiB  dev/xvdc

注:保留好文件系统的UUID(红色高亮字体),后面的步骤中需要用到UUID

 

也可以通过命令blkid查看文件系统的UUID:

[root@f807e9 opc]# blkid dev/xvdc

/dev/xvdc: UUID="4580e36a-a60c-4a1b-a689-e614c57c5d03"UUID_SUB="87d25447-8d5a-4b80-9bc3-8cf764203e7e" TYPE="btrfs"

 

 

四、加载Docker文件系统

创建加载点/var/lib/docker,将已创建的btrfs文件加载到该加载点,并设置自动加载

# mkdir var/lib/docker

 

Oracle Linux 7.26.8最大的区别就在下面的步骤。

 

首先创建配置文件/etc/systemd/system/var-lib-docker.mount,包含以下内容:

[Unit]
Description = Docker Image Store

[Mount]
What = UUID=
4580e36a-a60c-4a1b-a689-e614c57c5d03
Where =
/var/lib/docker
Type = btrfs

[Install]
WantedBy = multi-user.target

 

启用var-lib-docker.mount目标,将前面创建的btrfs文件系统加载

[root@f807e9 opc]# systemctl enable var-lib-docker.mount

Created symlink from /etc/systemd/system/multi-user.target.wants/var-lib-docker.mount to /etc/systemd/system/var-lib-docker.mount.

 

另外,也可以使用以下命令单独加载btrfs文件系统:

# systemctl start var-lib-docker.mount

 

查看文件系统加载情况:

[root@f807e9 opc]# df -h

Filesystem                   Size  Used Avail Use% Mounted on

devtmpfs                     7.3G     0  7.3G   0% /dev

tmpfs                        7.3G     0  7.3G   0% /dev/shm

tmpfs                        7.3G  8.3M  7.3G   1% /run

tmpfs                        7.3G     0  7.3G   0% /sys/fs/cgroup

/dev/mapper/vg_main-lv_root   46G  2.0G   44G   5% /

/dev/xvdb1                   497M  157M  340M  32% /boot

tmpfs                        1.5G     0  1.5G   0% /run/user/1000

/dev/xvdc                     50G   17M   50G   1% /var/lib/docker

 

[root@f807e9 opc]# mount

sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)

proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)

devtmpfs on /dev type devtmpfs (rw,nosuid,size=7551472k,nr_inodes=1887868,mode=755)

securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)

tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)

devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)

tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)

tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)

cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)

pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)

cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)

cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)

cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)

cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)

cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)

cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)

cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)

cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)

cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)

configfs on /sys/kernel/config type configfs (rw,relatime)

/dev/mapper/vg_main-lv_root on / type xfs (rw,relatime,attr2,inode64,noquota)

debugfs on /sys/kernel/debug type debugfs (rw,relatime)

systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=29,pgrp=1,timeout=300,minproto=5,maxproto=5,direct)

mqueue on /dev/mqueue type mqueue (rw,relatime)

hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime)

/dev/xvdb1 on /boot type xfs (rw,relatime,attr2,inode64,noquota)

xenfs on /proc/xen type xenfs (rw,relatime)

tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=1513468k,mode=700,uid=1000,gid=1000)

/dev/xvdc on /var/lib/docker type btrfs (rw,relatime,ssd,space_cache)

 

设置文件系统随系统启动自动加载

创建配置文件/etc/systemd/system/docker.service.d/var-lib-docker-mount.conf,包含以下内容:

[Unit]
Requires=var-lib-docker.mount
After=var-lib-docker.mount

 

五、关闭SELinux和防火墙

Oracle Linux 7上,如果使用btrfs文件系统作为docker 的存储引擎,必须将SELinux服务禁用。

设置当前的SELinux模式为Permissive,执行以下命令:

[root@f807e9 opc]# setenforce Permissive

setenforce: SELinux is disabled

 

[root@f807e9 opc]# more /etc/selinux/config

 

# This file controls the state of SELinux on the system.

# SELINUX= can take one of these three values:

#     enforcing - SELinux security policy is enforced.

#     permissive - SELinux prints warnings instead of enforcing.

#     disabled - No SELinux policy is loaded.

SELINUX=disabled

# SELINUXTYPE= can take one of three two values:

#     targeted - Targeted processes are protected,

#     minimum - Modification of targeted policy. Only selected processes are protected.

#     mls - Multi Level Security protection.

SELINUXTYPE=targeted

 

重启操作系统使配置生效

# systemctl reboot

 

禁用防火墙

[root@f807e9 opc]# systemctl stop firewalld

Failed to stop firewalld.service: Unit firewalld.service not loaded.

[root@f807e9 opc]# systemctl disable firewalld

Failed to execute operation: No such file or directory

注:系统防火墙缺省未启用。

 

 

六、启动Docker Engine服务

启动Docker Engine服务,并将该服务设置为随机自启动。

# systemctl start docker
# systemctl enable docker

 

查看Docker Engine服务的状态和Docker的版本信息

[root@f807e9 opc]# service docker status

Redirecting to /bin/systemctl status  docker.service

docker.service - Docker Application Container Engine

   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)

  Drop-In: /etc/systemd/system/docker.service.d

           └─docker-sysconfig.conf, var-lib-docker-mount.conf

   Active: active (running) since Fri 2017-05-26 12:42:44 EDT; 1min 14s ago

     Docs: https://docs.docker.com

 Main PID: 2080 (dockerd)

   CGroup: /system.slice/docker.service

           ├─2080 /usr/bin/dockerd --selinux-enabled

           └─2086 docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --shim docker-containerd-shim --metrics-i...

 

May 26 12:42:43 f807e9 dockerd[2080]: time="2017-05-26T12:42:43.163337728-04:00" level=info msg="Graph migration to content-addressa...seconds"

May 26 12:42:43 f807e9 dockerd[2080]: time="2017-05-26T12:42:43.163778264-04:00" level=warning msg="mountpoint for pids not found"

May 26 12:42:43 f807e9 dockerd[2080]: time="2017-05-26T12:42:43.164138327-04:00" level=info msg="Loading containers: start."

May 26 12:42:43 f807e9 dockerd[2080]: time="2017-05-26T12:42:43.240929303-04:00" level=info msg="Firewalld running: false"

May 26 12:42:43 f807e9 dockerd[2080]: time="2017-05-26T12:42:43.796721078-04:00" level=info msg="Default bridge (docker0) is assigne...address"

May 26 12:42:44 f807e9 dockerd[2080]: time="2017-05-26T12:42:44.433712267-04:00" level=info msg="Loading containers: done."

May 26 12:42:44 f807e9 dockerd[2080]: time="2017-05-26T12:42:44.433896526-04:00" level=info msg="Daemon has completed initialization"

May 26 12:42:44 f807e9 dockerd[2080]: time="2017-05-26T12:42:44.433928509-04:00" level=info msg="Docker daemon" commit=ac13b2b graph...n=1.12.6

May 26 12:42:44 f807e9 systemd[1]: Started Docker Application Container Engine.

May 26 12:42:44 f807e9 dockerd[2080]: time="2017-05-26T12:42:44.462385745-04:00" level=info msg="API listen on /var/run/docker.sock"

Hint: Some lines were ellipsized, use -l to show in full.

 

[root@f807e9 opc]# docker info

Containers: 0

 Running: 0

 Paused: 0

 Stopped: 0

Images: 0

Server Version: 1.12.6

Storage Driver: btrfs

 Build Version: Btrfs v4.4.1

 Library Version: 101

Logging Driver: json-file

Cgroup Driver: cgroupfs

Plugins:

 Volume: local

 Network: null host bridge overlay

Swarm: inactive

Runtimes: runc

Default Runtime: runc

Security Options: seccomp

Kernel Version: 4.1.12-94.3.5.el7uek.x86_64

Operating System: Oracle Linux Server 7.3

OSType: linux

Architecture: x86_64

CPUs: 2

Total Memory: 14.43 GiB

Name: f807e9

ID: JMXR:N25K:G4WK:LAIN:LSCF:DYFB:FHVB:4VV7:R6HB:IVXZ:L53R:H6SE

Docker Root Dir: /var/lib/docker

Debug Mode (client): false

Debug Mode (server): false

Registry:https://index.docker.io/v1/

Insecure Registries:

 127.0.0.0/8

 

[root@f807e9 opc]# docker version

Client:

 Version:      1.12.6

 API version:  1.24

 Go version:   go1.6.4

 Git commit:   ac13b2b

 Built:        Wed Mar 22 02:52:47 2017

 OS/Arch:      linux/amd64

 

Server:

 Version:      1.12.6

 API version:  1.24

 Go version:   go1.6.4

 Git commit:   ac13b2b

 Built:        Wed Mar 22 02:52:47 2017

 OS/Arch:      linux/amd64

 

来吧,在Oracle云上部署Docker,就这么简单!!!

 

 


文章转载自凛冬未至,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论