1. 程式人生 > 其它 >4.docker常用命令

4.docker常用命令

0x01. 幫助命令

docker version                # 檢視docker版本資訊
docker info                      # 檢視docker的系統資訊, 包括映象和容器數量
docker 命令 --hlep          # 檢視命令幫助

幫助文件 : https://docs.docker.com/reference/

0x02. 映象命令

docker images # 檢視本地主機上的所有映象

[root@centos7 docker]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
hello-world   latest    d1165f221234   4 weeks ago   13.3kB

# 解釋
REPOSITORY              映象的倉庫源
TAG                            映象的標籤
IMAGE ID                   映象的ID
CREATED                    映象建立的時間
SIZE                            映象的大小

# 可選項
-a, --all                        列出所有映象
-q, --quiet                   只顯示映象的id

docker search # 搜尋映象

[root@centos7 docker]# docker search mysql
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   10702     [OK]       
mariadb                           MariaDB Server is a high performing open sou…   4023      [OK]       
mysql/mysql-server                Optimized MySQL Server Docker images. Create…   784                  [OK]

# 可選項
--filter=stars=5000         # 搜尋映象stars大於5000的

docker pull # 下載映象

# 下載映象 docker pull 映象名[:tag]
[ root@kuangshen / ]# docker pull mysql
Using default tag: latest                    # 如果不寫tag, 預設就是latest
latest: Pulling from library / mysql
5b54d594fba7 : Pull complete          # 分層下載 docker image的核心  聯合檔案系統
07e7d6a8a868: Pull complete
abd946892310: Pull complete
dd8f4d07efa5: Pull complete
076d396a6205:Pull complete
cf6b2b93048f: Pull complete
530904b4a8b7: Pull complete
fb1e55059a95: Pull complete
4bd29a0dcde8: Pull complete
b94a001c6ec7 : Pull complete
cb77cbeb422b:Pull complete
2a35cdbd42cc : Pull complete
Digest: sha256:dc255ca50a42b3589197000b1f9bab2b4e010158d1a9f56c3db6ee145506f625 # 簽名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest   # 真實地址

# 等價命令
docker pull mysql
docker pull docker.io/library/mysql:latest

# 指定版本下載
[root@kuangshen /]#docker pu11 mysql:5.7
5.7:Pu11ing from 1ibrary / mysql
5b54d594fba7 : Already exists
07e7d6a8a868: Already exists
abd946892310:Already exists
dd8f4d07efa5 : Already exists
076d396a6205: Already exists
cf6b2b93048f: Already exists
530904b4a8b7 : Already exists
a37958cbebcf : pu11 complete
04960017f638: Pu11 complete
e1285defod2a: pu11 complete
670cb3a9678e : pu11 complete
Digest: sha256:e4d39b85118358ffef6adc5e8c7d00e49d20b25597e6ffdc994696f10e3dc8e2
status : Downloaded newer image for mysq7:5.7
docker.io/1ibrary/mysq1:5.7

docker rmi # 刪除映象

[root@centos7 ~]# docker rmi -f 映象id                  				 刪除指定映象
[root@centos7 ~]# docker rmi -f 映象id 映象id 映象id 映象id               刪除多個映象
[root@centos7 ~]# docker rmi -f $(docker images -aq)                       刪除所有映象

0x03. 容器命令

只有有了映象才能建立容器, 所以下載一個CentOS映象做演示

docker pull centos

新建容器並啟動

docker run [可選引數] image

# 引數說明
--name="Name"               容器名字  tomcat01 tomcat02
-d                                       後臺方式執行
-it                                       使用互動方式執行,進入容器檢視內容
-p(小寫)                              指定容器的埠   8080:8080
	-p ip:主機埠:容器埠
	-p 主機埠:容器埠
	-p 容器埠
-P(大寫)                              隨機指定容器的埠

# 測試啟動並進入容器
[root@centos7 docker]# docker run -it centos /bin/bash
[root@620f48b666fb /]# ls                  檢視內部的centos,基礎版本,很多命令都沒有
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

列出所有執行的容器

docker ps      # 列出當前正在執行的容器

# 可選引數
-a             列出當前正在執行的容器+歷史執行過的容器
-n=?        顯示最近建立的容器
-q             只顯示容器的編號

退出容器

exit      # 直接停止容器並退出ctrl + p + q    # 容器不停止退出

刪除容器

docker rm 容器id                            # 刪除指定容器,正在執行的容器是不能刪除的, 但是可以強制刪除 rm -fdocker rm -f $(docker ps -aq)        # 刪除所有的容器docker ps -a -q | xargs docker rm  # 刪除所有容器

啟動和停止容器的操作

docker start 容器id          # 啟動容器docker restart 容器id       # 重啟容器docker stop 容器id          # 停止正在執行容器docker kill 容器id             # 強制停止當前容器

0x04. 常用的其他命令

後臺啟動容器

# 命令 docker run -d 映象名[root@centos7 /]# docker run -d centoscc8ce50168e0fba39d78056112ced18bc18febfd88cfeaf3a53e55d9a3d701bb# 問題docker ps , 發現 centos 停止了# 常見的坑 docker 容器使使用者後臺執行, 就必須要有一個前臺程序, docker發現沒有應用, 就會自動停止# nginx, 容器啟動後, 發現自己沒有提供服務, 就會立即停止, 就是沒有程式了

檢視日誌

docker logs -f -t --tail 10 容器id , 預設沒有操作就沒有日誌# 自己編寫一段shell指令碼[root@centos7 /]# docker run -d centos /bin/sh -c "while true;do echo alex;sleep 1;done"d022b021e8f5187b37f585ca106678667da3fa6ac77bb597aa891cbb9a011eed# 顯示日誌[root@centos7 /]# docker logs -tf --tail 10 d022b021e8f5

檢視容器中的程序資訊

# 命令 docker top 容器id[root@centos7 /]# docker top d022b021e8f5UID                 PID                 PPID                C                   STIME               TTY                 TIME               root                9239                9219                0                   12:03               ?                   00:00:00            root                9870                9239                0                   12:10               ?                   00:00:00          

檢視映象中的元資料

[root@centos7 /]# docker inspect d022b021e8f5[    {        "Id": "d022b021e8f5187b37f585ca106678667da3fa6ac77bb597aa891cbb9a011eed",        "Created": "2021-04-05T04:03:02.80196498Z",        "Path": "/bin/sh",        "Args": [            "-c",            "while true;do echo alex;sleep 1;done"        ],        "State": {            "Status": "running",            "Running": true,            "Paused": false,            "Restarting": false,            "OOMKilled": false,             ...................................             id是前12位的縮寫網路用的是橋接網路

進入當前正在執行的容器

# 我們通常都是使使用者後臺的方式執行容器, 需要進入容器, 修改一些配置# 方式1docker exec -it 容器id bashShell# 測試[root@centos7 /]# docker exec -it d022b021e8f5 /bin/bash[root@d022b021e8f5 /]# lsbin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var# 方式2docker attach 容器id# 測試[root@centos7 /]# docker attach d022b021e8f5正在執行的當前程式碼# docker exec                 進入容器後開啟一個新的終端, 可以在裡面操作(常用)# docker attach              進入容器正在執行的終端, 不會啟動新的程序

從容器內copy檔案到主機

docker cp 容器id:容器內路徑    目的主機的路徑# 進入容器內部[root@centos7 ~]# docker exec -it d022b021e8f5 /bin/bash[root@d022b021e8f5 /]# cd /home[root@d022b021e8f5 home]# ls# 在容器內建立一個檔案[root@d022b021e8f5 home]# touch test.py [root@d022b021e8f5 home]# exit# 將檔案copy到主機上[root@centos7 ~]# docker cp d022b021e8f5:/home/test.py /home[root@centos7 ~]# cd /home[root@centos7 home]# lshacker  mhx  test.py  yuanmengen# 拷貝是一個手動過程, 未來我們使用 -v 卷的技術, 可以實現

0x05. 小結

0x06. 作業練習

dcoker 部署 nginx, 並上線執行測試

# 1.搜尋映象[root@centos7 home]# docker search nginx# 2.下載映象[root@centos7 home]# docker pull nginx# 3.啟動容器[root@hecs-x-medium-2-linux-20200618092102 /]# docker run -d --name nginx01 -p 3344:80 nginx1a9ff84936519709e31bec20500f927df2b88e68490fb92c31fd52fcd4c5b228[root@hecs-x-medium-2-linux-20200618092102 /]# docker psCONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                  NAMES1a9ff8493651   nginx     "/docker-entrypoint.…"   5 seconds ago   Up 4 seconds   0.0.0.0:3344->80/tcp   nginx01# 4.進入容器[root@hecs-x-medium-2-linux-20200618092102 /]# docker exec -it nginx01 /bin/bashroot@1a9ff8493651:/# whereis nginxnginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx# 5.測試nginx服務root@1a9ff8493651:/# curl localhost:80<!DOCTYPE html><html><head><title>Welcome to nginx!</title><style>    body {        width: 35em;        margin: 0 auto;        font-family: Tahoma, Verdana, Arial, sans-serif;    }</style></head><body><h1>Welcome to nginx!</h1><p>If you see this page, the nginx web server is successfully installed andworking. Further configuration is required.</p><p>For online documentation and support please refer to<a href="http://nginx.org/">nginx.org</a>.<br/>Commercial support is available at<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p></body></html>

外網訪問 :

埠暴露的概念 :

思考問題 : 我們每次改動nginx配置檔案, 都需要進入容器內部? 十分的麻煩, 我們要是可以在容器外部提供一個對映路徑, 達到在容器修改檔案, 容器內部就可以自動修改? -v 資料卷! 技術

docker 部署 tomcat 上線測試

# 官方的使用docker run -it --rm tomcat:9.0# 我們之前的啟動都是後臺, 停止了容器之後, 容器還是可以查到   # docker run -it --rm 一般用來測試,用完就自動刪除容器# 下載後再啟動[root@hecs-x-medium-2-linux-20200618092102 /]# docker pull tomcat# 啟動容器[root@hecs-x-medium-2-linux-20200618092102 /]# docker run -d -p 8881:8080 --name tomcat01 tomcat# 測試外網訪問沒問題但是是404頁面# 進入容器一探究竟[root@hecs-x-medium-2-linux-20200618092102 /]# docker exec -it tomcat01 /bin/bash# 發現問題linux命令少了, 沒有webapps      阿里雲映象的原因,預設是最小的映象, 所以不必要的都剔除掉了保證最小可執行的環境, 但是我們可以把失去的都搞過來只需要把webapps.dist裡面的內容copy到webapps中即可cp -r webapps.dist/* webapps/

思考問題: 我們以後要部署專案, 如果每次都要進入容器是不是十分麻煩? 我們要是可以在容器外部提供一個對映路徑, webapps, 我們在外部放置專案, 就自動同步到內部就好了

docker 部署 es+kibana

# es 暴露的埠很多# es 十分耗記憶體# es 的資料一般需要放置到安全目錄! 掛載# --net somenetwork  網路配置(後面講)# 啟動elasticsearchdocker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2# 啟動了 linux 就很卡  docker stats  檢視 cpu 的狀態# es 是十分耗記憶體的    1.xG    1核2G

這就是elasticsearch , 太耗記憶體了

測試成功後, 建議立即停掉, 然後新增記憶體限制

# 1.修改配置檔案    -e    環境配置修改docker run -d --name elasticsearch02 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2
# 測試[root@hecs-x-medium-2-linux-20200618092102 /]# curl localhost:9200{  "name" : "8e6646cac33b",  "cluster_name" : "docker-cluster",  "cluster_uuid" : "RaVBWjK5QgGebq-dlG_DJg",  "version" : {    "number" : "7.6.2",    "build_flavor" : "default",    "build_type" : "docker",    "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",    "build_date" : "2020-03-26T06:34:37.794943Z",    "build_snapshot" : false,    "lucene_version" : "8.4.0",    "minimum_wire_compatibility_version" : "6.8.0",    "minimum_index_compatibility_version" : "6.0.0-beta1"  },  "tagline" : "You Know, for Search"}

思考問題 : 使用kibana連線es? 網路如何才能連線過去