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 [容器] 查看端口映射情况
发布了106 篇原创文章 · 获赞 21 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/u012811805/article/details/85311498