系統:ubuntu16.04
內核版本:4.4.167
硬件:rk3399
1.安裝必要工具:
apt-get update
apt-get upgrade
apt-get install curl
2.內核使能添加配置:
有些版本內核(imx6q的4.1.15)可以直接下載官方檢測內核配置腳本:
下載檢測腳本sudo curl https://raw.githubusercontent.com/docker/docker/master/contrib/check-config.sh > check-config.sh
賦予執行權限chmod 777 check-config.sh
運行腳本./check-config.sh,會出現以下打印信息:
root@ParkW:/usr# ./check-config.sh
info: reading kernel config from /proc/config.gz ...
Generally Necessary:
- cgroup hierarchy: properly mounted [/sys/fs/cgroup]
- CONFIG_NAMESPACES: enabled
- CONFIG_NET_NS: enabled
- CONFIG_PID_NS: enabled
- CONFIG_IPC_NS: enabled
- CONFIG_UTS_NS: enabled
- CONFIG_CGROUPS: enabled
- CONFIG_CGROUP_CPUACCT: enabled
- CONFIG_CGROUP_DEVICE: enabled
- CONFIG_CGROUP_FREEZER: enabled
- CONFIG_CGROUP_SCHED: enabled
- CONFIG_CPUSETS: enabled
- CONFIG_MEMCG: enabled
- CONFIG_KEYS: enabled
- CONFIG_VETH: enabled
- CONFIG_BRIDGE: enabled
- CONFIG_BRIDGE_NETFILTER: enabled
- CONFIG_NF_NAT_IPV4: enabled
- CONFIG_IP: enabled
- CONFIG_IP_NF_TARGET_MASQUERADE: enabled
- CONFIG_NETFILTER_XT_MATCH_ADDRTYPE: enabled
- CONFIG_NETFILTER_XT_MATCH_CONNTRACK: enabled
- CONFIG_NETFILTER_XT_MATCH_IPVS: enabled
- CONFIG_IP_NF_NAT: enabled
- CONFIG_NF_NAT: enabled
- CONFIG_NF_NAT_NEEDED: enabled
- CONFIG_POSIX_MQUEUE: enabled
- CONFIG_DEVPTS_MULTIPLE_INSTANCES: enabled
Optional Features:
- CONFIG_USER_NS: missing
- CONFIG_SECCOMP: missing
- CONFIG_CGROUP_PIDS: missing
- CONFIG_MEMCG_SWAP: missing
- CONFIG_MEMCG_SWAP_ENABLED: missing
- CONFIG_MEMCG_KMEM: missing
- CONFIG_BLK_CGROUP: missing
- CONFIG_BLK_DEV_THROTTLING: missing
- CONFIG_IOSCHED_CFQ: enabled
- CONFIG_CFQ_GROUP_IOSCHED: missing
- CONFIG_CGROUP_PERF: missing
- CONFIG_CGROUP_HUGETLB: missing
- CONFIG_NET_CLS_CGROUP: enabled
- CONFIG_CGROUP_NET_PRIO: enabled
- CONFIG_CFS_BANDWIDTH: missing
- CONFIG_FAIR_GROUP_SCHED: enabled
- CONFIG_RT_GROUP_SCHED: missing
- CONFIG_IP_NF_TARGET_REDIRECT: enabled
- CONFIG_IP_VS: enabled
- CONFIG_IP_VS_NFCT: missing
- CONFIG_IP_VS_PROTO_TCP: missing
- CONFIG_IP_VS_PROTO_UDP: missing
- CONFIG_IP_VS_RR: missing
- CONFIG_EXT3_FS: enabled
- CONFIG_EXT3_FS_XATTR: enabled
- CONFIG_EXT3_FS_POSIX_ACL: enabled
- CONFIG_EXT3_FS_SECURITY: enabled
- CONFIG_EXT4_FS: enabled
- CONFIG_EXT4_FS_POSIX_ACL: enabled
- CONFIG_EXT4_FS_SECURITY: enabled
- Network Drivers:
- "overlay":
- CONFIG_VXLAN: missing
Optional (for encrypted networks):
- CONFIG_CRYPTO: enabled
- CONFIG_CRYPTO_AEAD: enabled
- CONFIG_CRYPTO_GCM: enabled
- CONFIG_CRYPTO_SEQIV: enabled
- CONFIG_CRYPTO_GHASH: enabled
- CONFIG_XFRM: enabled
- CONFIG_XFRM_USER: missing
- CONFIG_XFRM_ALGO: enabled
- CONFIG_INET_ESP: missing
- CONFIG_INET_XFRM_MODE_TRANSPORT: missing
- "ipvlan":
- CONFIG_IPVLAN: enabled
- "macvlan":
- CONFIG_MACVLAN: enabled
- CONFIG_DUMMY: missing
- "ftp,tftp client in container":
- CONFIG_NF_NAT_FTP: missing
- CONFIG_NF_CONNTRACK_FTP: missing
- CONFIG_NF_NAT_TFTP: missing
- CONFIG_NF_CONNTRACK_TFTP: missing
- Storage Drivers:
- "aufs":
- CONFIG_AUFS_FS: missing
- "btrfs":
- CONFIG_BTRFS_FS: missing
- CONFIG_BTRFS_FS_POSIX_ACL: missing
- "devicemapper":
- CONFIG_BLK_DEV_DM: missing
- CONFIG_DM_THIN_PROVISIONING: missing
- "overlay":
- CONFIG_OVERLAY_FS: enabled
- "zfs":
- /dev/zfs: missing
- zfs command: missing
- zpool command: missing
Limits:
- /proc/sys/kernel/keys/root_maxkeys: 1000000
需要將主要欄目(Generally Necessary:)內的非enabled的配置項目在內核源碼中使用make ARCH=arm(arm64) menuconfig選中。
rk3399內核不能使用這個檢測腳本,可以直接在內核源碼中使用make ARCH=arm64 menuconfig,直接選中以下配置項即可:
- CONFIG_NAMESPACES: enabled
- CONFIG_NET_NS: enabled
- CONFIG_PID_NS: enabled
- CONFIG_IPC_NS: enabled
- CONFIG_UTS_NS: enabled
- CONFIG_CGROUPS: enabled
- CONFIG_CGROUP_CPUACCT: enabled
- CONFIG_CGROUP_DEVICE: enabled
- CONFIG_CGROUP_FREEZER: enabled
- CONFIG_CGROUP_SCHED: enabled
- CONFIG_CPUSETS: enabled
- CONFIG_MEMCG: enabled
- CONFIG_KEYS: enabled
- CONFIG_VETH: enabled
- CONFIG_BRIDGE: enabled
- CONFIG_BRIDGE_NETFILTER: enabled
- CONFIG_NF_NAT_IPV4: enabled
- CONFIG_IP: enabled
- CONFIG_IP_NF_TARGET_MASQUERADE: enabled
- CONFIG_NETFILTER_XT_MATCH_ADDRTYPE: enabled
- CONFIG_NETFILTER_XT_MATCH_CONNTRACK: enabled
- CONFIG_NETFILTER_XT_MATCH_IPVS: enabled
- CONFIG_IP_NF_NAT: enabled
- CONFIG_NF_NAT: enabled
- CONFIG_NF_NAT_NEEDED: enabled
- CONFIG_POSIX_MQUEUE: enabled
- CONFIG_DEVPTS_MULTIPLE_INSTANCES: enabled
3.安裝docker
使用命令獲得安裝腳本, docker不建議使用apt-get來安裝, 據網上的大神說ubuntu官方源安裝的docker不能使用:
curl -fssl https://get.docker.com -o get-docker.sh
賦予執行權限:chmod 777 get-docker.sh
執行安裝腳本進行安裝:./get-docker.sh
4.使用docker
1)啓動docker服務
service docker start
2)啓動某個image(鏡像)的container(容器)
docker的鏡像稱爲image,容器爲container
對於Docker來說,image是靜態的,類似於操作系統快照,而container則是動態的,是image的運行實例。
比如,有一個image名稱爲ubuntu,那麼比如現在我們啓動這個image的container並且進入到這個container的bash命令行中:
docker run -t -i ubuntu /bin/bash
-
docker run:啓動container
-
ubuntu:你想要啓動的image
-
-t:進入終端
-
-i:獲得一個交互式的連接,通過獲取container的輸入
-
/bin/bash:在container中啓動一個bash shell
這樣就進入container的內部了:
root@4c69aba0c516:/#
如果要正常退出不關閉容器,請按Ctrl+P+Q進行退出容器,即容器後臺運行。
如果要正常退出並關閉,請輸入exit 進行退出容器,即容器關閉退出。
如果有運行中的container,可以在container所在的外部操作系統中運行,這個命令可以查看當前正在運行的容器:docker ps
docker ps
root@EmbedSky-Board:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4c69aba0c516 ubuntu "/bin/bash" 38 seconds ago Up 35 seconds jolly_chaplygin
如果想看到所有的container,包括運行中的,以及未運行的或者說是沉睡鏡像,和運行過已經關閉的,則運行:docker ps -a
docker ps -a
root@EmbedSky-Board:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4c69aba0c516 ubuntu "/bin/bash" About a minute ago Up About a minute jolly_chaplygin
bda09e02db27 ubuntu "/bin/bash" 3 minutes ago Exited (0) About a minute ago wizardly_taussig
b584ccc188fd ubuntu "/bin/bash" 7 minutes ago Exited (0) About a minute ago stupefied_chaum
ab9ace972eb0 ubuntu "/bin/bash" About an hour ago Exited (0) 26 minutes ago sad_curie
使用docker restart [NAMES]命令重啓容器,用於用exit退出後已關閉的容器重啓,最後一個參數是docker ps -a查看的最後一項NAMES,如:
root@ab9ace972eb0:/# exit
exit
root@EmbedSky-Board:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
root@EmbedSky-Board:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ab9ace972eb0 ubuntu "/bin/bash" About an hour ago Exited (0) About a minute ago sad_curie
root@EmbedSky-Board:~# docker restart sad_curie
sad_curie
root@EmbedSky-Board:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ab9ace972eb0 ubuntu "/bin/bash" About an hour ago Up 19 seconds sad_curie
使用docker attach [NAMES] 命令進入容器,用於後臺運行沒有被關閉的容器,即使用命令docker ps可以看到的:
root@4c69aba0c516:/# 使用ctrl+Q+P
root@EmbedSky-Board:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4c69aba0c516 ubuntu "/bin/bash" 11 minutes ago Up 11 minutes jolly_chaplygin
root@EmbedSky-Board:~# docker attach jolly_chaplygin
root@4c69aba0c516:/#