4.docker常用命令
阿新 • • 發佈:2021-12-20
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? 網路如何才能連線過去