http://os.51cto.com/art/201409/451117.htm

2.1 在测试机启动容器,安装ssh

  1. docker run -i -t ubuntu /bin/bash #此方式运行的容器,退出后容器就会关闭。
  2. apt-get install openssh-server #安装ssh
  3. #需要修改/etc/sshd/sshd_config文件中内容
  4. PermitRootLogin yes
  5. UsePAM no

2.2 启动ssh,容器以后台方式运行

  1. docker run -d -p 50001:22 <容器id> /usr/sbin/sshd-D
  2. #容器id可通过 docker ps-a查看,最上面的为最新的。

2.3 通过ssh连接到容器安装软件

  1. ssh root@127.0.0.1-p 50001
  2. #连上后想装什么就装什么,可使用exit退出容器,但后台还会运行。

2.4 服务安装完成后,停止容器。

  1. docker stop <容器id> #停止运行的容器

2.5 把容器提交生成最新的镜像

  1. docker commit <容器id> debian02 #把这个容器提交生成新的debian02镜像(该镜像是原始镜像与容器的整合)

2.6 打包镜像

  1. docker save debian02 >/root/debian02.tar #debian02镜像打包

2.7 在另外的机器上导入镜像

  1. docker load < debian02.tar #导入镜像
  2. docker images #查看存在的镜像

2.8 启动容器

  1. docker run -h="redis-test" --name redis-test -d -p 51000:22 -p51001:3306 -p 51003:6379 -p 51004:6381 -p 51005:80 -p 51006:8000 -p 51007:8888 debian02 /etc/rc.local
  2. #此处是我测试机器启动命令,指定主机名与端口映射。
  3. #启动后,后面又装了程序,开机自启动命令可放在/etc/rc.local文件中。
  4. docker容器迁移简单方便,可以任意的拷贝部署,以后再也不怕新部署环境了,一堆依赖装的想死有木有。

3、关于docker容器的端口映射

由于docker容器的IP地址每次启动都会变,所以不适用于手动添加端口映射(难道每次重启都来查看容器的IP么?),所以需要每次启动容器时由docker程序自动添加NAT规则,前期尽可能的把需要映射的端口在创建容器时配置好,如下:

  1. docker run -h="activemq" --name activemq -d -p 51000:22 -p 51001:3306-p 51003:6379 -p 51004:6381 -p 51005:80-p 51006:8000 -p 51007:8888 debian/base/etc/rc.local
  2. #此处我把mysql,redis,nginx,ssh都进行了映射。

后续对于docker容器的管理,记住容器的名称,如上述名称是activemq,则使用docker stop,start来控制容器进程。

  1. docker stop activemq
  2. docker start activemq

当然,也可以不让docker每次启动容器修改容器的IP地址,参考如下:

docker网络配置:http://www.open-open.com/lib/view/open1404896485747.html

4、关于docker容器的多程序开机自动运行

docker容器每次启动时,开机自启动的命令都要在启动容器前指定。如 docker run -I -t debian /bin/bash命令,只会运行/bin/bash程序,其它的程序都不会运行,对于要跑多个程序的容器特别纠结。

多程序开机自动运行方法

可把前面所说的启动命令换成dockerrun -I -t debian /etc/rc.local,在容器中把所有需要开机自的启动命令放在/etc/rc.local中,就可以达到多程序开机自启动了。

后台运行则是:docker run -d -p 50001:22 debian /etc/rc.local。注意:run命令是创建一个新的容器,如果要启动一个曾经运行过的容器,则用命令docker ps -a中找对应的容器ID,然后使用docker start <容器ID>即可。

5、关于docker容器和镜像的关系

无论容器里做什么操作,写文件,删文件。该容器的基本镜像都不会有任何改变。

这是因为Docker从父镜像建立增量镜像,只存储每个容器的更改。因此,如果你有一个300MB的父镜像,如果你在容器中安装了50MB的额外应用或服务,你的容器只有50MB,父镜像还是300MB。

但是可以使用Dockfile或commit命令来,把增量镜像和父镜像一起生成一个新的镜像。

commit使用:

  1. docker commit <容器id> <新镜像名称>

Dockfile使用:

  1. root@yangrong:/data# cat Dockerfile
  2. FROMubuntu/testa #这是基础镜像
  3. CMD["/root/start.sh"] #这是启动命令
  4. root@yangrong:/data# docker build -t <新镜像名> ./

关于Dockfile更多参数参考地址:

http://www.tuicool.com/articles/FRvAbe

http://www.colorscode.net/2014/01/04/howto-build-image-with-automatic-startup-ssh-service-from-dockerfile/

6、docker参数详解

  1. docker
  2. useage of docker
  3. -D 默认false 允许调试模式(debugmode)
  4. -H 默认是unix:///var/run/docker.sock tcp://[host[:port]]来绑定 或者unix://[/path/to/socket]来使用(二进制文件的时候),当主机ip host=[0.0.0.0],(端口)port=[4243] 或者 path=[/var/run/docker.sock]是缺省值,做为默认值来使用
  5. -api-enable-cors 默认flase 允许CORS header远程api
  6. -b 默认是空,附加在已存在的网桥上,如果是用'none'参数,就禁用了容器的网络
  7. -bip 默认是空,使用提供的CIDR(ClasslessInter-Domain Routing-无类型域间选路)标记地址动态创建网桥(dcoker0),和-b参数冲突
  8. -d 默认false 允许进程模式(daemonmode)
  9. -dns 默认是空,使docker使用指定的DNS服务器
  10. -g 默认是"/var/lib/docker":作为docker使用的根路径
  11. -icc 默认true,允许inter-container来通信
  12. -ip 默认"0.0.0.0":绑定容器端口的默认Ip地址
  13. -iptables 默认true 禁用docker添加iptables规则
  14. -mtu 默认1500 : 设置容器网络传输的最大单元(mtu)
  15. -p 默认是/var/run/docker.pid进程pid使用的文件路径
  16. -r 默认是true 重启之前运行的容器
  17. -s 默认是空 ,这个是docker运行是使用一个指定的存储驱动器
  18. -v 默认false 打印版本信息和退出

7、docker run命令详解

  1. Usage: docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]
  2. Run a command in a new container
  3. -a=map[]: 附加标准输入、输出或者错误输出
  4. -c=0: 共享CPU格式(相对重要)
  5. -cidfile="": 将容器的ID标识写入文件
  6. -d=false: 分离模式,在后台运行容器,并且打印出容器ID
  7. -e=[]:设置环境变量
  8. -h="": 容器的主机名称
  9. -i=false: 保持输入流开放即使没有附加输入流
  10. -privileged=false: 给容器扩展的权限
  11. -m="": 内存限制 (格式:<number><optional unit>, unit单位 = b, k, m or g)
  12. -n=true: 允许镜像使用网络
  13. -p=[]: 匹配镜像内的网络端口号
  14. -rm=false:当容器退出时自动删除容器 (不能跟 -d一起使用)
  15. -t=false: 分配一个伪造的终端输入
  16. -u="": 用户名或者ID
  17. -dns=[]: 自定义容器的DNS服务器
  18. -v=[]: 创建一个挂载绑定:[host-dir]:[container-dir]:[rw|ro].如果容器目录丢失,docker会创建一个新的卷
  19. -volumes-from="": 挂载容器所有的卷
  20. -entrypoint="": 覆盖镜像设置默认的入口点
  21. -w="": 工作目录内的容器
  22. -lxc-conf=[]: 添加自定义-lxc-conf="lxc.cgroup.cpuset.cpus = 0,1"
  23. -sig-proxy=true: 代理接收所有进程信号(even in non-tty mode)
  24. -expose=[]: 让你主机没有开放的端口
  25. -link="": 连接到另一个容器(name:alias)
  26. -name="": 分配容器的名称,如果没有指定就会随机生成一个
  27. -P=false: Publish all exposed ports to thehost interfaces 公布所有显示的端口主机接口

8、docker常用命令总结

  1. docker pull <镜像名:tag> #从官网拉取镜像
  2. docker search <镜像名> #搜索在线可用镜像名

8.1查询容器、镜像、日志

  1. docker top <container> #显示容器内运行的进程
  2. docker images #查询所有的镜像,默认是最近创建的排在最上。
  3. docker ps #查看正在运行的容器
  4. docker ps -l #查看最后退出的容器的ID
  5. docker ps -a #查看所有的容器,包括退出的。
  6. docker logs {容器ID|容器名称} #查询某个容器的所有操作记录。
  7. docker logs -f {容器ID|容器名称} #实时查看容易的操作记录。

8.2删除容器与镜像

  1. docker rm$(docker ps -a -q) #删除所有容器
  2. docker rm <容器名or ID> #删除单个容器
  3. docker rmi <ID> #删除单个镜像
  4. docker rmi$(docker images | grep none | awk '{print $3}' | sort -r) #删除所有镜像

8.3启动停止容器

  1. docker stop <容器名or ID> #停止某个容器
  2. docker start <容器名or ID> #启动某个容器
  3. docker kill <容器名or ID> #杀掉某个容器

8.4容器迁器

  1. docker export <CONTAINER ID> > /home/export.tar #导出
  2. cat /home/export.tar | sudo docker import - busybox-1-export:latest # 导入export.tar文件
  3. docker save debian> /home/save.tar #将debian容器打包
  4. docker load< /home/save.tar #在另一台服务器上加载打包文件

save和export的对比参考地址:

http://www.fanli7.net/a/bianchengyuyan/C__/20140423/452256.html

8.5运行一个新容器

  1. #运行一个新容器,同时为它命名、端口映射。以debian02镜像为例
  2. docker run -h="redis-test" --name redis-test -d -p 51000:22 -p51001:3306 -p 51003:6379 -p 51004:6381 -p 51005:80 -p 51006:8000 -p 51007:8888 debian02 /etc/rc.local
  3. #从container中拷贝文件,当container已经关闭后,在里面的文件还可以拷贝出来。
  4. sudo docker cp 7bb0e258aefe:/etc/debian_version . #把容器中的/etc/debian_version拷贝到当前目录下。

8.6 docker Dockfile镜像制作

  1. root@yangrong:/data# cat Dockerfile
  2. FROM ubuntu/testa #这是基础镜像
  3. CMD ["/root/start.sh"] #这是启动命令
  4. root@yangrong:/data# docker build -t <新镜像名> ./ #生成新的镜像

Dockfile更多参数参考:

http://www.tuicool.com/articles/FRvAbe

http://www.colorscode.net/2014/01/04/howto-build-image-with-automatic-startup-ssh-service-from-dockerfile/

docker 常用 命令的更多相关文章

  1. 关于Docker 常用命令

    Docker 常用命令 分类列一下常用的CLI命令 仓库相关 search/ pull / push / login etc. 例:docker pull ubuntu 从仓库下载ubuntuimag ...

  2. 【Docker】(3)---linux部署Docker、Docker常用命令

    linux部署Docker.Docker常用命令 本次部署Linux版本:CentOS 7.4 64位. 说明: 因为Docker是基于Linux 64bit的 所以Docker要求64位的系统且内核 ...

  3. Docker常用命令(二)

    Docker常用命令 查看Docker所有正在运行的容器 docker ps 查看Docker已退出的容器 docker ps -a 查看Docker所有镜像 docker images 删除镜像 删 ...

  4. Docker应用二:docker常用命令介绍

     Docker常用命令使用介绍 docker中常用的命令: 1.docker search image_name:搜查镜像 2.docker pull image_name:从镜像库中拉去镜像 3.d ...

  5. Docker常用命令汇总,和常用操作举例

    Docker命令 docker 常用命令如下 管理命令: container 管理容器 image 管理镜像 network 管理网络 node 管理Swarm节点 plugin 管理插件 secre ...

  6. 1021 docker常用命令和Jenkins搭建

    docker常用命令 1.镜像管理 docker pull (镜像名) # 默认拉取最新版本的镜像 docker pull (镜像名:版本号) #拉取指定版本的镜像 docker push (镜像名) ...

  7. Docker 常用命令——镜像

    Docker 常用命令 帮助命令 docker version    --版本信息 docker info       --详细信息 docker --help     --帮助 镜像命令 1.doc ...

  8. Docker 常用命令总结

    Docker 常用命令总结   回到顶部 镜像相关 搜索 docker search *image_name* 下载 docker pull *image_name* 查看 docker images ...

  9. 宿主机 && docker 常用命令

    宿主机 && docker 常用命令 1.如果你想快速发现在该主机上使用最多资源的容器(或是最近的所有systemd服务),我推荐systemd-cgtop命令: 2.

随机推荐

  1. SqlServer中截取小数位数

    方法一:convert(float,字段名) as 别名 select convert(float,round(10.123232,2)) 结果:10.12 select convert(float, ...

  2. c# 对XML 解析 和 序列化

    /// <summary> /// 解析XML 数据 /// </summary> /// <param name="re"></para ...

  3. Codeforces 165E Compatible Numbers(二进制+逆序枚举)

    E. Compatible Numbers time limit per test 4 seconds memory limit per test 256 megabytes input standa ...

  4. Hadoop中maptask数量的决定因素

    刚开始接触hadoop平台的时候 部分初学者对于mapreduce中的maptask的数量是怎么确定的 可能有点迷惑,如果看了jobclient里面的maptask初始化的那段源码,那么就比较清楚了, ...

  5. ACMUniversity

    描述 在大学里,很多单词都是一词多义,偶尔在文章里还要用引申义.这困扰Redraiment很长的时间. 他开始搜集那些单词的所有意义.他发现了一些规律,例如 “a”能用“e”来代替, “c”能用“f” ...

  6. Oracle 对字符串去重函数

    CREATE OR REPLACE FUNCTION ZZMES."REMOVESAMESTR" (oldStr varchar2, sign varchar2) return v ...

  7. 转:ListView中getView的工作原理

    ListView中getView的工作原理: [1]ListView asks adapter “give me a view” (getView) for each item of the list ...

  8. SJCL:斯坦福大学JS加密库

    斯坦福大学Javascript加密库简称SJCL,是一个由斯坦福大学计算机安全实验室创立的项目,旨在创建一个安全.快速.短小精悍.易使用.跨浏览器的JavaScript加密库.(斯坦福大学下载地址:h ...

  9. 【Tomcat】如何注册Tomcat到Window Service服务

    对于Web项目来说,经常用的服务器就是Tomcat.但是麻烦的事是,每次都得启动一下Tomcat服务.但是,如果把Tomcat的服务注册为Windows Service服务,就可以设置为开机自动启动, ...

  10. Linux内存管理图解【转】

    转自:http://www.360doc.com/content/13/0505/15/12218157_283128759.shtml Linux内存管理图解 2013-05-05  果儿的百科   ...