3. Docker基本命令的使用

Docker基本命令

目錄

docker search

docker pull

docker images

docker run

docker ps

docker create

docker start/stop/restart

docker exec

docker rm 

docker rmi


 

docker search

docker search [OPTIONS] TERM

OPTIONS說明:

  • --automated :只列出 automated build類型的鏡像;

  • --no-trunc :顯示完整的鏡像描述;

  • -s :列出收藏數不小於指定值的鏡像。

用於在docker倉庫中搜索鏡像, 例如搜索 java

這樣做的缺點很明顯, 因爲你不知道搜索結果對應的這些鏡像內部封裝的是什麼, 大部分時候我們都是在docker Hub 官網來搜索鏡像的, 訪問 https://hub.docker.com/ , 登錄用戶

 

點擊去就可以看到鏡像的具體內容, 就可以按照需求選擇仔細想要的鏡像.

docker pull

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

OPTIONS說明:

  • -a :拉取所有 tagged 鏡像
  • --disable-content-trust :忽略鏡像的校驗,默認開啓

拉取剛剛選擇的的鏡像  

直接pull 沒有輸入tag 的話就會默認使用 latest , 要指定tag 可以使用 鏡像名稱:tag  的格式,

下面的列表是這個鏡像所依賴的基礎鏡像, 鏡像是由一些基礎的鏡像疊加起來的, 而且這些基礎鏡像是可以通用的, 比如這個進行用了 5040bd298390 那麼下個鏡像再次用 5040bd298390 的時候就可以直接引用了. 

這個表示就完成鏡像的拉取了

docker images

docker images [OPTIONS] [REPOSITORY[:TAG]]

 

OPTIONS 說明

  • -a :列出本地所有的鏡像(含中間映像層,默認情況下,過濾掉中間映像層);
  • --digests :顯示鏡像的摘要信息;
  • -f :顯示滿足條件的鏡像;
  • --format :指定返回值的模板文件;
  • --no-trunc :顯示完整的鏡像信息;
  • -q :只顯示鏡像ID。

可以查看本地一已經拉取可以使用的鏡像

docker run

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

OPTIONS說明:

  • -a stdin: 指定標準輸入輸出內容類型,可選 STDIN/STDOUT/STDERR 三項;

  • -d: 後臺運行容器,並返回容器ID;

  • -i: 以交互模式運行容器,通常與 -t 同時使用;

  • -p: 端口映射,格式爲:主機(宿主)端口:容器端口

  • -t: 爲容器重新分配一個僞輸入終端,通常與 -i 同時使用;

  • --name="nginx-lb": 爲容器指定一個名稱;

  • --dns 8.8.8.8: 指定容器使用的DNS服務器,默認和宿主一致;

  • --dns-search example.com: 指定容器DNS搜索域名,默認和宿主一致;

  • -h "mars": 指定容器的hostname;

  • -e username="ritchie": 設置環境變量;

  • --env-file=[]: 從指定文件讀入環境變量;

  • --cpuset="0-2" or --cpuset="0,1,2": 綁定容器到指定CPU運行;

  • -m :設置容器使用內存最大值;

  • --net="bridge": 指定容器的網絡連接類型,支持 bridge/host/none/container: 四種類型;

  • --link=[]: 添加鏈接到另一個容器;

  • --expose=[]: 開放一個端口或一組端口

運行一下剛剛拉取的Java鏡像

[docker@VM_121_116_centos ~]$ docker run -it java java -version

-it 使用交互模式, 結果顯示容器的 jdk 版本爲1.8

我們在來 pull 一個redis 的鏡像

[docker@VM_121_116_centos ~]$ docker pull redis

run一下redis

[docker@VM_121_116_centos ~]$ docker run -p 6379:6379 --name redis  -d redis redis-server --appendonly yes

這裏 -p 映射端口, 訪問宿主機6379即可訪問到容器的6379 ,  --name 定義容器名稱  -d 在後臺運行,  最後是在容器內執行 

redis-server --appendonly yes 開啓 redis 持久化配置

小結:

決定容器的運行方式,前臺執行還是後臺執行 
docker run後面追加-d=true或者-d,那麼容器將會運行在後臺模式。 docker exec來進入到到該容器中,或者attach重新連接容器的會話 
進行交互式操作(例如Shell腳本),那我們必須使用-i -t參數同容器進行數據交互 
docker run時沒有指定--name,那麼deamon會自動生成一個隨機字符串UUID 
Docker時有自動化的需求,你可以將containerID輸出到指定的文件中(PIDfile): --cidfile="" 
--cidfile=""  
Docker的容器是沒有特權的,例如不能在容器中再啓動一個容器。這是因爲默認情況下容器是不能訪問任何其它設 備的。但是通過"privileged",容器就擁有了訪問任何其它設備的權限

docker ps

docker ps [OPTIONS]

OPTIONS說明:

  • -a :顯示所有的容器,包括未運行的。

  • -f :根據條件過濾顯示的內容。

  • --format :指定返回值的模板文件。

  • -l :顯示最近創建的容器。

  • -n :列出最近創建的n個容器。

  • --no-trunc :不截斷輸出。

  • -q :靜默模式,只顯示容器編號。

  • -s :顯示總的文件大小。

查看運行的容器的狀況, 有那些已經創建的容器, 看看剛剛創建的redis, 同時創建的Java容器停止了, 要使用 -a 參數纔行

docker create

docker create 是創建一個容器, 參數和 docker run 是一致的. 但是他只是創建不會啓動,

例如我們創建一個mysql的容器 

docker create -p 23306:3306 --name mysql:5.6 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6

-e 是添加環境變量, 設定mysql的 root 密碼

執行完畢後是容器是create狀態, 沒有運行

docker start/stop/restart

docker start/stop/restart [OPTIONS] CONTAINER [CONTAINER...]

分別用於 啓動/停止/重啓容器, 剛剛新建狀態的容器就可以使用 start 來重啓   docker start 後面可以跟容器名或者容器ID.

docker start e8abf8c09a26  和 docker start mysql5.6 作用一致

docker start e8abf8c09a26

docker exec

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

OPTIONS說明:

  • -d :分離模式: 在後臺運行

  • -i :即使沒有附加也保持STDIN 打開

  • -t :分配一個僞終端

用於訪問運行的容器的內部

交互模式進入剛剛新建的 mysql5.6 的鏡像, 

[docker@VM_121_116_centos ~]$ docker exec -it mysql5.6 /bin/bash
root@e8abf8c09a26:/# tail -30f /var/log/mysql/error.log 
2019-02-06 07:07:03 485 [Note] InnoDB: Using Linux native AIO
2019-02-06 07:07:03 485 [Note] InnoDB: Using CPU crc32 instructions
2019-02-06 07:07:03 485 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2019-02-06 07:07:03 485 [Note] InnoDB: Completed initialization of buffer pool
2019-02-06 07:07:03 485 [Note] InnoDB: Highest supported file format is Barracuda.
2019-02-06 07:07:03 485 [Note] InnoDB: 128 rollback segment(s) are active.

執行 exit 退出

當然 後面也可以直接跟命令, 這樣就不會進入容器裏面, 而是輸出執行結果

[docker@VM_121_116_centos ~]$ docker exec mysql5.6 env

docker rm 

docker rm [OPTIONS] CONTAINER [CONTAINER...]

OPTIONS說明:

  • -f :通過SIGKILL信號強制刪除一個運行中的容器

  • -l :移除容器間的網絡連接,而非容器本身

  • -v :-v 刪除與容器關聯的卷

刪除容器, 不能刪除運行中的容器, 運行的容器, 必須先stop, 再刪除, docker rm 同樣後面可以跟容器名稱或者容器ID

比如刪除 剛剛的Java容器

[docker@VM_121_116_centos ~]$ docker rm 6915333292ea

docker rmi

docker rmi [OPTIONS] IMAGE [IMAGE...]

OPTIONS說明:

  • -f :強制刪除;

  • --no-prune :不移除該鏡像的過程鏡像,默認移除;

用於刪除拉取到本地的鏡像

剛剛java的容器移除了, 我們再把鏡像刪掉

[docker@VM_121_116_centos ~]$ docker rmi d23bdf5b1b1b

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章