docker run填坑日记

前言

在使用docker命令时,由于参数顺序被坑了一把,故这篇笔记主要记录一下深入学习docker run 命令

有问题的命令
  • 目的:启动指镜像映射到宿主机8999端口,并添加主机名到hosts中。
docker run --name web-tomcat  --add-host=test:192.168.1.123 -itd web-tomcat:6  -p8999:8999  /bin/bash

疑问&解答
  • 各个参数的含义?
    • docker run 会基于指定的镜像,新建出一个容器启动
    • add-host指定添加到容器/etc/hosts文件中的内容。
    • p作为端口映射,映射容器和宿主机端口。
    • name指定容器的名称
  • 为什么命令是有问题的?
    • 宿主机上使用lsof -i:8999,发现并没有进程在监听端口。
    • 使用如下命令进入容器内部,查看运行情况。
docker exec -it web-tomcat
ps -ef|grep tomcat

在这里插入图片描述

  • 可以看到 -p8999:8999被当成了tomcat的启动参数了,发现问题后,当然最简单的解决办法就是更换参数的先后顺序,解决问题就算了吗?本着折腾的精神,当然要研究一番了。
理解
  • 首先想到的就是官方手册啦,毕竟是一手资料。
docker run --help
Usage:  docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  • 可以看到在IMAGE后指定的参数会被当成命令在容器中运行,所以-p应该是属于OPTIONS放在IMAGE前面才对。那除了上面说的,还有那些参数是比较常用的呢?

  • link参数用于容器互联,如将kafka连接到zk容器,启动zookeeper时使用-h参数指定容器主机名为zookeeper,或者使用docker rename对已有容器进行重命名,进入容器内部发现docker会在hosts文件内生成对应内容。

docker run -itd --name kafka -h kafka  -p9092:9092 --link zookeeper  hyq/kafka:0.8.2.2  /bin/bash
  • e参数设置环境变量
docker run --name mysql -e MYSQL_USER_NAME=hyq -d mysql

#如果是一个单一的值,则会在当前宿主机中取值然后传播到docker容器中
export test=123
docker run --name mysql -e test -d mysql
  • m参数限制容器内存。
docker run -it -m 500M  ubuntu:14 /bin/bash
其他
  • 参数p和P,小p和大P的区别?
    • 小p指定一个或一组容器端口映射到宿主机上,-p宿主机端口:容器端口。大P是将DockerFile中EXPOSE指定的端口随机的映射给宿主机。
    • 可以使用docker port [容器] 查看端口映射情况
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值