在IMX6Q的linux4.1.15版本上默认支持docker
關(guān)于docker:
Docker 容器是一個開源的應(yīng)用容器引擎,讓開發(fā)者可以以統(tǒng)一的方式打包他們的應(yīng)用以及依賴包到一個可移植的容器中,然后發(fā)布到任何安裝了docker引擎的服務(wù)器上(包括流行的Linux機器、windows機器),也可以實現(xiàn)虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口(類似 iPhone 的 app)。幾乎沒有性能開銷,可以很容易地在機器和數(shù)據(jù)中心中運行。最重要的是,他們不依賴于任何語言、框架包括系統(tǒng)。
所以很多應(yīng)用由于其環(huán)境特殊,是需要運行在docker里的。但6q默認沒有支持docker。之前有做過,這次整理到內(nèi)核和文件系統(tǒng)中:
一、修改配置文件,使內(nèi)核支持docker。
--- a/arch/arm/configs/imx_v7_defconfig +++ b/arch/arm/configs/imx_v7_defconfig @@ -46,7 +46,8 @@ CONFIG_DEFAULT_HOSTNAME="(none)"CONFIG_SWAP=yCONFIG_SYSVIPC=yCONFIG_SYSVIPC_SYSCTL=y -# CONFIG_POSIX_MQUEUE is not set +CONFIG_POSIX_MQUEUE=y +CONFIG_POSIX_MQUEUE_SYSCTL=yCONFIG_CROSS_MEMORY_ATTACH=y# CONFIG_FHANDLE is not setCONFIG_USELIB=y @@ -117,16 +118,30 @@ CONFIG_LOG_CPU_MAX_BUF_SHIFT=12CONFIG_GENERIC_SCHED_CLOCK=yCONFIG_CGROUPS=y# CONFIG_CGROUP_DEBUG is not set -# CONFIG_CGROUP_FREEZER is not set -# CONFIG_CGROUP_DEVICE is not set -# CONFIG_CPUSETS is not set -# CONFIG_CGROUP_CPUACCT is not set -# CONFIG_MEMCG is not set -# CONFIG_CGROUP_PERF is not set -# CONFIG_CGROUP_SCHED is not set -# CONFIG_BLK_CGROUP is not set +CONFIG_CGROUP_FREEZER=y +CONFIG_CGROUP_DEVICE=y +CONFIG_CPUSETS=y +CONFIG_PROC_PID_CPUSET=y +CONFIG_CGROUP_CPUACCT=y +CONFIG_PAGE_COUNTER=y +CONFIG_MEMCG=y +CONFIG_MEMCG_SWAP=y +CONFIG_MEMCG_SWAP_ENABLED=y +CONFIG_MEMCG_KMEM=y +CONFIG_CGROUP_PERF=y +CONFIG_CGROUP_SCHED=y +CONFIG_FAIR_GROUP_SCHED=y +CONFIG_CFS_BANDWIDTH=y +CONFIG_RT_GROUP_SCHED=y +CONFIG_BLK_CGROUP=y +CONFIG_DEBUG_BLK_CGROUP=y# CONFIG_CHECKPOINT_RESTORE is not set -# CONFIG_NAMESPACES is not set +CONFIG_NAMESPACES=y +CONFIG_UTS_NS=y +CONFIG_IPC_NS=y +CONFIG_USER_NS=y +CONFIG_PID_NS=y +CONFIG_NET_NS=y# CONFIG_SCHED_AUTOGROUP is not set# CONFIG_SYSFS_DEPRECATED is not setCONFIG_RELAY=y @@ -206,6 +221,7 @@ CONFIG_HAVE_PERF_USER_STACK_DUMP=yCONFIG_HAVE_ARCH_JUMP_LABEL=yCONFIG_ARCH_WANT_IPC_PARSE_VERSION=yCONFIG_HAVE_ARCH_SECCOMP_FILTER=y +CONFIG_SECCOMP_FILTER=yCONFIG_HAVE_CC_STACKPROTECTOR=y# CONFIG_CC_STACKPROTECTOR is not setCONFIG_CC_STACKPROTECTOR_NONE=y @@ -243,6 +259,7 @@ CONFIG_LBDAF=y# CONFIG_BLK_DEV_BSG is not set# CONFIG_BLK_DEV_BSGLIB is not set# CONFIG_BLK_DEV_INTEGRITY is not set +CONFIG_BLK_DEV_THROTTLING=y# CONFIG_BLK_CMDLINE_PARSER is not set# @@ -258,6 +275,7 @@ CONFIG_EFI_PARTITION=yCONFIG_IOSCHED_NOOP=yCONFIG_IOSCHED_DEADLINE=yCONFIG_IOSCHED_CFQ=y +CONFIG_CFQ_GROUP_IOSCHED=y# CONFIG_DEFAULT_DEADLINE is not setCONFIG_DEFAULT_CFQ=y# CONFIG_DEFAULT_NOOP is not set @@ -523,7 +541,7 @@ CONFIG_CMA_AREAS=7CONFIG_FORCE_MAX_ZONEORDER=14CONFIG_ALIGNMENT_TRAP=y# CONFIG_UACCESS_WITH_MEMCPY is not set -# CONFIG_SECCOMP is not set +CONFIG_SECCOMP=yCONFIG_SWIOTLB=yCONFIG_IOMMU_HELPER=y# CONFIG_XEN is not set @@ -610,7 +628,7 @@ CONFIG_BINFMT_ELF=yCONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=yCONFIG_BINFMT_SCRIPT=y# CONFIG_HAVE_AOUT is not set -CONFIG_BINFMT_MISC=m +CONFIG_BINFMT_MISC=yCONFIG_COREDUMP=y# @@ -725,14 +743,21 @@ CONFIG_PACKET=yCONFIG_UNIX=y# CONFIG_UNIX_DIAG is not setCONFIG_XFRM=y -# CONFIG_XFRM_USER is not set +CONFIG_XFRM_ALGO=y +CONFIG_XFRM_USER=y# CONFIG_XFRM_SUB_POLICY is not set# CONFIG_XFRM_MIGRATE is not set# CONFIG_XFRM_STATISTICS is not setCONFIG_NET_KEY=y +# CONFIG_NET_KEY_MIGRATE is not setCONFIG_INET=y# CONFIG_IP_MULTICAST is not setCONFIG_IP_ADVANCED_ROUTER=y +# CONFIG_IP_FIB_TRIE_STATS is not set +CONFIG_IP_MULTIPLE_TABLES=y +# CONFIG_IP_ROUTE_MULTIPATH is not set +# CONFIG_IP_ROUTE_VERBOSE is not set +CONFIG_IP_ROUTE_CLASSID=yCONFIG_IP_PNP=yCONFIG_IP_PNP_DHCP=y# CONFIG_IP_PNP_BOOTP is not set @@ -740,8 +765,8 @@ CONFIG_IP_PNP_DHCP=y# CONFIG_NET_IPIP is not set# CONFIG_NET_IPGRE_DEMUX is not setCONFIG_NET_IP_TUNNEL=y -# CONFIG_SYN_COOKIES is not set -# CONFIG_NET_UDP_TUNNEL is not set +CONFIG_SYN_COOKIES=y +CONFIG_NET_UDP_TUNNEL=y# CONFIG_NET_FOU is not set# CONFIG_NET_FOU_IP_TUNNELS is not set# CONFIG_GENEVE is not set @@ -792,7 +817,10 @@ CONFIG_NETFILTER=y# CONFIG_TIPC is not set# CONFIG_ATM is not set# CONFIG_L2TP is not set -# CONFIG_BRIDGE is not set +CONFIG_STP=y +CONFIG_BRIDGE=y +CONFIG_BRIDGE_IGMP_SNOOPING=y +# CONFIG_BRIDGE_VLAN_FILTERING is not setCONFIG_HAVE_NET_DSA=yCONFIG_VLAN_8021Q=y# CONFIG_VLAN_8021Q_GVRP is not set @@ -821,8 +849,8 @@ CONFIG_DNS_RESOLVER=yCONFIG_RPS=yCONFIG_RFS_ACCEL=yCONFIG_XPS=y -# CONFIG_CGROUP_NET_PRIO is not set -# CONFIG_CGROUP_NET_CLASSID is not set +CONFIG_CGROUP_NET_PRIO=y +CONFIG_CGROUP_NET_CLASSID=yCONFIG_NET_RX_BUSY_POLL=yCONFIG_BQL=y# CONFIG_BPF_JIT is not set @@ -874,6 +902,7 @@ CONFIG_CAN_MCP251X=y# CONFIG_IRDA is not set# CONFIG_BT is not set# CONFIG_AF_RXRPC is not set +CONFIG_FIB_RULES=yCONFIG_WIRELESS=yCONFIG_CFG80211=y# CONFIG_NL80211_TESTMODE is not set @@ -1243,17 +1272,18 @@ CONFIG_NETDEVICES=yCONFIG_MII=yCONFIG_NET_CORE=y# CONFIG_BONDING is not set -# CONFIG_DUMMY is not set +CONFIG_DUMMY=y# CONFIG_EQUALIZER is not set# CONFIG_NET_TEAM is not set -# CONFIG_MACVLAN is not set -# CONFIG_IPVLAN is not set -# CONFIG_VXLAN is not set +CONFIG_MACVLAN=y +# CONFIG_MACVTAP is not set +CONFIG_IPVLAN=y +CONFIG_VXLAN=y# CONFIG_NETCONSOLE is not set# CONFIG_NETPOLL is not set# CONFIG_NET_POLL_CONTROLLER is not set# CONFIG_TUN is not set -# CONFIG_VETH is not set +CONFIG_VETH=y# CONFIG_VIRTIO_NET is not set# CONFIG_NLMON is not set@@ -2552,10 +2582,10 @@ CONFIG_HDMI=y# Console display driver support#CONFIG_DUMMY_CONSOLE=y -# CONFIG_FRAMEBUFFER_CONSOLE is not set -# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set -# CONFIG_LOGO is not set +CONFIG_LOGO=yCONFIG_LOGO_LINUX_MONO=yCONFIG_LOGO_LINUX_VGA16=yCONFIG_LOGO_LINUX_CLUT224=y @@ -3282,6 +3312,13 @@ CONFIG_RTC_DRV_RX8010=y# CONFIG_RTC_DRV_RP5C01 is not set# CONFIG_RTC_DRV_V3020 is not set+ + + +CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y; +CONFIG_NETFILTER_XT_MATCH_IPVS=y; +CONFIG_DEVPTS_MULTIPLE_INSTANCES=y; +## on-CPU RTC drivers# @@ -3738,6 +3775,8 @@ CONFIG_FS_MBCACHE=y# CONFIG_XFS_FS is not set# CONFIG_GFS2_FS is not set# CONFIG_OCFS2_FS is not set +CONFIG_BTRFS_FS=y +CONFIG_BTRFS_FS_POSIX_ACL=y# CONFIG_BTRFS_FS is not set# CONFIG_NILFS2_FS is not set# CONFIG_F2FS_FS is not set @@ -3757,7 +3796,7 @@ CONFIG_QUOTACTL=yCONFIG_AUTOFS4_FS=yCONFIG_FUSE_FS=y# CONFIG_CUSE is not set -# CONFIG_OVERLAY_FS is not set +CONFIG_OVERLAY_FS=y## Caches @@ -4119,7 +4158,7 @@ CONFIG_CRYPTO_XTS=y# Hash modes#CONFIG_CRYPTO_CMAC=y -# CONFIG_CRYPTO_HMAC is not set +CONFIG_CRYPTO_HMAC=y# CONFIG_CRYPTO_XCBC is not set# CONFIG_CRYPTO_VMAC is not set@@ -4204,6 +4243,7 @@ CONFIG_CRYPTO_DEV_MXS_DCP=y## Library routines# +CONFIG_RAID6_PQ=yCONFIG_BITREVERSE=yCONFIG_HAVE_ARCH_BITREVERSE=yCONFIG_RATIONAL=y @@ -4250,6 +4290,10 @@ CONFIG_DECOMPRESS_XZ=yCONFIG_DECOMPRESS_LZO=yCONFIG_DECOMPRESS_LZ4=yCONFIG_GENERIC_ALLOCATOR=y +CONFIG_TEXTSEARCH=y +CONFIG_TEXTSEARCH_KMP=y +CONFIG_TEXTSEARCH_BM=y +CONFIG_TEXTSEARCH_FSM=yCONFIG_ASSOCIATIVE_ARRAY=yCONFIG_HAS_IOMEM=yCONFIG_HAS_IOPORT_MAP=y然后重新編譯內(nèi)核,生成新的zImage并替換。
二、文件系統(tǒng)中添加對應(yīng)的docker命令和要用的腳本
我這里是用的直接編譯好的命令,其他cpu或者系統(tǒng)需要使用的話可以找到docker源碼交叉編譯一下可執(zhí)行文件。
將cgroup的掛載腳本添加到文件系統(tǒng)中:
制作出燒寫的文件系統(tǒng),和剛才的內(nèi)核一同燒寫。
三、測試
先執(zhí)行掛載腳本
root@imx6qsabresd:/forlinx/shell# ./cgroupfs-mount.sh root@imx6qsabresd:/forlinx/shell#然后后臺執(zhí)行dockerd命令,開啟管理進程
root@imx6qsabresd:/forlinx/shell# dockerd & [1] 906 root@imx6qsabresd:/forlinx/shell# WARN[2011-06-20T20:12:47.131209033Z] Error while setting daemon root propagation, this is not generally critical but may cause some functionality to not work or fallback to less desirable behavior dir=/var/lib/docker error="error writing file to signal mount cleanup on shutdown: open /var/run/docker/unmount-on-shutdown: no such file or directory" WARN[2011-06-20T20:12:47.132329366Z] could not change group /var/run/docker.sock to docker: group docker not found INFO[2011-06-20T20:12:47.162946033Z] libcontainerd: started new containerd process pid=915 INFO[2011-06-20T20:12:47.163698699Z] parsed scheme: "unix" module=grpc INFO[2011-06-20T20:12:47.163807366Z] scheme "unix" not registered, fallback to default scheme module=grpc INFO[2011-06-20T20:12:47.186733699Z] ccResolverWrapper: sending new addresses to cc: [{unix:///var/run/docker/containerd/containerd.sock 0 <nil>}] module=grpc INFO[2011-06-20T20:12:47.186960699Z] ClientConn switching balancer to "pick_first" module=grpc INFO[2011-06-20T20:12:47.187860033Z] pickfirstBalancer: HandleSubConnStateChange: 0x1484f2f0, CONNECTING module=grpc INFO[0000] starting containerd revision=468a545b9edcd5932818eb9de8e72413e616e86e version=v1.1.2到此docker已經(jīng)成功支持,執(zhí)行一個docker命令測試:
root@imx6qsabresd:/forlinx/shell# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES root@imx6qsabresd:/forlinx/shell#腳本的內(nèi)容如下,供參考。
#!/bin/sh# Copyright 2011 Canonical, Inc# 2014 Tianon Gravi# Author: Serge Hallyn <serge.hallyn@canonical.com># Tianon Gravi <tianon@debian.org>set -e# for simplicity this script provides no flexibility# if cgroup is mounted by fstab, don't run# don't get too smart - bail on any uncommented entry with 'cgroup' in itif grep -v '^#' /etc/fstab | grep -q cgroup; thenecho 'cgroups mounted from fstab, not mounting /sys/fs/cgroup'exit 0fi# kernel provides cgroups?if [ ! -e /proc/cgroups ]; thenexit 0fi# if we don't even have the directory we need, something else must be wrongif [ ! -d /sys/fs/cgroup ]; thenexit 0fi# mount /sys/fs/cgroup if not already doneif ! mountpoint -q /sys/fs/cgroup; thenmount -t tmpfs -o uid=0,gid=0,mode=0755 cgroup /sys/fs/cgroupficd /sys/fs/cgroup# get/mount list of enabled cgroup controllersfor sys in $(awk '!/^#/ { if ($4 == 1) print $1 }' /proc/cgroups); domkdir -p $sysif ! mountpoint -q $sys; thenif ! mount -n -t cgroup -o $sys cgroup $sys; thenrmdir $sys || truefifidone# example /proc/cgroups:# #subsys_name hierarchy num_cgroups enabled# cpuset 2 3 1# cpu 3 3 1# cpuacct 4 3 1# memory 5 3 0# devices 6 3 1# freezer 7 3 1# blkio 8 3 1exit 0總結(jié)
以上是生活随笔為你收集整理的在IMX6Q的linux4.1.15版本上默认支持docker的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: COM 组件设计与应用(十一)
- 下一篇: Multisim软件使用详细入门教程(图