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 [容器] 查看端口映射情況
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章