docker 基礎鏡像環境常用命令

=======================
docker 基礎鏡像環境 alpine
=======================
可以使用 docker search 命令搜索指定的 image, 或者訪問網址 https://hub.docker.com/explore/

在hub官網會經常能看到 alpine 字樣, alpine 是要給非常輕量級的Linux發行版,Docker官方已經推薦使用alpine 代替之前的 Ubuntu作為基礎鏡像環境, 好處是制作出的最終鏡像文件很多, 但docker dub上目前仍以 Ubuntu 為主流的基礎鏡像環境.

下面是幾個常用發行版基礎鏡像的大小.
REPOSITORY TAG IMAGE ID VIRTUAL SIZE
alpine latest 4e38e38c8ce0 4.799 MB
debian latest 4d6ce913b130 84.98 MB
ubuntu latest b39b81afc8ca 188.3 MB
centos latest 8efe422e6104 210 MB
alpine 內置 apk 包管理器, 而不是Ubuntu的apt, alpine 包的網址是 https://pkgs.alpinelinux.org/packages

=======================
常用 docker images
=======================
可以使用 docker search 命令搜索指定的 image, 或者訪問網址 https://hub.docker.com/explore/
docker pull openjdk:8-alpine # 大小為107.8MB
docker pull openjdk:8 # 大小為309MB
docker pull nginx
docker pull tomcat
docker pull wnameless/oracle-xe-11g
docker pull python
docker pull mysql
docker pull mongo
docker pull redis
docker pull rabbitmq
docker pull rabbitmq:3-management

=======================
用于 docker 命令學習的鏡像和命令
=======================
下面鏡像常用于 docker 命令學習
docker pull nginx:1.15-alpine #只需要20M的空間
docker pull busybox #只占用2M空間

以守護態運行容器, 經常用于容器的學習.
docker run -d --name mybusybox busybox /bin/sh -c "while true; do echo hello world; sleep 1; done"

使用鏡像nginx:1.15-alpine以后臺模式啟動一個容器, 并將容器的80端口映射到主機隨機端口(80是該鏡像expose的端口)
docker run -P -d --name mynginx1 nginx:1.15-alpine

使用鏡像nginx:1.15-alpine以后臺模式啟動一個容器, 指定主機的端口為 80
docker run -p 80:80 -d --name mynginx2 nginx:1.15-alpine

=======================
docker 容器端口映射
=======================

  1. 指定host端口和容器內端口
    使用鏡像nginx:1.15-alpine以后臺模式啟動一個容器, 指定主機的端口為80, 冒號前的host端口, 冒號后為容器內部的端口.
    docker run -p 80:80 -d --name mynginx2 nginx:1.15-alpine

  2. 容器內端口隨機分配一個Host端口
    下面 -p 參數的 80 指的是容器內部的端口, 沒有指定host端口, docker在主機上自動開放一個映射端口(當然是未被占用的), 自動端口號一般大于等于 32768 .
    docker run -p 80 -d --name mynginx2 nginx:1.15-alpine

  3. 自動為所有的 Dockerfile EXPOSE 端口映射Host端口
    Dockerfile EXPOSE 可能會開放多個端口, 使用 -P 參數將自動為這些容器內部端口分配對應的Host主機端口
    docker run -P -d --name mynginx1 nginx:1.15-alpine

=======================
docker 的一些常用命令
=======================
docker images 命令, 顯示可用的容器
docker rmi <鏡像Id> 命令,刪除指定鏡像
docker pull hello-world 命令 , 下載 hello-world image
docker rmi <鏡像Id> 命令,刪除指定鏡像
docker ps 命令, 列出當前正在運行的容器, 結果的第一列是container_Id, 第2列是容器名稱.
docker ps -a 命令, 列出當前正在運行的和之前運行完的容器
docker stop container_id/container-name 命令, 停止指定的容器, 該容器Id或名稱可以從docker ps中獲取.
docker restart container_id/container-name 命令, 重新啟動指定的容器, 該容器Id或名稱可以從docker ps中獲取.
docker start container_id/container-name 命令, 啟動指定的容器, 該容器Id或名稱可以從docker ps中獲取.
docker rm container_id/container-name, 刪除指定的容器
docker rm $(docker ps -a -q) 命令, 刪除所有運行結束了容器, 正在運行的容器不會被刪除
docker top container_id/container-name, 查看容器內的進程
docker logs [-f] [-t] [--tail string] 容器名, 查看容器的日志輸出, -f是打開跟蹤, -t是加上時間戳, --tail 100 表示僅顯示最后的100行日志
docker search nginx, 在hub站點中搜索 nginx 鏡像
docker image inspect image_id 命令, 顯示指定鏡像的詳細信息.
docker container inspect container_id/container-name 命令, 顯示指定容器的詳細信息,包括容器的Ip

docker images -f dangling=true 命令, 列出沒有被容器化的鏡像
docker rmi $(docker images -qf dangling=true) 命令, 刪除那些沒有被容器化的鏡像
docker system df 命令, 可以一次性查看鏡像/容器/host volume的磁盤占用情況.
docker ps -s 命令, 輸出容器的空間占用

=======================
docker 一些管理命令集
=======================
除了上面常用的命令外, docker 還有一些管理命令集, 這些命令集還可以包含二級命令:
config Manage Docker configs
container Manage containers
image Manage images
network Manage networks
node Manage Swarm nodes
plugin Manage plugins
secret Manage Docker secrets
service Manage services
stack Manage Docker stacks
swarm Manage Swarm
system Manage Docker
trust Manage trust on Docker images
volume Manage volumes
比較常用的是,
docker image build, 編譯 Dockfile
docker network create, 創建 docker 網絡
docker volume create, 創建數據卷

=======================
docker run/exec 命令
=======================
運行 hello-world 容器, 如果本地沒有下載, 將會自動從hub站點下載.
docker run hello-world 命令

以守護態運行容器
docker run -d --name mybusybox busybox /bin/sh -c "while true; do echo hello world; sleep 1; done"

登陸一個容器, 運行中的容器其實是一個功能完備的Linux操作系統, 所以我們可以在登陸該容器執行常規的Linux命令.
docker exec -it container_id/container-name /bin/bash

使用 redis-cli 登陸 myredis 容器
docker exec -it myredis redis-cli
exec 后的 -it 參數的意思是, 以交互的方式并分配一個偽tty, 經常一起聯用.

=======================
docker redis 使用
=======================

下載最新版的 redis image

docker pull redis:latest

簡單方式啟動 redis 服務

pull run redis

下面命令摘自: https://blog.csdn.net/cookily_liangzai/article/details/80726163
docker run --name redis-test -p 6379:6379 -d --restart=always redis:latest redis-server --appendonly yes --requirepass "your passwd"
--name redis-test: 為容器指定名稱為 redis-test
-p 6379:6379 :將容器內端口映射到宿主機端口(容器端口在右邊, 宿主端口在左邊)
-d: 即 --detach, 以后臺的方式執行容器
–restart=always: 隨docker啟動而啟動
redis-server –appendonly yes: 在容器執行redis-server啟動命令, 并打開redis持久化配置
requirepass "your passwd" : 設置redis認證密碼

下面命令摘自: http://www.cnblogs.com/cgpei/p/7151612.html

# docker run -p 6699:6379 --name myredis -v $PWD/redis.conf:/etc/redis/redis.conf -v $PWD/data:/data -d redis:3.2 redis-server /etc/redis/redis.conf --appendonly yes
  命令說明:
  --name myredis : 指定容器名稱,這個最好加上,不然在看docker進程的時候會很尷尬。
  -p 6699:6379 : 端口映射,默認redis啟動的是6379,至于外部端口,隨便玩吧,不沖突就行。
  -v $PWD/redis.conf:/etc/redis/redis.conf : 將主機中當前目錄下的redis.conf配置文件映射。
  -v $PWD/data:/data -d redis:3.2 : 將主機中當前目錄下的data掛載到容器的/data
  --redis-server --appendonly yes :在容器執行redis-server啟動命令,并打開redis持久化配置\

注意事項:
    如果不需要指定配置,-v $PWD/redis.conf:/etc/redis/redis.conf 可以不用 ,
    redis-server 后面的那段 /etc/redis/redis.conf 也可以不用。

=======================
MySQL 官方Docker鏡像的使用
=======================
摘自 https://itbilu.com/linux/docker/EyP7QP86M.html

docker run --name itbilu-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=my-pass -d mysql:5.7
我們就創建了一個名為 itbilu-mysql 的MySQL數據庫服務器容器實例, 在創建數據庫時,通過環境變量MYSQL_ROOT_PASSWORD設置數據庫的root密碼,還通過5.7標簽指定了所使用的鏡像版本。

不使用cnf文件的配置方式, 啟動一個MySQL服務器容器,并使用UTF-8(utf8mb4)格式的表編碼:
docker run --name itbilu-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=my-pw -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

使用宿主機/my/cnf/my.cnf 配置文件,這時就可以通過以下方式啟動MySQL容器
docker run --name itbilu-mysql -p 3306:3306 -v /my/cnf/:/etc/mysql/ -e MYSQL_ROOT_PASSWORD=my-pass -d mysql:5.7

指定MySQL數據目錄的volume

docker run --name itbilu-mysql -p 3306:3306 -v /my/datadir:/var/lib/mysql -v /my/cnf/:/etc/mysql/ -e MYSQL_ROOT_PASSWORD=my-pw -d mysql:5.7
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,739評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,634評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,653評論 0 377
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,063評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,835評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,235評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,315評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,459評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,000評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,819評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,004評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,560評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,257評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,676評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,937評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,717評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,003評論 2 374

推薦閱讀更多精彩內容