ubuntu安装、使用docker超级详细的入门教程
生活随笔
收集整理的這篇文章主要介紹了
ubuntu安装、使用docker超级详细的入门教程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
docker安裝
- 查看官網(https://docs.docker.com/get-docker),根據系統版本安裝。
刪除老版本
sudo apt-get remove docker docker-engine docker.io containerd runc設置儲存庫
sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release添加官方秘鑰
sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg授權docker并更新apt
sudo chmod a+r /etc/apt/keyrings/docker.gpgsudo apt-get update安裝最新docker
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin試運行
sudo docker run hello-worlddocker卸載
卸載應用
sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-compose-plugin刪除目錄
sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd默認路徑
/var/lib/docker更換docker源
登錄阿里云平臺(支付寶就能登錄)
找到容器鏡像服務
控制臺-產品與服務-彈性計算-容器鏡像服務
找到鏡像加速器
容器鏡像服務-鏡像工具-鏡像加速器
找到相關文檔,配置使用
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://*********.mirror.aliyuncs.com"] # 這里的地址每個人都有自己的} EOF sudo systemctl daemon-reload sudo systemctl restart dockerDocker的常用命令
幫助命令
-
查看信息
docker version # 顯示docker版本信息docker info # 顯示docker的系統信息,包括鏡像和容器的數量docker 命令 --help # 幫助命令 例如: docker images --help- 幫助文檔地址:https://docs.docker.com/engine/reference/commandline/docker/
鏡像命令
-
查看鏡像命令
docker images# 可選項-a, --all # 列出所有鏡像-q, --quiet 只顯示鏡像的id -
搜索鏡像
docker search # 可選項 --filter=Stars=3000 # 搜索出來的就是start大于3000的 # 例如搜索星數量大于3000的:root@mediaServer:~# docker search mysql --filter=stars=3000NAME DESCRIPTION STARS OFFICIAL AUTOMATEDmysql MySQL is a widely used, open-source relation… 13622 [OK]mariadb MariaDB Server is a high performing open sou… 5202 [OK] -
下載鏡像
docker pull [:tag] # 例如root@mediaServer:~# docker pull mysqlUsing default tag: latest # 不寫 tag,則默認是 latest (最新版)latest: Pulling from library/mysql72a69066d2fe: Pull complete # 這里是分層下載,docker image的核心 -聯合文件系統93619dbc5b36: Pull complete # 通過聯合文件系統,不同版本間會有相同的分層,相同分層可以共用,極大的節省空間99da31dd6142: Pull complete626033c43d70: Pull complete37d5d7efb64e: Pull completeac563158d721: Pull completed2ba16033dad: Pull complete688ba7d5c01a: Pull complete00e060b6d11d: Pull complete1c04857f594f: Pull complete4d7cfa90e6ea: Pull completee0431212d27d: Pull completeDigest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709 # 簽名Status: Downloaded newer image for mysql:latestdocker.io/library/mysql:latest # 真實地址# docker pull mysql 等價于 docker pull docker.io/library/mysql:latest# 如果要下載指定版本,將tag換成版本號,版本號需要在docker hub中存在 # docker hub地址 https://hub.docker.com/# 例如 指定版本號 root@mediaServer:~# docker pull mysql:5.75.7: Pulling from library/mysql # 指定的5.7版本72a69066d2fe: Already exists # 共用分層,不用下載93619dbc5b36: Already exists99da31dd6142: Already exists626033c43d70: Already exists37d5d7efb64e: Already existsac563158d721: Already existsd2ba16033dad: Already exists0ceb82207cd7: Pull complete37f2405cae96: Pull completee2482e017e53: Pull complete70deed891d42: Pull completeDigest: sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94Status: Downloaded newer image for mysql:5.7docker.io/library/mysql:5.7# 下載完畢后使用docker images可以查看當前docker擁有鏡像root@mediaServer:~# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEmysql 5.7 c20987f18b13 12 months ago 448MB # 5.7版本mysqlmysql latest 3218b38490ce 12 months ago 516MB # 最新版mysqlhello-world latest feb5d9fea6a5 15 months ago 13.3kB # 之前測試時下載的鏡像 -
刪除鏡像
docker rmi -f 鏡像id # 刪除指定容器,rmi中的i理解成image,比較容易記憶docker rmi -f 鏡像id 鏡像d 鏡像id 鏡像id #刪除多個鏡像docker rmi -f $(docker images -aq) # 刪除全部鏡像# 刪除全部鏡像root@mediaServer:~# docker rmi -f $(docker images -aq) #括號中可使用鏡像id查詢命令root@mediaServer:~# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZE
容器命令
-
說明:有了鏡像后才能創建容器,下載一個centerOS鏡像來測試
docker pull centos -
新建容器并啟動
docker run [可選參數] image# 參數說明--name="Name" 容器名字 tomcat01 tomcat02,用來區分容器-d 后臺方式運行-it 使用交互方式運行,進入容器查看內容-p 指定容器的端口 -p 8080:8080-p ip:主機端口:容器端口-p 主機端口:容器端口(常用)-p 容器端口容器端口-P 隨機指定端口# 例如,啟動并進入容器root@mediaServer:~# docker run -it centos /bin/bash[root@031b6283750a /]# ls # 查看容器內的centos,基礎版本,很多容器都是不完善的!bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var# 從容器中退出[root@f7ac477f37cc /]# exitexitroot@mediaServer:/# ls # 這里主機版本是ubuntu,鏡像版本centeros,可以看出目錄是不一樣的bin boot cdrom dev etc home initrd.img initrd.img.old lib lib64 lost+found media mnt opt proc root run sbin snap srv swapfile sys tmp usr var vmlinuz vmlinuz.old -
列出所有的運行的容器
# docker ps 命令 --列出當前正在運行的容器-a # 列出當前正在運行的容器 + 歷史運行過的容器-m=? # 顯示最近創建的容器-q # 只顯示容器的編號 # 舉例 root@mediaServer:/# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES root@mediaServer:/# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f7ac477f37cc centos "/bin/bash" 8 minutes ago Exited (0) 8 minutes ago naughty_banzai 031b6283750a centos "/bin/bash" 11 minutes ago Exited (130) 9 minutes ago quizzical_merkle -
退出容器
exit # 直接容器停止并退出 Ctrl + p + Ctrl + q # 容器不停止退出 # 舉例 退出不停止root@mediaServer:/# docker run -it centos /bin/bash [root@39160141a464 /]# root@mediaServer:/# -
刪除容器
docker rm 容器id # 刪除指定容器,不能刪除正在運行的容器,如果要強制刪除添加 -f docker rm (docker ps -aq) # 刪除所有的容器 docker ps -a -q|xargs docker rm # 使用管道命令刪除所有容器 -
啟動和停止容器的操作
docker start 容器id # 啟動容器 docker restart 容器id # 重啟容器 docker stop 容器id # 停止容器 docker kill 容器id # 殺掉容器
常用的其他命令
-
后臺啟動容器
# 命令 docker run -d 鏡像名! root@mediaServer:~# docker run -d centos 37d229c7fedaf7d65b83ea19027e9135b9f6eb5e6d545cc94d64dd86724d7c38 root@mediaServer:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES # 問題docker ps,發現centos停止了 # 常見的坑,docker 容器使用后臺運行,就必須要有一個前臺進程,docker發現沒有應用,就會自動停止 # nginx,容器啟動后,發現自己沒有提供服務,就會立刻停止,就是沒有程序了 -
查看日志
# 啟動容器,為了顯示日志, -c 后面添加一段可執行的shell腳本 root@mediaServer:~# docker run -d centos /bin/sh -c "while true;do echo kuangshen;sleep 1;done" 88fc27d4690887e96dce9ba923c5fb9e90326292be9fa70e80a3d7520794c8d8 root@mediaServer:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 88fc27d46908 centos "/bin/sh -c 'while t…" 5 seconds ago Up 4 seconds admiring_mendel # 顯示日志 docker logs -f -t --tail number 容器id-tf # 顯示日志-tail number # 要顯示的日志條數 number 條數 root@mediaServer:~# docker logs -tf --tail 10 88fc27d46908 2022-12-30T01:57:20.130177221Z kuangshen 2022-12-30T01:57:21.134535761Z kuangshen 2022-12-30T01:57:22.140011966Z kuangshen 2022-12-30T01:57:23.145330842Z kuangshen 2022-12-30T01:57:24.148903390Z kuangshen 2022-12-30T01:57:25.154288654Z kuangshen ... -
查看容器中進程信息
# 命令 docker top 容器id root@mediaServer:~# docker top e1f35e5177e3 UID PID PPID C STIME TTY TIME CMD root 66679 66651 0 10:05 pts/0 00:00:00 /bin/bash -
查看容器中的元數據
# 命令 docker inspect 容器id # 例如 root@mediaServer:~# docker inspect e1f35e5177e3 [{"Id": "e1f35e5177e387ea5f8da2f906c686e26a80b4deef458d8a4a0a2271b32ad757","Created": "2022-12-30T02:05:28.75979358Z","Path": "/bin/bash","Args": [],"State": {"Status": "running","Running": true,"Paused": false,"Restarting": false,"OOMKilled": false,"Dead": false,"Pid": 66679,"ExitCode": 0,"Error": "","StartedAt": "2022-12-30T02:05:29.214918372Z","FinishedAt": "0001-01-01T00:00:00Z"},...} ] -
進入當前正在運行的容器
# 我們通常容器都是使用后臺方式運行的,需要進入容器,修改一些配置# 命令1 docker exec -it 容器id # 例如 root@mediaServer:~# docker exec -it e1f35e5177e3 /bin/sh sh-4.4# ls bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var sh-4.4# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 02:05 pts/0 00:00:00 /bin/bash root 15 0 0 02:18 pts/1 00:00:00 /bin/sh root 22 15 0 02:18 pts/1 00:00:00 ps -ef# 命令2 docker attach 容器id # 例如 root@mediaServer:~# docker attach e1f35e5177e3 [root@e1f35e5177e3 /]# ls bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var# docker exec # 進入容器后開啟一個新的終端,可以在里面操作(常用) # docker attach # 進入容器正在執行的終端,不會啟動新的進程 -
從容器內拷貝文件到主機上
# 查看當前主機/home下的文件目錄 root@mediaServer:/home# ls administrator kuangshen.java root@mediaServer:/home# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e1f35e5177e3 centos "/bin/bash" 42 minutes ago Up 42 minutes vigilant_leavitt# 進入docker內部 root@mediaServer:/home# docker attach e1f35e5177e3 [root@e1f35e5177e3 /]# cd /home/ [root@e1f35e5177e3 home]# ls# 在home文件夾下新建一個文件 [root@e1f35e5177e3 home]# touch test.java [root@e1f35e5177e3 home]# ls test.java [root@e1f35e5177e3 home]# exit exit# 將文件拷貝出來到主機上 root@mediaServer:/home# docker cp e1f35e5177e3:/home/test.java /home root@mediaServer:/home# ls administrator kuangshen.java test.java root@mediaServer:/home## 拷貝是一個手動過程,未來我們使用 -v 卷的技術,可以實現同步
鏡像
-
鏡像是什么
鏡像是一種輕量級、可執行的獨立軟件包,用來打包軟件運行環境和基于運行環境開發的軟件,它包含運行某個軟件所需的所有內容,包括代碼、運行時、庫、環境變量和配置文件。
所有的應用,直接打包docker鏡像,就可以直接跑起來!
如何得到鏡像:- 從遠程倉庫下載
- 朋友拷貝給你
- 自己制作一個鏡像DockerFile
-
commit鏡像
1. # 提交容器成為一個新的副本 2. docker commit 3. # 命令和git原理類似 4. docker commit -m="提交的描述信息" -a="作者" 容器id 目標鏡像名:[TAG]
? 如果你想要保存當前容器的狀態,就可以通過commit來提交,獲得一個鏡像,就虛擬機的快照!
常用命令小結
- attach 容器id # 進入容器正在執行的終端,不會啟動新的進程
- cp # 從容器內拷貝文件到主機上
- Ctrl + p + Ctrl + q # 容器不停止退出
- exec -it 容器id # 進入容器后開啟一個新的終端,可以在里面操作(常用)
- exit # 直接容器停止并退出
- images # 查看鏡像
- info # 顯示docker的系統信息,包括鏡像和容器的數量
- inspect 容器id # 查看容器中的元數據
- kill 容器id # 殺掉容器
- logs # 查看容器日志
- ps # 列出所有的運行的容器
- pull [:tag] # 下載鏡像
- restart 容器id # 重啟容器
- rm 容器id # 刪除指定容器
- rmi [鏡像id] # 刪除鏡像
- run [可選參數] 鏡像 # 從一個鏡像啟動容器
- search 鏡像名 # 搜索鏡像
- start 容器id # 啟動一個容器
- stop 容器id # 停止容器
- top 容器id # 查看容器中的進程信息
- version # 顯示docker版本信息
參考
- 【狂神說java】Docker教程
https://www.kuangstudy.com/bbs/1552836707509223426
總結
以上是生活随笔為你收集整理的ubuntu安装、使用docker超级详细的入门教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【NEO官方】一键新机 改串 安装教程
- 下一篇: 2.4 特殊功能寄存器和位定义