docker容器
docker类似于我们在电脑上使用的虚拟机软件,比如VMware,但是与传统的虚拟技术又有着很大的不同。最大的不同在于传统的虚拟技术是在现有的硬件资源上切分出虚拟机所需要的资源,宿主机与虚拟机的硬件资源是不交叉的。
docker的虚拟化则属于操作系统层面的虚拟技术,只是实现了宿主机与容器这两者文件系统、网络以及进程等的隔离,宿主机与多个容器对于硬件资源属于动态共享的一种状态。
docker相比于虚拟机技术要更加的轻便,快捷。
关于docker的背景以及其他相关知识,这里不再赘述,想要进一步了解docker,可以看一下《Docker-从入门到实践》这本书。
内核对于docker的支持
Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的
cgroup,namespace,以及 AUFS 类的 Union FS 等技术。所以内核需要支持以上这些功能,系统才能够运行docker。
可以使用check-config.sh对内核的配置进行检查,该脚本可以从如下链接获得:
https://gitee.com/zouchao/shell/blob/master/check-config.sh
其中有必须配置的选项-Necessary和选配选项Optional,必须配置的选项必须是enabled的状态,如果是missing的状态,则需要修改内核配置文件进行添加。
e.g.
forlinx@forlinx:~$ sudo ./check-config.sh
warning: /proc/config.gz does not exist, searching other paths for kernel config ...
info: reading kernel config from /usr/src/linux/.config ...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 (as module)
- CONFIG_NF_NAT_IPV4: enabled
- CONFIG_IP_NF_FILTER: 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: enabledOptional Features:
- CONFIG_USER_NS: enabled
- CONFIG_SECCOMP: enabled
- CONFIG_CGROUP_PIDS: enabled
- CONFIG_MEMCG_SWAP: enabled
- CONFIG_MEMCG_SWAP_ENABLED: enabled(cgroup swap accounting is currently enabled)
- CONFIG_MEMCG_KMEM: missing
- CONFIG_BLK_CGROUP: enabled
- CONFIG_BLK_DEV_THROTTLING: enabled
- CONFIG_IOSCHED_CFQ: enabled
- CONFIG_CFQ_GROUP_IOSCHED: enabled
- CONFIG_CGROUP_PERF: enabled
- CONFIG_CGROUP_HUGETLB: missing
- CONFIG_NET_CLS_CGROUP: enabled
- CONFIG_CGROUP_NET_PRIO: enabled
- CONFIG_CFS_BANDWIDTH: enabled
- CONFIG_FAIR_GROUP_SCHED: enabled
- CONFIG_RT_GROUP_SCHED: enabled
- CONFIG_IP_NF_TARGET_REDIRECT: enabled
- CONFIG_IP_VS: enabled
- CONFIG_IP_VS_NFCT: enabled
- CONFIG_IP_VS_PROTO_TCP: enabled
- CONFIG_IP_VS_PROTO_UDP: enabled
- CONFIG_IP_VS_RR: enabled
- CONFIG_EXT4_FS: enabled
- CONFIG_EXT4_FS_POSIX_ACL: enabled
- CONFIG_EXT4_FS_SECURITY: enabled
- Network Drivers:- "overlay":- CONFIG_VXLAN: enabled- CONFIG_BRIDGE_VLAN_FILTERING: enabledOptional (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: enabled- CONFIG_XFRM_ALGO: enabled- CONFIG_INET_ESP: enabled- CONFIG_INET_XFRM_MODE_TRANSPORT: enabled- "ipvlan":- CONFIG_IPVLAN: enabled- "macvlan":- CONFIG_MACVLAN: enabled- CONFIG_DUMMY: enabled- "ftp,tftp client in container":- CONFIG_NF_NAT_FTP: enabled- CONFIG_NF_CONNTRACK_FTP: enabled- CONFIG_NF_NAT_TFTP: enabled- CONFIG_NF_CONNTRACK_TFTP: enabled
- Storage Drivers:- "aufs":- CONFIG_AUFS_FS: missing- "btrfs":- CONFIG_BTRFS_FS: enabled- CONFIG_BTRFS_FS_POSIX_ACL: enabled- "devicemapper":- CONFIG_BLK_DEV_DM: enabled- CONFIG_DM_THIN_PROVISIONING: enabled- "overlay":- CONFIG_OVERLAY_FS: enabled- "zfs":- /dev/zfs: missing- zfs command: missing- zpool command: missingLimits:
- /proc/sys/kernel/keys/root_maxkeys: 1000000
ubuntu18.04 安装docker
安装docker-cesudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=arm64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
apt-cache madison docker-ce
sudo apt-get -y install docker-ce=18.06.3~ce~3-0~ubuntu
容器的操作步骤拉取镜像
sudo docker pull ubuntu:16.04
查看镜像
sudo docker image ls
运行容器
sudo docker run -itd --name ok3399_android_ubuntu16 --privileged=true --cap-add=SYS_ADMIN -v /home/forlinx:/root/workspace/rk3399 -p 10600:22 af680e64f655 bin/bash
查看上一步运行起来的容器
sudo docker container ls
进入容器
sudo docker exec -it 90d263119866 bash
root@90d263119866:/#
执行运行容器的命令时要注意外部路径与容器内部路径的映射,以及宿主机网络端口与容器网络端口的映射:
1、-i 交互式操作
2、-t 终端
当需要进入 bash 执行一些命令并查看返回结果,就需要交互式终端。
3、-d 后台运行
4、–name 命名
5、–privileged=true ,容器会被允许直接配置主机的网络堆栈
6、–cap-add=SYS_ADMIN 给容器赋予权限
7、-v 安装挂载一个卷
8、通过 -P 或 -p 参数来指定端口映射
当使用 -P 标记时,Docker 会随机映射一个 49000~49900 的端口到内部容器
开放的网络端口。
-p 则可以指定要映射的端口,并且,在一个指定端口上只可以绑定一个容器。
支持的格式有 ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort 。
启动容器中的ssh服务
docker exec -it 90d263119866 /etc/init.d/ssh start