Docker常用指令
幫助指令
docker version #顯示docker的版本資訊
docker info #顯示docker的系統資訊,包括鏡像和容器的數量
docker 指令 --help #幫助指令
鏡像管理指令
docker images檢視所有本地主機上的鏡像
常用管理指令
搜尋鏡像
docker search
[root@localhost ~]# docker search mysql
#可選項,通過搜尋來過濾
--filter=STARS=3000(或者選擇更高的收藏)
[root@localhost ~]# docker search mysql --filter=STARS=3000
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 12213 [OK]
mariadb MariaDB Server is a high performing open sou… 4689 [OK]
下載下傳鏡像
docker pull
[root@localhost ~]# docker pull mysql
……
Digest: sha256:0eb33f0094ef5351639d9d9847c963ee9f22f5631cde046babd4ec239aaeaf06
docker.io/library/mysql:latest
[root@localhost ~]#
指定下載下傳的鏡像版本
docker pull mysql:5.7
[root@localhost ~]# docker pull mysql:5.7
……
Digest: sha256:5c6f1132190256d1ee63afc3bb383c890e8cb9f547bb1f8f15fecaa2a78e7de0
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
删除鏡像
docker rmi -f
删除指定鏡像 需要加上 IMAGE ID ,也可以指定多個IMAGE ID進行删除
[root@localhost ~]# docker rmi -f 8b94b71dcc1e
Untagged: mysql:5.7
Untagged: mysql@sha256:5c6f1132190256d1ee63afc3bb383c890e8cb9f547bb1f8f15fecaa2a78e7de0
Deleted: sha256:8b94b71dcc1ee6376ac16096e01b8d92ba885e7b9ae560426af2312cc17fe0f7
…..
遞歸删除全部鏡像
docker rmi -f $(docker imager -aq)
[root@localhost ~]# docker rmi -f $(docker images -aq)
Untagged: mysql:latest
Untagged: mysql@sha256:0eb33f0094ef5351639d9d9847c963ee9f22f5631cde046babd4ec239aaeaf06
Deleted: sha256:c1558761f285add928a651173d5e903c7bf2cd5d511d0bd6752fb082c41b56a2
…….
容器指令
說明:我們有了鏡像才可以建立容器
docker pull centos
建立容器并啟動
格式
建立容器并進入
[root@localhost ~]# docker run -it centos /bin/bash
[root@c29252f4d995 /]# ls 檢視容器内的centos,基礎版本,很多指令都是不完善的
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
從容器中退回到主機
[root@c29252f4d995 /]# exit
exit
[root@localhost ~]#
列出所有在運作的容器
docker ps 列出目前正在運作的容器
-a 加上-a參數 列出正在運作的容器+帶出曆史運作時的容器
-n=數字(輸入想要顯示最近幾個容器) #顯示最近建立的容器
-q #隻顯示容器的編号
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c29252f4d995 centos "/bin/bash" 18 minutes ago Exited (130) 2 minutes ago reverent_lewin
2066ae3c7a82 feb5d9fea6a5 "/hello" 4 hours ago Exited (0) 4 hours ago priceless_davinci
[root@localhost ~]#
退出容器
exit #容器直接停止并退出
Ctrl +P+Q #容器不停止退出
删除容器
docker rm 容器 删除指定容器,不能删除正在運作的容器,如果要強制删除 rm -f
docker rm -f $(docker ps -aq) #删除所有的容器
docker ps -a -q|xargs docker rm #删除所有的容器
啟動和停止容器的操作
docker start 容器ID #啟動容器
docker restart 容器ID #重新開機容器
docker stop 容器ID #強制停止目前容器
背景啟動容器
#指令 docker run -d 容器名
[root@localhost ~]# docker run -d centos
#問題docker ps,發現centos停止了
#常見的坑: docker 容器使用背景執行,就必須要有一個前台程序,docker發現沒有應用,就會自動停止
Nginx,容器啟動後,發現自己沒有提供服務,就會立刻停止,就是沒有程式了
檢視容器日志
docker logs -f -t --tail 容器,沒有日志
#自己編寫一段shell腳本
[root@localhost ~]# docker run -d centos /bin/sh -c "while true;do echo kuangshen;sleep 1;done"
[root@localhost ~]# docker ps
CONTAINERID IMAGE
38254adcfa23 centos
[root@localhost ~]#
#顯示日志
-tf #顯示日志
--tail number #要顯示日志條數
[root@localhost ~]# docker logs -tf --tail 10 38254adcfa23
檢視容器中程序資訊ps
#指令 docker top +容器ID
[root@localhost ~]# docker top 38254adcfa23
UID PID PPID C STIME TTY TIME CMD
root 18666 18645 0 20:04 ? 00:00:01 /bin/sh -c while true;do echo kuangshen;sleep 1;done
root 19740 18666 0 20:19 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
檢視鏡像的中繼資料
docker inspect 容器ID
[root@localhost ~]# docker inspect 38254adcfa23
[
{
"Id": "38254adcfa23d6b3cabd5810d76fff1b8a5c39e364d29eaa051ccef0d8b6b7cc",
"Created": "2022-03-06T12:04:58.195572401Z",
"Path": "/bin/sh",
"Args": [
"-c",
"while true;do echo kuangshen;sleep 1;done"
],
進入目前正在運作的容器
#容器通常使用背景方式運作的,需要進入容器,修改一些配置
#指令 #進入容器并開啟一個新的終端,可以在裡面操作(常用)
docker exec -it 容器ID /bin/bash
#測試
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
38254adcfa23 centos "/bin/sh -c 'while t…" 36 minutes ago Up 36 minutes objective_moser
[root@localhost ~]# docker exec -it 38254adcfa23 /bin/bash
[root@38254adcfa23 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@38254adcfa23 /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 12:04 ? 00:00:05 /bin/sh -c while true;do echo kuangshen;sleep 1;done
root 1692 0 0 12:33 pts/0 00:00:00 /bin/bash
root 2190 0 0 12:41 pts/1 00:00:00 /bin/bash
root 2223 1 0 12:41 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
root 2224 2190 0 12:41 pts/1 00:00:00 ps -ef
#方法二
docker attach 容器id
#測試 #attach這個指令會進入正在執行的終端,不會啟用新的程序。
[root@localhost ~]# docker attach 容器ID
正在執行目前的代碼....
從容器内拷貝到主機上
docker cp 容器id:容器内檔案路徑 目的主機路徑
[root@localhost home]# docker cp f2c8956edf2d:/home/test.java /home