- 3.1. cocker指令
- 3.1.1. 额外附加选项
- 3.1.2. 查询镜像列表
- 3.1.3. 由镜像创建容器
- 3.1.4. 查询容器列表
- 3.1.5. 启动容器
- 3.1.6. 连接容器
- 3.1.7. 停止容器
- 3.1.8. 杀死容器
- 3.1.9. 销毁容器
- 3.1.10. 修改镜像属性
- 3.1.11. 修改容器属性
- 3.1.12. 镜像转换为容器
- 3.1.13. 容器转换为镜像
- 3.1.14. 复制镜像
- 3.1.15. 删除镜像
- 3.1.16. 导出镜像
- 3.1.17. 导入镜像
- 3.1.18. 上传镜像到ssh镜像库
- 3.1.19. 从ssh镜像库下载镜像
- 3.1.20. 上传镜像到cocker自有镜像库
- 3.1.21. 从cocker自有镜像库下载镜像
- 3.1.22. 在容器外执行容器内命令
- 3.1.23. 替换容器内文件内容
- 3.1.24. 复制容器外文件或目录到容器内
- 3.1.25. 复制容器内文件或目录到容器外
- 3.1.26. 得到容器根目录在容器外路径
3.1. cocker指令
不带选项执行cocker
将得到所有指令和选项列表
# cocker
USAGE : cocker -v
-s images
-s containers
-a create (-m|--image) (image[:version])[,(image[:version])]... [ create options ] [ (-c|--container) (container) ] [ (-b|--boot) [ cgroup options ] [ (-t|--attach) | (-e|--exec) (cmd|"program para1 ...") ] ]
-a boot (-c|--container) (container) [ cgroup options ] [ (-t|--attach) | (-e|--exec) (cmd|"program para1 ...") ]
-a attach (-c|--container) (container)
-a shutdown (-c|--container) (container) [ (-f|--forcely) ]
-a kill (-c|--container) (container) [ (-f|--forcely) ]
-a destroy (-c|--container) (container) [ (-f|--forcely) ] [ (-h|--shutdown) ]
-a version (-m|--image) (image[:version]) [ --version (version) ]
-a vip (-c|--container) (container) --vip (ip)
-a port_mapping (-c|--container) (container) --port-mapping (src_port:dst_port)
-a volume (-c|--container) (container) --volume (host_path[:container_path])[ ...]
-a to_image --from-container (container) [ --verion (verion) ] --to-image (image)
-a to_container --from-image (image[:version]) (-m|--image) (image[:version])[,(image[:version])]... [ create options ] --to-container (container)
-a copy_image --from-image (image[:version]) --to-image (image[:version])
-a del_image (-m|--image) (image[:version])
-a import --image-file (file)
-a export (-m|--image) (image[:version])
-s ssearch --srepo (user@host)
-a install_test
create options : [ --volume (host_path:container_path) ][ --volume ... ] [ --host (hostname) ] [ --net (BRIDGE|HOST|CUSTOM) ] [ --host-eth (eth) ] [ --vip (ip) ] [ --port-mapping (src_port:dst_port) ]
cgroup options : [ --cpus [(cpu_num,...)|(cpu_num-cpu_num2)] ] [ --cpu-quota (percent%) ] [ --mem-limit (num|numM) ]
enable debug : [ (-d|--debug) ]
注意:首次执行cocker
会自动创建镜像主目录images
、容器主目录containers
。
3.1.1. 额外附加选项
cocker
选项-d
用于输出执行时调试信息,但并不是所有调试信息都会输出在屏幕上,某些不方便输出屏幕的信息会记录到日志文件中cocker.log
,输出到屏幕上的信息也会复制一份到日志文件中。
cocker
选项-f
用于强制执行而忽略一些报错,这在一些指令中很有用。
3.1.2. 查询镜像列表
使用cocker
指令-s images
查询镜像主目录里的所有镜像。
# cocker -s images
image_id version modify_datetime size
--------------------------------------------------------------------
test _ 2018-11-10T09:21:12 24 MB
镜像目录层次为镜像名/版本号/镜像目录文件内容
。如果没有版本号,版本号目录名为_
。
镜像名格式推荐(个人名或组织名)=(软件名)-(软件版本号)
。版本号格式推荐x.y.z
。
我们可以使用指令-a install_test
创建不同版本的测试镜像,多版本共存管理。
# cocker -a install_test --version "1.0.0"
OK
# cocker -a install_test --version "1.1.0"
OK
# cocker -s images
image_id version modify_datetime size
--------------------------------------------------------------------
test _ 2018-11-10T09:21:12 24 MB
test 1.0.0 2018-11-14T07:20:06 24 MB
test 1.1.0 2018-11-14T07:20:17 24 MB
3.1.3. 由镜像创建容器
使用cocker
指令-a create
由一个或多个镜像叠加创建容器。
# cocker -a create -m test --host test --net BRIDGE --vip 166.88.0.2 --port-mapping 19527:9527 -c test
OK
-m (镜像列表)
:指定镜像列表,镜像名可以以(镜像名)(:版本号)
格式指定版本号,本指令中允许不指定版本号,cocker
会自动挑选一个最大版本号的镜像。多个镜像之间用,
分隔。
--host (主机名)
:设置容器内的主机名。
--net (网络模型)
:设置容器网络模型,见前面网络模型章节。
--vip (ip)
:如果网络模型为BRIDGE
,设置容器内的网卡IP。
--port-mapping (网络端口映射列表)
:如果网络模型为BRIDGE
,设置外部或宿主机访问容器的网络端口映射列表,端口映射格式为(宿主机端口):(容器端口)
。多个端口映射之间用,
分隔。
-c (容器名)
:指定容器名,若不指定,与镜像同名。建议指定。
除了以上示例中用到的选项,以下为其它可选选项:
--host-eth (网卡名)
:指定宿主机对外网卡名。这在多物理网卡时使用。
--volume (磁盘卷映射列表)
:磁盘卷映射用于宿主机与容器之间目录共享,设置格式为(宿主机目录:容器目录)
。多个磁盘卷映射使用各自的选项键前缀--volume
。
-b
:容器创建完后立即启动。(后可追加所有启动容器选项)
3.1.4. 查询容器列表
使用cocker
指令-s containers
查询容器主目录中的所有容器以及状态。
# cocker -s containers
container_id image hostname net netns size status
-----------------------------------------------------------------------------------------------------------
test test test BRIDGE nns098F6BCD46 0 B STOPED
容器test
状态为停止。
3.1.5. 启动容器
使用cocker
指令-a boot
查询容器主目录中的所有容器以及状态。
# cocker -a boot -c test
OK
除了以上示例中用到的选项,以下为其它可选选项:
--cpus (CPU核列表)
:容器限制的CPU核列表,比如第一个CPU核0
,比如前两个CPU核0,1
,比如第二个CPU核到第十个CPU核1-9
。
--cpu-quota (num%)
:容器限制的CPU利用率,比如完全利用100%
,比如只能利用四分之一25%
。
--mem-limit (numM)
:容器限制的内存容量,比如100M
。
-t
:容器启动后立即连接。
-e (cmd)
:指定容器根进程,默认使用cocker
自带的cockerinit
。
启动后再查看容器状态
# cocker -s containers
container_id image hostname net netns size status
-----------------------------------------------------------------------------------------------------------
test test test BRIDGE nns098F6BCD46 0 B RUNNING(89698)
注意:默认启动容器的根进程为cockerinit
,可简单代替系统init
进程回收孤儿进程、管理伪终端等功能。
3.1.6. 连接容器
如果使用cockerinit
作为根进程启动容器,使用cocker
指令-a attch
连接至容器,cockerinit
打开一个会话连接到容器中的伪终端。也可叠加ssh镜像在容器内启动ssh服务器,利用ssh连接至容器。
# cocker -a attach -c test
connect to container ok
--- Welcome to cocker contrainer ---
[root@test /root]
注意:测试用镜像test
已包含了绝大多数必备工具包,但不是所有。
在伪终端中输入exit
加回车可关闭会话。
[root@test /root] exit
logout
#
3.1.7. 停止容器
使用cocker
指令-a shutdown
停止容器。
# cocker -a shutdown -c test
OK
# cocker -s containers
container_id image hostname net netns size status
-----------------------------------------------------------------------------------------------------------
test test test BRIDGE nns098F6BCD46 0 B STOPED
3.1.8. 杀死容器
使用cocker
指令-a kill
强杀容器。
3.1.9. 销毁容器
使用cocker
指令-a destroy
销毁容器。
注意:销毁容器后容器内所有修改将丢失。
# cocker -a destroy -c test
OK
除了以上示例中用到的选项,以下为其它可选选项:
-h
:先停止容器然后马上销毁容器。
-f
:销毁容器过程中忽略错误,默认会中断销毁过程。
3.1.10. 修改镜像属性
3.1.10.1. 修改版本号
使用cocker
指令-a version
修改镜像版本号。
# cocker -s images
image_id version modify_datetime size
--------------------------------------------------------------------
test _ 2018-11-10T09:21:12 24 MB
# cocker -a version -m test --version "1.0.1"
OK
# cocker -s images
image_id version modify_datetime size
--------------------------------------------------------------------
test 1.0.1 2018-11-10T09:21:12 24 MB
# cocker -a version -d -m "test:1.0.1" --version "1.0.2"
OK
# cocker -s images
image_id version modify_datetime size
--------------------------------------------------------------------
test 1.0.2 2018-11-10T09:21:12 24 MB
# cocker -a version -d -m "test:1.0.2"
OK
# cocker -s images
image_id version modify_datetime size
--------------------------------------------------------------------
test _ 2018-11-10T09:21:12 24 MB
3.1.11. 修改容器属性
3.1.11.1. 修改VIP
使用cocker
指令-a vip
修改容器内网卡IP。
注意:必须容器停止后才能修改。
# cocker -a vip --vip 166.88.0.3 -c test
OK
3.1.11.2. 修改容器端口映射
使用cocker
指令-a port_mapping
修改容器网络端口映射。
注意:必须容器停止后才能修改。
# cocker -a port_mapping --port-mapping 19528:9528 -c test
OK
3.1.11.3. 修改外挂卷映射
使用cocker
指令-a volume
修改容器磁盘卷映射。
注意:必须容器停止后才能修改。
# cocker -a volume --volume "/tmp:/tmp" --volume "/mnt/cdrom:/mnt/cdrom" -c test
OK
3.1.12. 镜像转换为容器
当需要修改镜像内文件时可先把镜像转换为容器,修改完后转换回镜像。
使用cocker
指令-a to_container
转换指定镜像为容器。
# cocker -a to_container --from-image test --host test --net BRIDGE --vip 166.88.0.2 --port-mapping 19527:9527 --to-container test
OK
注意:几乎可使用所有指令-a create
的选项。
3.1.13. 容器转换为镜像
当想把某一容器打包成镜像,可使用此指令。
使用cocker
指令-a to_image
转换指定容器为镜像。
注意:转换的容器必须是停止的。
# cocker -a to_image --from-container test --to-image test
OK
3.1.14. 复制镜像
使用cocker
指令-a copy_image
可复制镜像。
# cocker -a copy_image --from-image test --to-image "test2:1.0.0"
OK
3.1.15. 删除镜像
使用cocker
指令-a del_image
可删除镜像。
# cocker -a del_image -m "test2:1.0.0"
OK
3.1.16. 导出镜像
使用cocker
指令-a export
可导出镜像为镜像打包文件。
# cocker -a export -m "test:1.1.0"
OK
3.1.17. 导入镜像
使用cocker
指令-a import
可从镜像打包文件导入镜像库。
注意:镜像打包文件名扩展名必须是.cockerimage
。
# cocker -a del_image -m "test:1.1.0"
OK
# cocker -a import --image-file "test:1.1.0.cockerimage"
OK
# cocker -s images
image_id version modify_datetime size
--------------------------------------------------------------------
test 1.1.0 2018-11-14T08:53:13 24 MB
3.1.18. 上传镜像到ssh镜像库
ssh镜像库是利用ssh服务器来搭建镜像库。首先安装ssh服务器,创建镜像库用户,从客户端产生公钥文件分发给镜像库以方便免密登录。
# ssh-keygen -t rsa
...
# ssh-copy-id -i ~/.ssh/id_rsa.pub cockerimages@192.168.6.74
使用cocker
指令-s ssearch
可查看ssh镜像库里的镜像列表。
# cocker -s ssearch --srepo "cockerimages@192.168.6.74"
OK
注意:cocker
保存ssh镜像库地址配置cockerimages@192.168.6.74
。
还能加上子串通配选项--match
。
# cocker -s ssearch --match test
使用cocker
指令-a spush
上传镜像到ssh镜像库。
# cocker -a spush -m "test:1.0.0"
OK
# cocker -s ssearch --match test
cocker -s ssearch
image_id modify_datetime size
----------------------------------------------------------------------
test:1.0.0 2018-11-14T9:05:48 11 MB
3.1.19. 从ssh镜像库下载镜像
使用cocker
指令-a spull
从ssh镜像库下载镜像。
#
cocker -a del_image -m "test:1.0.0"
OK
# cocker -a spull -m "test:1.0.0"
OK
# cocker -s images
image_id version modify_datetime size
--------------------------------------------------------------------
test 1.0.0 2018-11-14T09:09:04 24 MB
3.1.20. 上传镜像到cocker自有镜像库
(待研发)
3.1.21. 从cocker自有镜像库下载镜像
(待研发)
3.1.22. 在容器外执行容器内命令
使用cocker
指令-a run
在容器外执行容器内命令
# cocker -a run -c test --cmd "hostname"
test
#
注意:容器是必须运行中状态。
3.1.23. 替换容器内文件内容
使用cocker
指令-a rplfile
替换容器内文件内容
# cocker -a rplfile -c test --template-file "/root/tpl.txt" --mapping-file "map.txt" --instance-file "/root/ins.txt"
OK
#
--template-file
和--instance-file
分别为模板文件和实例化文件,按容器内路径,省略--instance-file
将替换--template-file
自己。
--mapping-file
为替换配置,按容器外路径。一条规则为一行:
(KEY) (VALUE)\n
(KEY) (VAL UE)\n
...\n
替换示例:
tpl.txt
{ "leaf":"${LEAF}" }
map.txt
${LEAF} 我的树叶
替换后的ins.txt
{ "leaf":"我的树叶" }
此替换功能被广泛用于实例化容器内应用配置文件。
注意:容器是必须运行中状态。
3.1.24. 复制容器外文件或目录到容器内
使用cocker
指令-a putfile
复制容器外文件或目录到容器内
# cocker -a putfile -c test --src-file "map.txt" --dst-file "/root/"
OK
#
注意:也可通过ssh等服务复制。
3.1.25. 复制容器内文件或目录到容器外
使用cocker
指令-a getfile
复制容器内文件或目录到容器外
# cocker -a getfile -c test --src-file "/root/map.txt" --dst-file "./"
OK
#
注意:也可通过ssh等服务复制。
3.1.26. 得到容器根目录在容器外路径
使用cocker
指令-s container_root
得到容器根目录在容器外路径
# cocker -s container_root -c test
/var/cocker/containers/test/merged
#
注意:外露容器根目录可能不太合适。