Docker基本命令
目錄
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